我的时间序列数据TTLs
在1-7天后(取决于用例)。
数据是不可变的,并按时间戳(cluster by timestamp
排序)-数据带有时间戳“写时”(因此新数据时间戳应始终为渐进式)
分区大小不应超过1万个项目-通常要少得多(对于一万个完整项目,最多为〜{10MB
)。
我没有找到有关如何配置压缩策略(要考虑哪些参数)的良好文档,所以我决定这样做:
compaction = {'class': 'TimeWindowCompactionStrategy', 'compaction_window_size': '7', 'compaction_window_unit': 'DAYS'}
绝对不确定这是正确的
我应该考虑的KPI
是什么?
答案 0 :(得分:12)
没有一个正确的答案:
根据您的配置,如果数据是在最近7天内插入的,则数据将被压缩在一起。 TWCS的最大优点是它可以使整个SSTables失效,甚至不读取它们,因为它知道SSTable中的所有数据都已经失效。
在这种情况下,您在1天中进行TTLd处理的数据还不能过期,因为它将在7天的窗口中集中在一起。在最坏的情况下,您的SSTable将有一个突变插入到7天窗口的末尾,因此整个SSTable将再保留7天,直到一个突变终止。
这听起来不是很理想,但是至少您将能够从单个SSTable中为该窗口中的数据提供所有读取。反之,则可以将窗口设置为一天。这样可以使您的数据过期更快,但是对于存活7天的数据,您现在将使用7个SSTable,而不是一个。
摘要:
更长的时间范围:更慢的到期时间,更快的实时数据读取 时间窗口更小:过期时间更快,实时数据读取速度更慢。
与生活中的大多数事物一样,真理在中间!虽然这两个选项都可以工作-并且您现在已经了解了取舍,但最佳窗口可能在1到7的中间位置。
答案 1 :(得分:0)
TTL在sstable中创建墓碑,并通过压缩将其删除。太多的墓碑几乎不会影响您的阅读性能。
因此,在您的情况下,值得使用nodetool tablestats
或JMX监视每次读取的逻辑删除数。
关于删除cassandra中的墓碑,请参见这个不错的article。