我已经在我的代码中实现了 TTL 功能并成功删除了记录。但数据存储大小保持不变。应立即减少。最新的 Cassandra 文档说数据将在第一次压缩后被删除(它没有清晰)。
我的简单问题
我需要在完成 TTL 后立即确保大小。那么如何保证磁盘空间是否减少呢?
请分享你的想法..
谢谢
我已经在我的代码中实现了 TTL 功能并成功删除了记录。但数据存储大小保持不变。应立即减少。最新的 Cassandra 文档说数据将在第一次压缩后被删除(它没有清晰)。
我的简单问题
我需要在完成 TTL 后立即确保大小。那么如何保证磁盘空间是否减少呢?
请分享你的想法..
谢谢
每个节点上的 nodetool repair -pr 将删除您的墓碑记录(并且您应该经常根据 gc_grace_seconds 执行此操作,请参阅http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_repair_nodes_c。 html?scroll=concept_ds_ebj_d3q_gk)。
对于磁盘空间进度,这可能就像在前后运行“df -h”一样简单。
Cassandra 将其数据保存在 sstables 中。AFAIK 知道,在正常写入期间,sstables 将被附加(不更新,删除)。就像您自己提到的那样,它是合并 sstables 的压缩。这会在删除逻辑删除(删除的列)时产生更多可用磁盘空间。
可以在这里阅读,压缩是一个后台进程。您可以通过配置影响频率,如此处所述。我认为没有办法强制使用 Cassandra 客户端进行小规模压缩。您可能会使用nodetool compact
. 但是,请记住,压缩是相当 I/O 密集型的。所以我不认为这是一个真正的解决方案。
但是为什么立即物理删除删除的数据如此重要?