【发布时间】:2013-10-08 13:01:43
【问题描述】:
当我读到这两个时,我以为他们都在解释相同的方法,我用谷歌搜索但一无所获。执行上有区别吗? Cassandra自己做二级索引但是倒排索引要自己实现?
顺便问一下,哪个搜索速度更快?
【问题讨论】:
标签: search indexing cassandra inverted-index
当我读到这两个时,我以为他们都在解释相同的方法,我用谷歌搜索但一无所获。执行上有区别吗? Cassandra自己做二级索引但是倒排索引要自己实现?
顺便问一下,哪个搜索速度更快?
【问题讨论】:
标签: search indexing cassandra inverted-index
主要区别在于 Cassandra 中的二级索引与手动倒排索引的分布方式不同。使用内置的二级索引,每个节点都会索引它在本地存储的数据(使用 LocalPartitioner)。使用手动索引,索引的分布独立于存储值的节点。
这意味着,对于内置索引,每个查询都必须转到每个节点,而如果您手动进行反向索引,则只需转到一个节点(加上副本)来查询您正在查找的值。将索引存储在本地的一个优点是可以使用数据自动更新索引。 (虽然,从 Cassandra 1.2 开始,原子批处理可以用于此,尽管它们有点慢。)
这就是为什么不建议将 Cassandra 索引用于非常高的基数数据的原因。如果你在每个节点上进行查找但只有一两个结果,效率低下,手动倒排索引会更好。如果您的查找返回许多结果,那么您无论如何都需要在每个节点上查找,以便内置索引正常工作。
使用 Cassandra 的内置索引的另一个优点是索引是延迟更新的,因此您无需在每次更新时都进行读取。 (请参阅CASSANDRA-2897。)对于具有高写入吞吐量的索引表,这可以显着提高速度。
【讨论】: