6

当我读到这两个时,我认为他们都在解释相同的方法,我用谷歌搜索但一无所获。执行上有区别吗?Cassandra自己做二级索引但是倒排索引必须自己实现?

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

4

1 回答 1

12

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

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

这就是为什么不建议将 Cassandra 索引用于非常高的基数数据的原因。如果你在每个节点上进行查找,但只有一两个结果,效率低下,手动倒排索引会更好。如果您的查找返回许多结果,那么您无论如何都需要在每个节点上查找,以便内置索引运行良好。

使用 Cassandra 内置索引的另一个优点是索引是延迟更新的,因此您不需要在每次更新时都进行读取。(请参阅CASSANDRA-2897。)对于具有高写入吞吐量的索引表,这可以显着提高速度。

于 2013-10-08T14:24:40.930 回答