由于 Cassandra 没有执行计划,我们想知道多个二级索引如何工作?即,如果查询按不同的列顺序过滤,哪个二级索引会获得优先权,为什么?
我们确实知道它们是一种不好的做法,应该用于低基数集或许多重复,但我们试图利用现有的遗留 cassandra 表,并且不能同时使用 cassandra 二级索引和 SOLR 索引,所以没有选项在这里。
由于 Cassandra 没有执行计划,我们想知道多个二级索引如何工作?即,如果查询按不同的列顺序过滤,哪个二级索引会获得优先权,为什么?
我们确实知道它们是一种不好的做法,应该用于低基数集或许多重复,但我们试图利用现有的遗留 cassandra 表,并且不能同时使用 cassandra 二级索引和 SOLR 索引,所以没有选项在这里。
二级索引就像您自己创建的查找表,由 cassandra 管理。节点存储它包含的行的索引信息。更新节点上的索引和更新该节点上的数据是原子的。如果您的查询中使用了多个索引,那么实际上只会使用一个。我希望有人可以纠正我,但据我所知,谓词中的第一个过滤器就是要使用的过滤器。
不要将索引视为全局查找(在一般情况下)。这将导致烦人的性能问题等。将索引视为一种快速获取分区内某些列的方法,在这些列上您想要相等过滤器的列不是集群键(或者您希望能够过滤在第二个聚类键上而不指定第一个)。如果碰到分区,那么索引性能通常还不错。关于低基数的信息是正确的 - 基数越高,您的索引执行得越差。
这是一个关于索引的简短常见问题解答: http ://wiki.apache.org/cassandra/SecondaryIndexes