关于搜索:Cassandra中二级索引和倒排索引有什么区别?

What is the difference between a secondary index and an inverted index in Cassandra?

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

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


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

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

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

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