Cassandra中的Memtables和SStables中的数据存储

时间:2018-09-06 18:57:33

标签: cassandra nosql cassandra-3.0

我有一个Keyspace和一个RF=2。现在,在刷新数据之前,它位于memtables中,并且在Cassandra中每个表/列族只有一个memtable

由于,cassandra中每个列族只有一个内存表,我假设RF = 2。这是否意味着该内存表每行有2个副本?

此外,如果我做nodetool flush,则所创建的sstable的每个记录是否也有两个副本?

1 个答案:

答案 0 :(得分:0)

复制因子2表示数据将存储在2个节点上。

写入路径如下:

  1. 客户端将请求发送到一个节点,该节点将成为该写入的协调者
  2. 协调器节点同时将写请求发送到所有副本节点。复制节点的数量由复制因子指定。
  3. 每个副本节点接收写入请求并执行以下操作:写入提交日志,写入内存表,使行缓存无效并向协调器节点发送确认。
  4. 协调器将等待写请求的一致性级别指定的适当数量的ack。
  5. 协调员会将确认发送给客户。

因此,在写路径的某个时间点,您的数据将位于内存表中,但由于rf = 2,这意味着数据将位于不同的内存表中,因为每个内存表均位于不同的节点上。 / p>

同样适用于nodetool刷新。由于每个稳定表都在不同的节点上,因此数据将被刷新到不同的稳定表。