我有一个表格,我插入TTL为1分钟的数据,我在DSE OpsCenter中有一个关于该表中大量墓碑的警告。这是有意义的,因为在此表中平均插入每分钟80条记录。 例如,一天内插入80 * 60 * 24 = 115200条记录并在一天内完成TTL。
我的问题是我应该怎么做才能减少这张表中的墓碑数量?
我一直在研究 tombstone_compaction_interval 和 gc_grace_seconds 这是因为我在理解这些属性的确切影响方面遇到问题时会有点混乱在墓碑上(即使在阅读了DataStax提供的文档 - http://docs.datastax.com/en/cql/3.1/cql/cql_reference/compactSubprop.html和http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html)之后。
我也一直在调查LevelledCompactionStrategy(https://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra),因为它似乎也会影响墓碑压缩,虽然我不完全理解为什么。
所以我希望有人能够帮助我更好地理解这一切是如何运作的,或者只是让我知道我是否朝着正确的方向前进。
答案 0 :(得分:1)
请阅读http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html。非常好读。
总体而言:gc_grace_seconds参数是删除数据后逻辑删除将保留在磁盘上的最短时间。我们需要确保所有副本都收到删除并存储所有逻辑删除以避免出现僵尸数据问题。默认为10天。
tombstone_compaction_interval:作为此JIRA(https://issues.apache.org/jira/browse/CASSANDRA-4781)的一部分,引入了此属性。 当压实比高到足以触发单SSTable压实时,但是由于SSTables的重叠,墓碑没有被驱逐。
我不确定您当前的数据模型,但这是我的建议。
如果您正在使用STCS并想要更改压缩子属性,可能您可以更改 unchecked_tombstone_compaction = true和min_threshold = 3(有点激进)