获取一个值在2列之间的行

时间:2014-05-09 15:33:35

标签: sql cassandra

问题:

基本上我想在Cassandra中执行等效的SELECT LocID FROM GEOIPMAP,其中20 BETWEEN RangeStart和RangeEnd。

  1. 这可能吗?
  2. 有更好的解决方案吗?
  3. 背景

    我们正在努力为我们拥有的超大型桌子找到快速,大数据的解决方案。我们正在考虑转移到Cassandra,但我想知道是否可以快速/合理地获得两个箱之间的值(或者更好的解决方案,请建议)

    我们有一个ip范围列表(int64),可以连接到sql中的另一个表。该表基本上是:

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

1 个答案:

答案 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。