【问题标题】:Data Storage in Memtables and SStables in CassandraCassandra 中 Memtables 和 SStables 中的数据存储
【发布时间】:2019-02-12 02:24:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: cassandra nosql cassandra-3.0


    【解决方案1】:

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

    写入路径如下:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 2018-09-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多