卡桑德拉过滤可能吗?

Cassandra filtering possible?

我有一个 Cassandra table 是这样创建的:

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;

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

我希望我没有错过 post 已经解释了这一点。

感谢您的帮助!

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 存储数据以进行快速插入和检索的方式,存在查询限制。一个分区中的所有数据都放在一起,所以在分区客户端内部查询通常不是问题,除非你有非常大的宽行(在这种情况下,也许应该检查模式)。

希望对您有所帮助。