当我从 cassandra 中删除一行并且数据仍然存在于 memtable 中(尚未创建 SSTable)时,看起来已删除的行永远不会在 memtable 中被清理,因为墓碑清理仅通过压缩完成,而压缩仅适用于SSTables。无论如何,在将其刷新到 SSTable 之前,我是否可以完全清除 memtable 本身中已删除的行?更新已经到位,但似乎没有删除。
我们正在使用 Cassandra 2.0.8。
谢谢
如果 RF > 1,则墓碑仍需要持久保存到磁盘,以确保删除安全地传输到所有副本。例如,考虑以下情况:
射频 = 3 N = 3
你有一张员工表在月底要解雇。您将 John Smith 添加到要终止的员工列表中。两分钟后,John Smith 做了一件很棒的事情,您想将他从列表中删除。您删除了他的条目,但 3 个节点之一处于脱机状态 - John Smith 仍在为该脱机节点解雇的员工列表中。
当 memtable 在其中一个“up”节点上刷新时,它将保留指示 John Smith 不应被解雇的 tombstone,因为当该离线服务器启动时,它需要知道 John Smith 的工作是安全的。
压缩最终会在 gc_grace_seconds 之后删除 tombstone,但基本行为是正确的:如果您写入一个单元格,然后立即删除它,您仍然必须将 tombstone 保存到磁盘以确保所有副本正确删除该单元格。