Memtable位于cassandra的什么位置?

Where is Memtable located in cassandra?

DataStax 中提到在 Cassandra 中每个列族有一个内存表。

假设我有一个 RF=2 的 2 节点 Cassandra 集群。现在,如果其中一个节点发生故障,那么另一个节点就在那里,我们可以从中检索数据。但是有可能在我的集群中说 node1 失败然后 node2 处理数据请求,一段时间后 node1 启动并且 node2 失败然后它是 node1 处理请求。

那么memtable在集群中的什么位置呢?如果它在节点中,那么每个列族只有一个 memtable 的说法是不正确的。

memtable 是内存中的数据结构,可以为每个节点上的每个 table 保留在堆上或堆外。

memtables 定期刷新到新的 sstables 与 memtable 合并以供读取。提交日志为 memtable 提供持久性,直到它被刷新。

在读取时,协调器的工作是根据请求的一致性级别合并来自不同副本的数据。如果您的 CL 涵盖 node1 和 node2,协调器将解决丢失的数据。当 node1 或 node2 出现故障或对它们的突变被删除时,协调器会将突变存储在提示中,以便在它恢复时传递。如果所有这些都失败了,反熵修复将修复 运行.

时的任何不一致

您应该查看 Cassandra 写入路径以了解更多详细信息。 memtable 是基于单个 CF 的内存结构。当数据写入 Cassandra 时,它首先写入 commitLog,然后写入 memtable,然后刷新到磁盘(sstable)

阅读更多HERE