Cassandra:应用 TWCS 时还需要手动分桶吗?
Cassandra: Is manual bucketing still needed when applying TWCS?
我正要开始探索 Cassandra 以(长期)保存时间序列(只写一次)数据,这些数据可能会变得非常大。
假设最简单的时间序列:
CREATE TABLE raw_data (
sensor uuid,
timestamp timestamp,
value int,
primary key(sensor, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC)
为了确保分区不会增长太多,互联网上的许多帖子都推荐分桶,例如介绍一天或只是一个向上计数的桶号,如
primary key((sensor, day, bucket), timestamp)
。然而,这些策略需要手动管理,这看起来很麻烦,尤其是对于未知数量的桶。
但是,如果我说添加:
AND compaction = {
'class': 'TimeWindowCompactionStrategy',
'compaction_window_size': 1,
'compaction_window_unit': 'DAYS'
};
如前所述在 https://thelastpickle.com/blog/2016/12/08/TWCS-part1.html:
TWCS aims at simplifying DTCS by creating time windowed buckets of SSTables that are compacted with each other using the Size Tiered Compaction Strategy.
据我了解,这意味着 Cassandra 在内部使用 TWCS 时无论如何都会创建只读存储桶。因此,我想知道是否还需要手动实现分桶键 day
?
存储桶的目的是阻止分区变得过大。没有桶,分区的增长是无限的——也就是说,你为特定传感器收集的数据越多,分区就越大,没有最终限制。
单独更改压缩策略不会停止分区的增长,因此您仍然需要存储桶。
(您写了 "Cassandra when using TWCS internally creates readonly buckets"。不要将它与 'bucket' 列混淆。同一个词用于两个完全不同的事物。)
另一方面,如果您要为数据设置 TTL,那么这将有效地限制分区的大小,因为早于 TTL 的数据将(最终)从磁盘中删除。因此,如果 TTL 足够小,您将不再需要存储桶。在这种特殊情况下 - 按顺序收集时间序列数据和 TTL - 然后 TWCS 是最佳压缩策略。
我正要开始探索 Cassandra 以(长期)保存时间序列(只写一次)数据,这些数据可能会变得非常大。
假设最简单的时间序列:
CREATE TABLE raw_data (
sensor uuid,
timestamp timestamp,
value int,
primary key(sensor, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC)
为了确保分区不会增长太多,互联网上的许多帖子都推荐分桶,例如介绍一天或只是一个向上计数的桶号,如
primary key((sensor, day, bucket), timestamp)
。然而,这些策略需要手动管理,这看起来很麻烦,尤其是对于未知数量的桶。
但是,如果我说添加:
AND compaction = {
'class': 'TimeWindowCompactionStrategy',
'compaction_window_size': 1,
'compaction_window_unit': 'DAYS'
};
如前所述在 https://thelastpickle.com/blog/2016/12/08/TWCS-part1.html:
TWCS aims at simplifying DTCS by creating time windowed buckets of SSTables that are compacted with each other using the Size Tiered Compaction Strategy.
据我了解,这意味着 Cassandra 在内部使用 TWCS 时无论如何都会创建只读存储桶。因此,我想知道是否还需要手动实现分桶键 day
?
存储桶的目的是阻止分区变得过大。没有桶,分区的增长是无限的——也就是说,你为特定传感器收集的数据越多,分区就越大,没有最终限制。
单独更改压缩策略不会停止分区的增长,因此您仍然需要存储桶。
(您写了 "Cassandra when using TWCS internally creates readonly buckets"。不要将它与 'bucket' 列混淆。同一个词用于两个完全不同的事物。)
另一方面,如果您要为数据设置 TTL,那么这将有效地限制分区的大小,因为早于 TTL 的数据将(最终)从磁盘中删除。因此,如果 TTL 足够小,您将不再需要存储桶。在这种特殊情况下 - 按顺序收集时间序列数据和 TTL - 然后 TWCS 是最佳压缩策略。