10

Cassandra 二级索引如何在内部工作?文档声明它是某种哈希索引:

鉴于我在 CF 中有username="foobar"列(列用户名将是次要索引)UserRandomOrderingPartitioner

  1. 我的假设是否正确,cassandra 使用“分布式哈希索引”(=所以索引不在一个节点上=索引被拆分)?
  2. 索引部分保存在多少个节点上(与复制因子相同)?
  3. 索引部分保存在哪些节点上(Cassandra 是否通过与具有 RandomOrderingPartitioner 的键相同的逻辑来拆分索引)?

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

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

我试图理解这一点。

4

1 回答 1

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

于 2011-06-20T22:52:59.563 回答