问题:
基本上我想在Cassandra中执行等效的SELECT LocID FROM GEOIPMAP,其中20 BETWEEN RangeStart和RangeEnd。
背景
我们正在努力为我们拥有的超大型桌子找到快速,大数据的解决方案。我们正在考虑转移到Cassandra,但我想知道是否可以快速/合理地获得两个箱之间的值(或者更好的解决方案,请建议)
我们有一个ip范围列表(int64),可以连接到sql中的另一个表。该表基本上是:
+------------+----------+-------+
| RangeStart | RangeEnd | LocID |
+------------+----------+-------+
| 0 | 5000 | 2 |
+------------+----------+-------+
答案 0 :(得分: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;
将从分区0的第一行给出locid,其中range end> 20。