即使我在所有查询中将二级索引与分区键一起指定,在 Cassandra 中二级索引是否总是一个坏主意?

Isl*_*san 4 cassandra

我知道 Cassandra 中的二级索引通常是一个坏主意,因为索引本地存储在每个节点中,即不分布在整个集群中,这可能会导致查询扫描大量节点。但是,我不明白为什么如果我总是在查询中指定分区键并且仅使用二级索引作为最终过滤器,那么它们仍然是一个坏主意。我读到,即使我指定了分区键,它们也不会随着大量数据而扩展。这是真的?如果是的话为什么?

小智 5

一般来说,二级索引是个坏主意,不仅对于分布式部分,而且对于索引大小和不同值的数量,所以如果你有一个基数高或低的字段,你将花费时间扫描许多行或许多列。另外,在处理墓碑时您可能会遇到其他问题......

为了回答你的问题,Cassandra 中的二级索引不能很好地扩展,但是如果你使用分区键并通过它告诉 Cassandra 哪个节点有数据,它的性能真的会更好!您可以在 F 部分找到更多详细信息:

https://www.datastax.com/blog/2016/04/cassandra-native-secondary-index-deep-dive

我希望这有帮助 !