【问题标题】:how do multiple Cassandra secondary indices work?多个 Cassandra 二级索引如何工作?
【发布时间】:2014-09-27 14:45:01
【问题描述】:

由于 Cassandra 没有执行计划,我们想知道多个二级索引如何工作?即,如果查询按不同的列顺序过滤,哪个二级索引会获得偏好,为什么?

我们知道它们是一种不好的做法,应该用于低基数集或许多重复,但我们试图利用现有的旧 cassandra 表,并且不能同时使用 cassandra 二级索引和 SOLR 索引,所以不要这里没有选项。

这里也不多讨论:http://www.datastax.com/docs/1.1/ddl/indexes

【问题讨论】:

  • 我还想知道“如何实际表示多个索引”,因为每个索引仅用作映射到同一节点内数据的多个行 ID 以及“如何检索数据”,确实它从每个节点聚合多组数据(但首先使用哪个索引列),然后将所有节点的所有行加在一起?

标签: cassandra sql-execution-plan secondary-indexes


【解决方案1】:

二级索引就像您自己创建的查找表,由 cassandra 管理。节点存储它包含的行的索引信息。更新节点上的索引和更新该节点上的数据是原子的。如果您的查询中使用了多个索引,那么实际上只会使用一个。我希望有人可以纠正我,但据我所知,您的谓词中的第一个过滤器就是将要使用的过滤器。

不要将索引视为全局查找(一般情况下)。这将导致烦人的性能问题等。将索引视为一种快速获取分区内某些列的方法,在这些列上您想要相等过滤器的列不是集群键(或者您希望能够过滤在第二个聚类键上而不指定第一个)。如果碰到分区,那么索引性能通常还不错。关于低基数的信息是正确的 - 基数越高,您的索引的性能就越差。

以下是关于索引的简短常见问题解答: http://wiki.apache.org/cassandra/SecondaryIndexes

【讨论】:

  • 我知道主分区键和它们的数据可以表示为一个 SortedHashMap 在给定令牌值的分区中进行 O(1) 查找,想知道 Secondary 的结构是什么指数是?如果确实使用了第一个索引列,那么我们应该选择基数最多(值很少)还是基数最少(唯一值很多)的那个?另外,当指定多个二级索引时,关于使用第一个索引列的文档在哪里?以及如何进行查找以匹配所有二级索引的值。
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2013-07-25
  • 2016-06-29
  • 2014-09-27
  • 2013-09-30
  • 2018-07-01
相关资源
最近更新 更多