Memtable在哪里可以找到cassandra?

问题描述 投票:0回答:2

在DataStax中提到,Cassandra中每个列族有一个memtable。

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

那么集群中的memtable位于何处?如果它在节点中,那么每个列族只有一个memtable的语句是不正确的。

cassandra nosql cassandra-3.0
2个回答
3
投票

memtable是一种内存数据结构,可以为每个节点上的每个表保持打开或关闭。

memtables定期刷新到新的sstables,这些sstables与memtable for reads合并。 commitlog为memtable提供持久性,直到刷新为止。

在读取时,协调器作业将根据请求的一致性级别合并来自不同副本的数据。如果您的CL涵盖node1和node2,协调器将解析丢失的数据。当node1或node2关闭或者它们的突变被丢弃时,协调器会将突变存储在提示中,以便在它恢复时传递。如果所有失败,反熵修复将在运行时修复任何不一致。


1
投票

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

阅读更多HERE

© www.soinside.com 2019 - 2024. All rights reserved.