nodetool compact with TimeWindowCompactionStrategy tables



使用Cassandra版本3.11.4我们在使用TimeWindowCompactionsgy创建的表中导入了几天的'Time序列,例如'时间序列',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
};

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

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

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

显然,此方法有效,随着已验证的启用跟踪级别登录在org.apache.cassandra.db.com.paction包:

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

我们发现了几个桶"一小时"大。

当我们运行 Nodetool Compact 时,问题出现在每个Cassandra节点上。

我们期望为每个"一个小时"获得一个单一的sstable。我们得到的是一个巨大的(每个节点(,所有行合并了!

这是假定的行为吗?我们做错了吗?

这是预期的行为。您可以将节点离线放在X中,然后将所有TTL分开,然后等待所有TTL到期,然后观察单个大型Sstable被清理。请记住要用STW上的桌子上的维修,否则情况可能会变得凌乱。我了解到这是艰难的方式。否则,这是时间序列数据的绝佳压实策略。

最新更新