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

fer*_*teh 6 indexing search cassandra inverted-index

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

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

Ric*_*ard 12

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

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

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

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

  • 受这个问题的启发,我在我的博客上写了一个更详细的答案:www.wentnet.com/blog/?p = 77 (3认同)