【问题标题】:Cassandra Range Query : Secondary Index vs Unindexed ColumCassandra 范围查询:二级索引与非索引列
【发布时间】:2023-04-08 16:16:01
【问题描述】:

我已经看到在 cassandra 上进行范围查询的最佳方法是使用 CLUSTERING KEY。但除了 CLUSTERING KEY 列之外,我还需要做一些范围查询。

我读到我们可以使用 ALLOW FILTERING 在任何列上执行此操作。但是,如果我在该列上创建二级索引,是否有任何性能优势?

【问题讨论】:

  • 使用 both ALLOW FILTERING 二级索引会导致性能下降。如果您真正关心性能,则需要将数据复制到查询表中,并使用旨在支持范围查询的主键定义。

标签: cassandra nosql


【解决方案1】:

看看这个链接: https://www.datastax.com/dev/blog/allow-filtering-explained-2

ALLOW FILTERING 选项允许您告诉 Cassandra,一旦从磁盘加载行,就可以对数据执行内存过滤。因此,我们可以使用它来按聚类列进行搜索,而无需指定先前的聚类列。但是我们不能在非聚集列上使用它。

请参阅博客中的以下示例架构。使用ALLOW FILTERING 不允许我们按作者列过滤,直到我们将其设为索引,这样就不需要ALLOW FILTERING 选项。

cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING;
Bad Request: No indexed columns present in by-columns clause with Equal operator
cqlsh:test>

cqlsh:test> CREATE INDEX authors ON blogs (author);

cqlsh:test> SELECT * FROM blogs WHERE author = 'john';
(0 rows)
cqlsh:test> SELECT * FROM blogs WHERE author = 'john' ALLOW FILTERING;
(0 rows)

【讨论】:

  • 但是 RANGE QUERY 即使被索引,仍然需要 ALLOW FILTERING。对吧?
  • 我刚刚做了一个实验。 Cassandra 允许对未索引的列进行 RANGE 查询。仅限范围查询。
猜你喜欢
  • 2016-06-13
  • 2013-12-04
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2017-11-25
  • 2016-04-05
相关资源
最近更新 更多