Cassandra:如何减少表格中的墓碑数量? (tombstone_compaction_interval,gc_grace_seconds和LevelledCompactionStrategy)

时间:2017-07-20 16:30:30

标签: cassandra datastax-enterprise cassandra-2.1 opscenter

我有一个表格,我插入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.htmlhttp://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html)之后。

我也一直在调查LevelledCompactionStrategy(https://www.datastax.com/dev/blog/leveled-compaction-in-apache-cassandra),因为它似乎也会影响墓碑压缩,虽然我不完全理解为什么。

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

1 个答案:

答案 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的重叠,墓碑没有被驱逐。

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

  1. 可能你必须改变你的DM。请阅读https://academy.datastax.com/resources/getting-started-time-series-data-modelingTime 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),请查看是否可以将其更改为表级别。
  6. 如果您正在使用STCS并想要更改压缩子属性,可能您可以更改  unchecked_tombstone_compaction = true和min_threshold = 3(有点激进)