如何配置Cassandra TimeWindowCompactionStrategy

Avn*_*arr 3 cassandra scylla cassandra-3.0

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

分区大小不应超过10K项 - 通常要少得多(最多〜10MB对于完整的10k项).

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

compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_size': '7', 'compaction_window_unit': 'DAYS'}
Run Code Online (Sandbox Code Playgroud)

绝对不确定这是否正确

什么是KPI我应该考虑?

Gla*_*sta 12

没有一个正确的答案:

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

在这种情况下,您在1天内TTLd的数据尚未过期,因为它将在7天的窗口中集中在一起.在最坏的情况下,您的SSTable将在7天窗口的末尾插入一个突变,因此整个SSTable将保持7天左右,直到一个突变到期.

这听起来不是最理想的,但至少您可以从单个SSTable为该窗口中的数据提供所有读取服务.反过来说,你可以将窗口设置为一天.这会使您的数据过期更快,但对于7天内存活的数据,您现在将触及7个SSTable而不是一个.

摘要:

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

就像生活中的大多数事情一样,事实就在中间!虽然两种选择都可行 - 而你现在理解权衡,但最佳窗口可能在1和7中间.


小智 0

TTL 在 sstable 中创建墓碑,并通过压缩将其删除。太多的墓碑几乎不会影响你的阅读表现。

因此,在您的情况下,值得使用 JMX 来监视每次读取的墓碑数量nodetool tablestats

请参阅这篇关于删除 cassandra 中的墓碑的好文章