Cassandra 卡桑德拉常数墓碑压实表

Cassandra 卡桑德拉常数墓碑压实表,cassandra,cql,cassandra-2.1,tombstone,Cassandra,Cql,Cassandra 2.1,Tombstone,我有几个Cassandra表,在这些表上不断运行墓碑压缩,我相信这就是Cassandra进程高CPU使用率的原因 我的设置包括: compaction = {'tombstone_threshold': '0.01', 'tombstone_compaction_interval': '1', 'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'} default_time_to_live = 1728

我有几个Cassandra表,在这些表上不断运行墓碑压缩,我相信这就是Cassandra进程高CPU使用率的原因

我的设置包括:

compaction = {'tombstone_threshold': '0.01', 
'tombstone_compaction_interval': '1', 'class': 
'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
default_time_to_live = 1728000
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
在其中一个表中,我每分钟都向其中写入数据。由于设置了TTL,所以每分钟也会有一整组行过期

  • 持续压实是由于较低的墓碑\u阈值和墓碑\u压实\u间隔造成的吗

  • 有人能详细解释一下墓碑\u阈值和墓碑\u压缩\u间隔吗。卡桑德拉的文件没有很好地解释这一点


因此,假设SSTable与压实间隔时间相同,则墓碑压实可以触发。SStables是在压缩对象时创建的。阈值是在压缩仅用于墓碑而不是加入sstables之前,sstable中有多少是墓碑

您使用的是leveled,并且有一个20天的ttl。为了跟上进度,你将要做大量的压缩和墓碑压缩。最好的办法是确保旧墓碑不会占用默认压缩程序的磁盘空间

如果这个数据是听起来像是时间序列的数据,你可能会考虑使用它。这将创建“bucket”,每个bucket在压缩后都是一个sstable,因此一旦该表中的数据的ttl过期,压缩程序就可以删除整个sstable,这将更加高效


TWCS是一个jar,您需要将它添加到2.1的类路径中,我们目前正在生产中使用它。卡桑德拉的3.x系列中也添加了它。

感谢您的解释和TWCS的建议。你能详细解释一下为什么你说一个20天的TTL会导致大量的压缩和墓碑压缩。