用记事本在cassandra中搜索机制

时间:2017-10-25 11:35:55

标签: search nodes cassandra-3.0

任何人都可以提供一些关于cassandra中搜索过程如何发生的信息,以及在搜索过程发生时如何从memtables中识别特定密钥?

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

是否由协调员节点或协调员节点完成搜索,将搜索切换到可以通过cassandra中的任何机制找到数据的右侧节点?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

希望它有所帮助!!