如何在Cassandra强制清理/压缩

时间:2016-02-16 19:52:14

标签: cassandra

我正在使用Cassandra 2.1.8来管理各种资产,主要是图像。 使用Leveled Compaction在主节点的3个节点上设置RF = 3的集群。我从群集中删除了大部分数据(使用带有大量删除的CQL脚本),但空间尚未回收。 此外,一个节点在SSTables上经历了损坏,我选择清除其数据并运行修复以重新创建它。 现在,修复后的节点现在在100个SSTable中使用250GB,而另外2个在300个SSTable中使用750GB。 “nodetool cfstats”在一个节点上显示4.5M密钥,在另外两个节点上显示17M密钥。

有没有办法在这两个节点上强制清理?运行“nodetool compact”似乎对2个节点没有太大影响 - 而且它的完成速度相当快。

2 个答案:

答案 0 :(得分:1)

没有回收空间的原因是因为Cassandra中的删除不是“即时的” - 至少从存储的角度来看是这样。直到igsjc_tweets = tweepy.Cursor(api.search, q="#igsjc", since='2015-12-31', count=10000) 过期并且压缩运行才会有效地删除数据。

现在每个人的第一直觉就是设置GC_GRACE以便数据更快地消失。这不是你想要做的。原因如下:https://lostechies.com/ryansvihla/2014/10/20/domain-modeling-around-deletes-or-using-cassandra-as-a-queue-even-when-you-know-better/

您的脚本执行了大量删除操作 - 是否删除了整个分区?或列删除?请注意,您可能会在压缩过程中遇到一些开销,具体取决于您执行的删除次数以及删除操作的次数。

答案 1 :(得分:0)

我有一个类似的问题,墓碑没有被删除。解决方案是在表上设置unchecked_tombstone_compaction属性。

如果我理解正确,这将允许删除,即使在表格没有完全修复的情况下

ALTER TABLE myTable WITH COMPACTION = { 'class': 'DateTieredCompactionStrategy','unchecked_tombstone_compaction': 'true' };