Cassandra:如果更新发生在提交日志刷新到 Memtable 之前,如何处理更新

Cassandra : How updates are handled if it happens before commitlog is flushed to Memtable

为 cassandra 写入路径:

第 1 步 - 数据立即写入提交日志。 第 2 步 - 达到阈值后,CommitLog 被刷新到 Memtable 中 第 3 步 - 一旦 Memtable 中的大小达到阈值,数据将作为 SSTable 刷新到磁盘中。

在上面的过程中,如果数据是在步骤1本身更新的,那么是否需要任何特殊处理。

例如我们有员工列族。程序开始将数据写入 Column Family,在插入 10 行后,对第 3 行发出更新并且仍然数据未刷新到 Memtable。

Cassandra 会处理这种情况作为崩溃恢复吗?

请分享对此的看法。

这是 Cassandra 的写入路径

  1. 如果在创建密钥空间时 durable_writes 设置为 true,数据将附加到 Commitlog。
  2. 数据也立即写入 Memtable。
  3. 一旦满足 Memtable 的阈值,数据就会作为 SSTable 刷新到磁盘中。

在任何时候,如果在刷新到磁盘之前发生更新,memtable 会捕获该更新的记录,并且 commitlog 会附加该更新。现在如果发生崩溃;在 Cassandra 重启期间,所有这些记录都从 commitlog 重放,因此保证 writes/updates 的持久性。

额外reference