我们使用的是Cassandra3.10和6节点集群。最近,我们注意到我们的数据量急剧增加,每个节点每天大约4gb。我们希望实现一个更积极的保留策略,在该策略中,我们将压缩更改为具有1小时窗口大小的twcs,并设置几天ttl,这可以通过表属性实现。由于etl应该是一个缓慢的过程,以便减轻cassandra的工作负载,因此在ttl完成之前,它可能无法完成所有数据的提取,因此我想知道etl过程是否有一种方法可以在完成提取之后在整个sstable上设置ttl=0?
ntjbwcob1#
您应该在表和查询级别上设置ttl0。一旦ttl过期,数据将转换为墓碑。基于gc\u grace\u seconds值,下一次压缩将清除所有墓碑。您也可以运行主要的压缩来清除墓碑,但在基于压缩策略的cassandra中不建议这样做。如果STC至少需要50%的磁盘才能正常运行压缩。
k4emjkb12#
ttl=0读作墓碑。下一次压缩时,它将被写在墓碑上或清除,这取决于你的gc\u恩典。除了写墓碑的开销之外,删除或创建包含必要墓碑的sstables可能比重写所有现有sstables更容易。如果它更有效地做范围或点墓碑将取决于您的版本和模式。一个可能最简单的选择是一起实际使用不同的压缩策略,或者像这样的自定义策略https://github.com/protectwise/cassandra-util/tree/master/deleting-compaction-strategy. 然后,您可以只清除已处理的压缩上的数据。这仍然在很大程度上取决于您的模式,即标记哪些内容已被处理或未被处理的难度有多大。
2条答案
按热度按时间ntjbwcob1#
您应该在表和查询级别上设置ttl0。一旦ttl过期,数据将转换为墓碑。基于gc\u grace\u seconds值,下一次压缩将清除所有墓碑。您也可以运行主要的压缩来清除墓碑,但在基于压缩策略的cassandra中不建议这样做。如果STC至少需要50%的磁盘才能正常运行压缩。
k4emjkb12#
ttl=0读作墓碑。下一次压缩时,它将被写在墓碑上或清除,这取决于你的gc\u恩典。除了写墓碑的开销之外,删除或创建包含必要墓碑的sstables可能比重写所有现有sstables更容易。如果它更有效地做范围或点墓碑将取决于您的版本和模式。
一个可能最简单的选择是一起实际使用不同的压缩策略,或者像这样的自定义策略https://github.com/protectwise/cassandra-util/tree/master/deleting-compaction-strategy. 然后,您可以只清除已处理的压缩上的数据。这仍然在很大程度上取决于您的模式,即标记哪些内容已被处理或未被处理的难度有多大。