卡桑德拉过滤可能吗?

时间:2015-01-20 09:41:31

标签: cassandra

我有一个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;

我认为不可能这样,但有人可以解释原因吗? 现在我在我的代码中进行过滤,但还有其他可能吗?

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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存储快速插入和检索数据的方式,因此存在查询限制。分区中的所有数据都保存在一起,因此在分区客户端内查询通常不是问题,除非您有非常大的行(在这种情况下,可能应该检查模式)。

希望有所帮助。