代码之家  ›  专栏  ›  技术社区  ›  Avba

如何配置Cassandra TimeWindowCompactionStrategy

  •  3
  • Avba  · 技术社区  · 7 年前

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

    分区大小不应超过10K项——通常要小得多(最多)~ 10MB 对于完整的10k项目)。

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

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

    绝对不确定这是否正确

    有什么问题 KPI 我应该考虑一下吗?

    2 回复  |  直到 7 年前
        1
  •  13
  •   Glauber Costa    7 年前

    没有唯一正确的答案:

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

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

    这听起来不太理想,但至少可以从一个SSTable表中读取该窗口中的所有数据。反过来说,例如,你可以将窗口设置为“某一天”。这会使数据过期的速度大大加快,但对于7天内有效的数据,您现在要接触的是7个sstable,而不是一个sstable。

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

    与生活中的大多数事物一样,真相在中间。虽然这两种选择都可行,但现在你明白了权衡,最好的窗口大概是在1和7年年中的某个地方。

        2
  •  0
  •   barth    7 年前

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

    因此,在您的情况下,有必要监控每次读取的墓碑数量,包括 nodetool tablestats 或者JMX。

    article 关于删除卡桑德拉的墓碑。