cassandra 中使用 memtables 的搜索机制

searching mechanism in cassandra with memtables

任何人都可以提供一些有关 cassandra 中搜索过程如何发生的信息,以及搜索过程发生时如何从内存表中识别特定键的信息吗?

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

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

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

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

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

现在,由于 Cassandra 中的分区数据存在于多个 SSTables 中,Cassandra 会为记录的每个版本(具体到每个 column/field)附加一个时间戳,并使用此时间戳将来自不同 SSTables 和 memtable 的记录合并到呈现完整记录的当前版本。

所以对于你的回答,事实上协调器首先从首选节点询问查询(它从八卦状态评估)。这个节点比执行上述操作。
有关详细信息,请阅读
http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/dml/dmlAboutReads.html

希望对您有所帮助!!