Cassandra和Secondary-Indexes,他们如何在内部工作?

时间:2011-06-20 22:12:15

标签: cassandra hector

Cassandra Secondary-Index如何在内部运作?文档说它是某种哈希索引:

鉴于我在username="foobar"User

的CF RandomOrderingPartitioner中有列{{1}}(列用户名将是二级索引)
  1. 我的假设是否正确,cassandra使用“分布式哈希索引”(=因此索引不在一个节点上=索引被分割)?
  2. 关于保留索引部分的节点数(与复制因子相同)?
  3. 在哪些节点上保存了索引部分(Cassandra是否使用与RandomOrderingPartitioner相同的逻辑拆分索引)?

  4. 如果索引仅保留在一个节点上(当然也是复制的),cassandra如何“确定”负责该节点的节点 index(通过对列名进行散列,然后使用randompartitioner logik来确定节点)?

  5. 这个指数是否真的适合低基数?如果是,那么粗略估计是什么( 是否有一个具体的数字,我可以用来判断),我不应该使用二级索引(而是使用 索引的单独CF)? 或者说不同如何计算基数并做出正确的决定?

  6. 我想了解这一点。

1 个答案:

答案 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