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

Mar*_*kus 10 cassandra hector

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

鉴于我username="foobar"在CF中User有colum(列用户名将是scondary index)RandomOrderingPartitioner

  1. 我的假设是否正确,cassandra使用"分布式哈希索引"(=因此索引不在一个节点上=索引被拆分)?
  2. 关于保留索引部分的节点数(与复制因子相同)?
  3. 在哪些节点上保存索引部分(Cassandra是否使用与RandomOrderingPartitioner的键相同的逻辑拆分索引)?

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

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

我想了解这一点.

zzn*_*ate 11

二级索引基本上只是另一个列族.用户无法直接访问它们,但您可以通过JMX bean查看统计信息:org.apache.cassandra.db.IndexedColumnFamilies

您可以参考此处的统计信息来衡量索引的有效性,就像普通列族一样.

有关详细信息,请参阅以前的帖子:

Cassandra的0.7二级指数是如何存储的?

Cassandra 0.7中自动二级索引的可扩展性如何?

由于你有一个hector标签,这里有一个指向IndexedSlicesQuery测试用例的链接:https: //github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model /IndexedSlicesQueryTest.java