如果我启用了压缩,例如SizeTieredCompaction
,我SSTables
会被压缩直到达到一定的大小水平。当我“删除”一个SSTable
位于相当旧且在不久的将来不会再次压缩的分区中的旧条目时,何时删除?
想象一下,你删除了 100 个条目,它们都是一个非常旧的 SSTable 的一部分,它被压缩了几次,没有热数据并且已经相当大了。需要很长时间才能再次压实并移除墓碑,对吗?
当墓碑与压缩中的数据合并时,数据将从磁盘中删除。何时发生取决于添加新数据的速率和您的压缩策略。直到 gc_grace_seconds 之后才会清除墓碑,以防止数据复活(确保在这段时间内完成修复)。
如果您覆盖或删除了很多数据并且对磁盘上的大量过时数据不满意,您可能应该LeveledCompactionStrategy
改用(如果使用 ssds,我建议始终默认为 LCS)。如果使用 STCS,最大的 sstable可能需要很长时间才能被压缩。STCS 更多的是用于不断附加数据(如日志或事件)。如果条目随着时间的推移而过期并且您严重依赖 TTL,您可能需要使用定时窗口策略。