【问题标题】:How to set TTL on Cassandra sstable如何在 Cassandra sstable 上设置 TTL
【发布时间】:2019-07-25 17:36:13
【问题描述】:

我们使用的是 Cassandra 3.10 和 6 个节点集群。

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

由于 ETL 应该是一个缓慢的过程以减轻 Cassandra 的工作量,因此它可能要到 TTL 才能完成所有数据的提取,所以我想知道 ETL 过程是否有办法设置 TTL=0完成提取后在整个 SSTable 上?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    TTL=0 被读取为墓碑。下次压缩时,它将被写入墓碑或清除,具体取决于您的 gc_grace。除了写入 tombstone 的开销之外,仅执行删除或创建包含必要 tombstone 的 sstable 可能比重写所有现有的 sstable 更容易。范围或点墓碑是否更有效将取决于您的版本和架构。

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

    【讨论】:

    • 感谢您的回复,但根据它的自述文件,它支持 c* 2.X
    【解决方案2】:

    您也应该在表和查询级别上设置 TTL 0。一旦 TTL 过期,数据将转换为墓碑。根据 gc_grace_seconds 值,下一次压缩将清除所有墓碑。您也可以运行主要压缩来清除墓碑,但基于压缩策略不建议在 cassandra 中使用。如果 STCS 至少需要 50% 的磁盘来运行健康的压缩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      相关资源
      最近更新 更多