首页 > 解决方案 > 如何配置 Cassandra TimeWindowCompactionStrategy

问题描述

我在 1-7 天后的时间序列数据TTLs(取决于用例)。数据是不可变的,并按时间戳 ( cluster by timestamp) 排序 - 数据在“写入时”加盖时间戳(因此新数据时间戳应始终是渐进式的)

分区大小不应超过 10K 项目 - 通常要少得多(最多10MB为 10k 项目)。

我没有找到任何关于如何配置压缩策略(要考虑哪些参数)的好的文档,所以我决定这样做:

compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_size': '7', 'compaction_window_unit': 'DAYS'}

绝对不确定这是正确的

KPI我应该考虑什么?

标签: cassandracassandra-3.0scylla

解决方案


没有一个正确的答案:

由于您的配置,如果数据是在过去 7 天内插入的,则数据将被压缩在一起。TWCS 最大的优点是它可以在不读取它们的情况下使整个 SSTable 过期,因为它知道 SSTable 中的所有数据都已经过期。

在这种情况下,您在 1 天内 TTLd 的数据还不能过期,因为它将在 7 天的窗口中集中在一起。在最坏的情况下,您的 SSTable 将在 7 天窗口的末尾插入一个突变,因此整个 SSTable 将再保留 7 天,直到该突变过期。

这听起来不太理想,但至少您将能够从单个 SSTable 为该窗口中的所有数据读取提供服务。反过来,例如,您可以将窗口设置为一天。这将使您的数据过期得更快,但是对于存活 7 天的数据,您现在将接触 7 个 SSTables 而不是一个。

概括:

更大的时间窗口:更慢的到期时间,更快的实时数据读取速度更小的时间窗口:更快的到期时间,更慢的实时数据读取速度。

就像生活中的大多数事情一样,真相就在中间!虽然这两个选项都可以工作——而且您现在了解了权衡,但最好的窗口可能在 1 和 7 的中间。


推荐阅读