使用TimeWindowCompactionStrategy表精简的nodetool

时间:2019-05-14 13:47:23

标签: cassandra

使用Cassandra版本3.11.4,我们将几天的“类似时间序列”数据导入到使用TimeWindowCompactionStrategy,小时内的compaction_window_unit和compaction_window_size为1的表创建的表中。

CREATE TABLE MYTABLE (
  some_fields text,
(...)
AND compaction = {
  'class' : 'TimeWindowCompactionStrategy',
    'compaction_window_unit': 'HOURS',
    'compaction_window_size': 1
};

由于这是从另一个数据库导入的历史数据,因此我们以这种方式更改了插入查询的时间戳:

INSERT INTO MYTABLE (...) USING TIMESTAMP [timestamp of the record] AND TTL ...

其中[记录的时间戳]是插入的每个时间序列记录的时间戳。

显然,此方法有效,因为已验证在org.apache.cassandra.db.compaction包上启用了TRACE级别的日志记录:

TRACE [CompactionExecutor:421] ...TimeWindowCompactionStrategy.java:252 - buckets {
1523124000000=[BigTableReader(path='.../md-487-big-Data.db')], 
1523070000000=[BigTableReader(path='.../md-477-big-Data.db')], 
1523109600000=[BigTableReader(path='.../md-530-big-Data.db')], 
1523134800000=[BigTableReader(path='.../md-542-big-Data.db')] }, 
max timestamp 1523134800000

在这里我们发现了几个“一小时”大的水桶。

当我们在每个cassandra节点上运行 nodetool compact 时,问题就来了。

我们期望的是为每个“一个小时的时段”获得一个稳定值。 我们得到的是一个巨大的sstable(每个节点),所有行都合并了!

这是假想的行为吗?我们在做错什么吗?

1 个答案:

答案 0 :(得分:1)

这是预期的行为。您可以使节点脱机并将sstable拆分为X,或者等待所有TTL过期,然后观察单个大sstable进行清理。请记住要使用STWS关闭对表的修复,否则,事情可能会变得混乱。我了解到这很困难。否则,这是一个很好的时间序列数据压缩策略。