首页 > 解决方案 > 如何使用 TWCS 和计数器列从 Cassandra 表中删除数据?

问题描述

我有一个使用 TWCS 的表,包括一个计数器列:

create table sensors_by_time (
            group text,     // sensor group
            date date,       // bucketing
            id text,        // sensor id 
            count counter,  // detected count
        primary key ((group, date), id))
        WITH CLUSTERING ORDER BY (id DESC)
        AND compaction = {
            'compaction_window_size': '24',
            'compaction_window_unit': 'HOURS',
            'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'}

一周后,我有 7 个 sstables(每天 1 个)。我需要 7 天的数据,所以我想使用 ttl 和 gc_grace_seconds 但 Cassandra doe 不支持带有计数器列的表上的 ttl ..

我的另一个选择是使用一些工作来删除超过 7 天的数据,但我知道这对我的表现不利,因为 TWCS:http ://www.redshots.com/cassandra-twcs-must-have-ttls/

我应该如何从这样的表中删除旧数据?

标签: cassandra

解决方案


我知道我正在复活一个老问题,但我遇到了类似的问题,并编写了一个工具来帮助解决它。在每个节点上,您必须:

  • 停止 cassandra 进程
  • 删除包含旧记录的 SSTable
  • 重新开始这个过程

困难的部分是知道哪些 SSTable 包含您不再感兴趣的日期范围。Cassandra 带有一个工具,sstablemetadata它显示 SSTable 元数据,包括最小/最大时间戳。

sstablemetadata速度慢,输出难以处理。取而代之的是 try ls-sstm,它输出关于 Cassandra 表目录中每个 SSTable 的格式良好的表格数据:https ://github.com/lokkju/cassandra-tools/blob/main/ls-sstm.sh


推荐阅读