首页 > 解决方案 > Cassandra 中 Memtables 和 SStables 中的数据存储

问题描述

我有一个Keyspace. RF=2现在在数据被刷新之前,它就在 Cassandra 中,每个表/列族memtables只有一个。memtable

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

另外,如果我这样nodetool flush做,创建的 sstable 是否也有每条记录的两个副本?

标签: cassandranosqlcassandra-3.0

解决方案


复制因子为 2 意味着数据将存储在 2 个节点上。

写入路径如下:

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

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

这同样适用于 nodetool 刷新。由于每个 sstable 位于不同的节点上,因此数据将被刷新到不同的 sstables。


推荐阅读