2014-05-09 26 views
0

問題之間:獲取行時衛生組織值是2列

基本上我想執行SELECT LOCID相當於FROM GEOIPMAP其中20之間rangeStart和rangeEnd的在卡桑德拉。

  1. 這可能嗎?
  2. 有沒有更好的解決方案?

背景:

我們正在努力尋找一個非常大的表中,我們有一個快速的,大數據解決方案。我們正在考慮轉移到卡桑德拉,但我想知道是否有可能快速/合理地獲得兩個倉之間的值(或更好的解決方案,請建議)

我們有一個ip範圍列表(int64 )可以在sql中連接到另一個表。該表基本上是:

+------------+----------+-------+ 
| RangeStart | RangeEnd | LocID | 
+------------+----------+-------+ 
|   0 |  5000 |  2 | 
+------------+----------+-------+ 
+0

你的領域約束一些更多的信息將是有益的。對於一個給定的IP,它是否可以在多個範圍內,或者是不重疊的範圍,並且IP和範圍之間有多對一的映射關係? –

+0

@TupshinHarper範圍開始和範圍結束都是唯一的,永遠不會重疊,並且永遠不會有死區。範圍到位置ID是一對多......範圍只有一個locID,但在許多不同的範圍中可以找到一個LocID。範圍最終超過40億。 –

回答

0

如果你的範圍不重疊,你可以在一個分區內做到這一點。

CREATE TABLE locs (
    bucket INT, 
    rangeend INT, 
    locid INT, 
    PRIMARY KEY (bucket, rangeend)); 

您將要使用某種類型的分區鍵(桶)的事物分成多個分區,否則你將只是使擁有此行的節點上的一個熱點。

然後,您可以:

SELECT locid FROM locs WHERE bucket = 0 AND rangeend > 20 LIMIT 1; 

會給你LOCID從第一行分區0,其中範圍結束> 20

相關問題