如何在Cassandra sstable上设置TTL

时间:2019-03-04 11:52:25

标签: cassandra

我们将Cassandra 3.10与6个节点集群一起使用。

最近,我们注意到我们的数据量急剧增加,每个节点每天大约4GB。 我们希望实施一种更具侵略性的保留策略,在该策略中,我们将压缩方式更改为1小时窗口大小的TWCS,并设置几天的TTL,这可以通过表格属性来实现。

由于ETL为了减轻Cassandra的工作量而应该是一个缓慢的过程,因此有可能在TTL之前不会完成提取所有数据,所以我想知道ETL过程是否有办法设置TTL = 0完成提取后,在整个SSTable上运行吗?

2 个答案:

答案 0 :(得分:1)

TTL = 0被读取为逻辑删除。下次压缩时,将根据您的gc_grace将其写入墓碑或清除。除了进行逻辑删除的写操作之外,仅进行删除或创建包含必要逻辑删除的sstables可能比重写所有现有的sstables更容易。是否更有效地进行范围或指向逻辑删除取决于您的版本和架构。

最简单的选择是实际上一起使用不同的压缩策略,或者像https://github.com/protectwise/cassandra-util/tree/master/deleting-compaction-strategy这样的自定义策略。然后,您可以只清除已处理的压缩数据。这仍然很大程度上取决于您的架构,以标记要处理或未处理的内容有多困难。

答案 1 :(得分:0)

您还应该在表和查询级别上设置TTL 0。 TTL过期后,数据将转换为逻辑删除。根据gc_grace_seconds的值,下一次压缩将清除所有逻辑删除。您也可以运行大型压实来清除墓碑,但是在基于压缩策略的卡桑德拉中不建议这样做。如果要运行正常压缩,则STCS至少需要50%的磁盘。