【问题标题】:Data Storage in Memtables and SStables in CassandraCassandra 中 Memtables 和 SStables 中的数据存储
【发布时间】:2019-02-12 02:24:29
【问题描述】:
我有一个Keyspace 和RF=2。现在,在刷新数据之前,它位于 memtables 中,并且 Cassandra 中的每个表/列族只有一个 memtable。
因为,cassandra 中每个列族只有一个内存表,我假设 RF=2。这是否意味着 memtable 每行有 2 个副本?
另外,如果我这样做nodetool flush,创建的 sstable 是否也有每条记录的两个副本?
【问题讨论】:
标签:
cassandra
nosql
cassandra-3.0
【解决方案1】:
复制因子为 2 意味着数据将存储在 2 个节点上。
写入路径如下:
- 客户端向一个节点发送请求,该节点将成为该写入的协调器
- 协调节点同时向所有副本节点发送写请求。副本节点的数量由复制因子指定。
- 每个副本节点接收写入请求并执行以下操作:写入提交日志、写入内存表、使行缓存无效并向协调节点发送确认。
- 协调器将等待写入请求的一致性级别指定的适当数量的 ack。
- 协调器将向客户端发送 ack。
因此,在写入路径期间的某个时间点,您的数据将位于内存表中,但由于您的 rf = 2,这意味着数据将位于不同的内存表中,因为每个内存表位于不同的节点上。
同样适用于 nodetool 刷新。由于每个 sstable 位于不同的节点上,因此数据将被刷新到不同的 sstables。