【问题标题】:Is there any way to have Cassandra safely remove tombstones *before* gc_grace_seconds have elapsed?有什么方法可以让 Cassandra 在 *gc_grace_seconds 过去之前*删除墓碑?
【发布时间】:2014-12-24 07:56:02
【问题描述】:
我知道过早删除墓碑是危险的,因为它可能导致已删除的数据复活,但如果所有副本都已确认删除,那么这种删除应该是安全的。例如,如果一个表的复制因子为 3,并且包含该键的所有 3 个节点都已确认它们具有适当的 tombstone,则执行删除 tombstone 的压缩应该是安全的,因为不会有数据的延迟副本.
在 Cassandra 中是否可以安全地移除墓碑?
我宁愿将gc_grace_seconds 设置为无穷大并依赖这种类型的墓碑安全压缩,而不是担心nodetool repair 和gc_grace_seconds 的时间安排。
【问题讨论】:
标签:
cassandra
garbage-collection
tombstone
【解决方案1】:
不,不更改 gc_grace_seconds 就无法删除墓碑。
在某些操作中,所有 3 个副本都可能确认墓碑,删除它,然后稍后需要它。考虑需要将较早的 SSTable 流式传输回集群的情况。
这种类型的手动删除墓碑会显着降低性能,因为您只会定期而不是经常这样做。您将不必要地读取额外的数据,并不断压缩应该删除的墓碑。
我的建议是将 gc_grace_seconds 设置为合理的值(10 天即可)并使用 opscenter 或 cassandra-reaper 安排维修时间。