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

标签 cassandra hector

Cassandra二级索引如何在内部工作?文档指出这是某种哈希索引:

鉴于我在带有username="foobar"的CF User中具有列RandomOrderingPartitioner(列用户名将为scondary索引)

  • 我的假设是否正确,cassandra使用“分布式哈希索引”(=因此索引不在单个节点上=索引已拆分)?
  • 保留索引部分有多少个节点(与复制因子相同的大小)?
  • 索引部分位于哪些节点上(Cassandra是否通过与RandomOrderingPartitioner的键相同的逻辑来拆分索引)?
  • 如果索引仅保留在一个节点上(当然是复制的),那么cassandra如何“确定”负责该索引的节点
    索引(通过对列进行哈希处理,然后使用randompartitioner logik确定节点)?
  • 确实如此,该索引针对低基数进行了优化吗?如果是的话,大概是什么估算值(
    有没有我可以用来判断的具体数字),我不应该使用二级索引(而是使用
    索引的单独CF)?
    还是换句话说,如何计算基数并做出正确的决定?

  • 我试图理解这一点。

    最佳答案

    二级索引基本上只是另一个列族。用户无法直接访问它们,但是您可以通过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

    关于Cassandra和Secondary-Indexes,它们在内部如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418181/

    相关文章:

    java - Cassandra Java 客户端 (Hector) : Using the same cluster and keyspace objects throughout the application

    Cassandra 'bad state',无法运行压缩?

    cassandra - 如何理解Cassandra中的 'Flexible schema'?

    使用 Hector 1.0.5 插入大量数据时 Cassandra 1.1.1 崩溃

    cassandra - 使用 Hector API 将数据插入新的 Cassandra 数据库的最简单方法?

    java - Cassandra hector loader 应用内存不足

    java - 按顺序从 Cassandra 检索结果

    Cassandra 顺序修复不会在一次运行中修复所有节点?

    node.js - 考虑背压,将数据从 Cassandra 流式传输到文件

    Cassandra 热键空间结构变化