如何在旧的 SSTables 中删除 Cassandra 墓碑?
How are Cassandra Tombstones deleted in old SSTables?
如果我启用了压缩,例如 SizeTieredCompaction
,我的 SSTables
会被压缩,直到达到特定大小级别。当我 "delete" 一个位于 SSTable
分区中的旧条目非常旧且在不久的将来不会再次压缩时,何时进行删除?
假设您删除了 100 个条目,并且所有条目都是一个非常旧的 SSTable 的一部分,该 SSTable 被压缩了几次,没有热数据并且已经相当大了。它需要很长时间才能再次压缩并移除墓碑,对吗?
当逻辑删除与压缩中的数据合并时,数据将从磁盘中删除。何时发生取决于添加新数据的速率和您的压缩策略。墓碑直到 gc_grace_seconds 之后才会被清除,以防止数据复活(确保修复在这段时间内完成)。
如果您大量覆盖或删除数据并且磁盘上有大量过时数据不正常,您可能应该改用 LeveledCompactionStrategy
(如果使用 ssds,我建议始终默认为 LCS)。如果使用 STCS,最大的 sstables 可能需要 long 时间才能压缩。 STCS 更适合不断附加数据(如日志或事件)。如果条目随时间过期并且您严重依赖 TTL,您可能希望使用定时 window 策略。
如果我启用了压缩,例如 SizeTieredCompaction
,我的 SSTables
会被压缩,直到达到特定大小级别。当我 "delete" 一个位于 SSTable
分区中的旧条目非常旧且在不久的将来不会再次压缩时,何时进行删除?
假设您删除了 100 个条目,并且所有条目都是一个非常旧的 SSTable 的一部分,该 SSTable 被压缩了几次,没有热数据并且已经相当大了。它需要很长时间才能再次压缩并移除墓碑,对吗?
当逻辑删除与压缩中的数据合并时,数据将从磁盘中删除。何时发生取决于添加新数据的速率和您的压缩策略。墓碑直到 gc_grace_seconds 之后才会被清除,以防止数据复活(确保修复在这段时间内完成)。
如果您大量覆盖或删除数据并且磁盘上有大量过时数据不正常,您可能应该改用 LeveledCompactionStrategy
(如果使用 ssds,我建议始终默认为 LCS)。如果使用 STCS,最大的 sstables 可能需要 long 时间才能压缩。 STCS 更适合不断附加数据(如日志或事件)。如果条目随时间过期并且您严重依赖 TTL,您可能希望使用定时 window 策略。