Cassandra:如何减少 table 中的墓碑数量? (tombstone_compaction_interval、gc_grace_seconds 和 LeveledCompactionStrategy)

Cassandra: how to reduce the number of tombstones in a table? (tombstone_compaction_interval, gc_grace_seconds and LevelledCompactionStrategy)

我有一个 table,我在其中插入 TTL 为 1 分钟的数据,并且我在 DSE OpsCenter 中收到关于该 table 中大量墓碑的警告。这确实有意义,因为平均每分钟插入 80 条记录 table。 因此,例如一整天 80 * 60 * 24 = 115200 条记录在一天内插入和 TTL。

我的问题是我应该怎么做才能减少此 table 中的墓碑数量?

我一直在研究 tombstone_compaction_intervalgc_grace_seconds,这就是它获得有点混乱,因为我无法理解这些属性对墓碑的确切影响(即使在阅读了 DataStax 提供的文档后 - http://docs.datastax.com/en/cql/3.1/cql/cql_reference/compactSubprop.html and http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html)。

我也一直在研究 LeveledCompactionStrategy (https://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra),因为它似乎也确实会影响墓碑压缩,尽管我不完全理解为什么。

所以我希望有人能够帮助我更好地理解这一切是如何运作的,或者甚至只是让我知道我的方向是否正确。

请阅读这篇文章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 压实时,但由于 SSTable 重叠,墓碑未被驱逐。

我不确定您当前的数据模型,但这是我的建议。

  1. 可能你得换个私信了。请阅读https://academy.datastax.com/resources/getting-started-time-series-data-modeling and Time series modelling( with start & end date) in cassandra
  2. 更改写入模式。
  3. 更改读取模式。尝试只读取活动数据。 (根据您当前的 DM,当您阅读它时,它会通过墓碑单元格以到达活动单元格)
  4. 尝试使用 TimeWindowCompactionStrategy 并根据您的工作量对其进行调整。 (http://thelastpickle.com/blog/2017/01/10/twcs-part2.html)
  5. 如果您在插入时使用 TTL(例如使用 INSERT 或 UPDATE stmnt),请查看是否可以将其更改为 Table 级别。

如果您正在使用 STCS 并想要更改压缩子属性,您可能可以更改 unchecked_tombstone_compaction=true 和 min_threshold=3(有点激进)