Cassandra Secondary-Index如何在内部运作?文档说它是某种哈希索引:
鉴于我在username="foobar"
与User
RandomOrderingPartitioner
中有列{{1}}(列用户名将是二级索引)
在哪些节点上保存了索引部分(Cassandra是否使用与RandomOrderingPartitioner相同的逻辑拆分索引)?
如果索引仅保留在一个节点上(当然也是复制的),cassandra如何“确定”负责该节点的节点 index(通过对列名进行散列,然后使用randompartitioner logik来确定节点)?
这个指数是否真的适合低基数?如果是,那么粗略估计是什么( 是否有一个具体的数字,我可以用来判断),我不应该使用二级索引(而是使用 索引的单独CF)? 或者说不同如何计算基数并做出正确的决定?
我想了解这一点。
答案 0 :(得分:11)
二级索引基本上只是另一个列族。用户无法直接访问它们,但您可以通过JMX bean查看统计信息: org.apache.cassandra.db.IndexedColumnFamilies
您可以参考此处的统计信息来衡量索引的有效性,就像普通列系列一样。
有关详细信息,请参阅以前的帖子:
How are Cassandra's 0.7 Secondary Indexes stored?
How scalable are automatic secondary indexes in Cassandra 0.7?
由于你有一个hector标签,这里有一个指向IndexedSlicesQuery测试用例的链接: https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model/IndexedSlicesQueryTest.java