从记忆中清理cassandra墓碑

时间:2015-04-08 20:30:26

标签: cassandra tombstone

当我从cassandra删除一行并且数据仍然存在于memtable中时(尚未创建SSTable),看起来删除的行永远不会在memtable中清理,因为墓碑清理只能通过压缩和压缩来完成仅适用于SSTables。无论如何,在将它刷新到SSTable之前,我可以完全清除memtable本身中已删除的行吗?更新已经到位,但看起来没有删除。

我们正在使用Cassandra 2.0.8。

由于

1 个答案:

答案 0 :(得分:3)

如果您有RF> 1,墓碑仍然需要持久保存到磁盘,以确保删除安全地传输到所有副本。例如,请考虑以下事项:

RF = 3 N = 3

您有一张员工表,可在月底开火。 您将John Smith添加到要终止的员工列表中。 两分钟后,约翰史密斯做了一些很棒的事情,你想把他从名单中删除。您删除了他的条目,但3个节点中的一个是离线的 - John Smith仍然在为该离线节点触发的员工列表中。

当memtable在其中一个“up”节点上刷新时,它会持久存在表明John Smith不应被解雇的墓碑,因为当该离线服务器出现时,它需要知道John Smith的工作是安全的。< / p>

压缩最终会在gc_grace_seconds之后删除逻辑删除,但基础行为是正确的:如果您编写一个单元格,然后立即删除它,您仍然必须将逻辑删除保存到磁盘,以确保所有副本正确删除细胞