Cassandra中二级索引和倒排索引之间有什么区别?

时间:2013-10-08 13:01:43

标签: search indexing cassandra inverted-index

当我读到这两个时,我认为他们两个都在解释相同的方法,我用谷歌搜索但没有发现任何东西。实施方面有区别吗? Cassandra本身是二级索引,但倒排索引必须由我自己实现吗?

顺便说一下,哪个搜索速度更快?

1 个答案:

答案 0 :(得分:12)

主要区别在于Cassandra中的二级索引的分布方式与手动倒排索引的分布方式不同。使用内置的二级索引,每个节点都会对其本地存储的数据(使用LocalPartitioner)进行索引。使用手动索引,索引的分布独立于存储值的节点。

这意味着,对于内置索引,每个查询必须转到每个节点,而如果您手动反转索引,则只需转到一个节点(加上副本)来查询您正在查找的值。使索引存储在本地的一个优点是索引可以用数据原子地更新。 (尽管从Cassandra 1.2开始,原子批次可以用来代替它,尽管它们有点慢。)

这就是为什么不推荐使用Cassandra索引来获得真正高基数的数据。如果您在每个节点上进行查找但只有一个或两个结果,则效率低,手动反向索引会更好。如果您的查找返回了许多结果,那么您仍需要在每个节点上查找,以便内置索引运行良好。

使用Cassandra内置索引的另一个好处是索引会被懒惰地更新,因此您无需对每次更新进行读取。 (参见CASSANDRA-2897。)对于具有高写入吞吐量的索引表,这可以显着提高速度。