当我从cassandra删除一行并且数据仍然存在于memtable中时(尚未创建SSTable),看起来删除的行永远不会在memtable中清理,因为墓碑清理只能通过压缩和压缩来完成仅适用于SSTables。无论如何,在将它刷新到SSTable之前,我可以完全清除memtable本身中已删除的行吗?更新已经到位,但看起来没有删除。
我们正在使用Cassandra 2.0.8。
由于
答案 0 :(得分:3)
如果您有RF> 1,墓碑仍然需要持久保存到磁盘,以确保删除安全地传输到所有副本。例如,请考虑以下事项:
RF = 3 N = 3
您有一张员工表,可在月底开火。 您将John Smith添加到要终止的员工列表中。 两分钟后,约翰史密斯做了一些很棒的事情,你想把他从名单中删除。您删除了他的条目,但3个节点中的一个是离线的 - John Smith仍然在为该离线节点触发的员工列表中。
当memtable在其中一个“up”节点上刷新时,它会持久存在表明John Smith不应被解雇的墓碑,因为当该离线服务器出现时,它需要知道John Smith的工作是安全的。< / p>
压缩最终会在gc_grace_seconds之后删除逻辑删除,但基础行为是正确的:如果您编写一个单元格,然后立即删除它,您仍然必须将逻辑删除保存到磁盘,以确保所有副本正确删除细胞