【问题标题】:Cassandra filtering possible?卡桑德拉过滤可能吗?
【发布时间】:2015-03-18 11:38:15
【问题描述】:

我有一个 Cassandra 表,其创建方式如下:

CREATE TABLE table(
  num int,
  part_key int,
  val1 int,
  val2 float,
  val3 text,
  ...,
  PRIMARY KEY((part_key), num)
);

part_key 对于每条记录都是 1,因为我想执行范围查询并且只有一个服务器(我知道这不是一个好的用例)。 num 是从 1 到 1.000.000 的记录编号。我已经可以运行像

这样的查询了
SELECT num, val43 FROM table WHERE part_key=1 and num<5000;

是否可以在 Cassandra 中进行更多过滤,例如:

 ... AND val45>463;

我认为这是不可能的,但有人可以解释为什么吗? 现在我在我的代码中做这个过滤,但是还有其他的可能性吗?

我希望我没有错过已经解释过这一点的帖子。

感谢您的帮助!

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra 范围查询只能在查询指定的最后一个聚类列上进行。所以,如果你的 pk 是 (a,b,c,d),你可以这样做

    ... where a=2, b=4, c>5
    ... where a=2, b>4
    

    但不是

    ... 其中 a=2, c>5

    这是因为数据存储在分区中,按分区键(pk的第一个键)进行索引,然后按每个连续的聚类键排序。

    如果你有准确的值,你可以给 val 4 添加一个二级索引,然后做

    ... and val4=34
    

    但仅此而已。即便如此,您也想在应用索引之前点击一个分区。否则,您将获得一个可能会超时的集群范围的查询。

    由于 cassandra 存储数据以实现快速插入和检索的方式,存在查询限制。分区中的所有数据都保存在一起,因此在分区客户端内部查询通常不是问题,除非您有非常大的宽行(在这种情况下,也许应该检查架构)。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2017-05-18
      • 2015-10-19
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多