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