Scylla/Cassandra: 没有TTL的时序数据的compaction策略

Scylla/Cassandra: compaction strategy for time series data without TTL

我们实际上使用的是 scylla,但我仍然在标题中包含了“cassandra”,因为问题也应该与之相关。

我们有一个没有 TTL 的 time-series 工作负载(数据永不过期)。对于上下文,table 架构大致如下所示:

CREATE TABLE events (
    entity INT,
    time_partition TIMESTAMP,
    event_time TIMESTAMP,

    a TEXT,
    b TEXT,
    c TEXT,
    PRIMARY KEY((entity, time_partition), event_time)
);

其中 time_partitionevent_time 相同,但始终被截断为一个小时,因此同一 entity 和同一小时内的事件将转到同一分区。

我正在考虑我们应该使用什么压缩策略。起初我认为我们应该使用 TimeWindowCompactionStrategy (TWCS):如果时间 window 是 1 天,它基本上意味着我们将有 per-day sstables ,这对我来说很有意义;但后来我发现各种文档都说 TWCS 不适合 never-expiring 数据。例如。 this doc on datastax.com 说:

not appropriate for data without a TTL workload, as storage will grow without bound.

尽管存储确实会“无限制地”增长,因为我们永远不想删除旧数据,但其他任何策略不都一样吗?如果我们从不删除数据,则意味着它会不断增长。这只是我们如何组织这个 ever-growing 数据集的问题,我不确定为什么 TWCS 不适合。 大量文件是个问题吗?例如。如果我们将 window 设为 1 天,那么对于 10 年的数据而言,它将大约有 3650 个文件。

如有任何建议,我们将不胜感激。

在 Scylla 的情况下,您将拥有更多文件,因为每个分片(核心)处理自己的压缩。但是,即使在 10 年内,您也可以拥有 36k 个文件,这对 Scylla 来说不是问题。