【问题标题】:searching mechanism in cassandra with memtablescassandra中的搜索机制与memtables
【发布时间】:2018-04-06 11:36:03
【问题描述】:

谁能提供一些关于 cassandra 中搜索过程如何发生的信息,以及在搜索过程发生时如何从 memtables 中识别特定键?

是否就像列键存储在 memtables 中,然后如果匹配则进入 SSTables 以收集列数据?如果是,搜索模式是否会搜索每个 memtable 或任何机制来搜索正确的 memtable?

搜索是由协调节点完成还是协调节点将搜索移交给可以通过cassandra中的任何机制找到数据的正确节点?

【问题讨论】:

    标签: search nodes cassandra-3.0


    【解决方案1】:

    cassandra 中的读取机制非常棒。
    Cassandra 应该合并来自活动内存表和可能的多个 SSTables的结果。
    从 Cassandra 读取记录时,如果 行缓存 中存在记录,则将从 行缓存 提供读取服务,而无需查看任何其他位置 这是Cassandra 中可用的最快读取路径。
    Cassandra 首先检查 Bloom 过滤器以发现哪些 SSTables 可能具有请求分区数据。布隆过滤器通过缩小键池来加快分区键查找的过程。
    如果布隆过滤器不排除 SSTable,Cassandra 会检查分区键缓存 但是,如果您在键缓存中找不到它,即如果分区键不在键缓存中,Cassandra 将查看分区摘要,这只是分区索引的一个样本。分区摘要有助于跳转到分区索引中的特定偏移量。

    进入分区索引后,我们现在有了 SSTable 中分区键的偏移量,我们可以直接从 SSTable 的偏移量获取(到 memtable)记录。

    Cassandra 总是参考 压缩偏移量,以便能够从压缩块中读取数据。

    现在,由于 Cassandra 中的分区数据存在于多个 SSTables 中,Cassandra 将时间戳附加到记录的每个版本(特别是每个列/字段),并使用此时间戳合并来自不同 SSTables 和 memtable 的记录以呈现当前版本的完整记录。

    因此,事实上,对于您的回答,协调员首先从首选节点(它从 gossip 状态 评估)询问查询。该节点执行上述操作。
    欲了解更多信息,请阅读
    http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/dml/dmlAboutReads.html

    希望对你有帮助!!

    【讨论】:

    • 是的,这是我们可以获得的有关行缓存和布隆过滤器的最佳信息吗?或者您想推荐一些有关此主题的有用链接,尤其是布隆过滤器以及如何根据八卦选择最佳 SSTable
    • 在插入大块数据时,它是随机存储的。是内置的还是线程生成是随机的?
    • 数据存储基于节点间的token分布。
    • 是的,刚才我检查了它..哈希函数会生成随机令牌,数据存储将是随机的..
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2018-02-14
    • 2015-11-23
    • 2018-10-09
    相关资源
    最近更新 更多