cassandra - 如何使用 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 进程
- 删除包含旧记录的 SSTable
- 重新开始这个过程
困难的部分是知道哪些 SSTable 包含您不再感兴趣的日期范围。Cassandra 带有一个工具,sstablemetadata
它显示 SSTable 元数据,包括最小/最大时间戳。
sstablemetadata
速度慢,输出难以处理。取而代之的是 try ls-sstm
,它输出关于 Cassandra 表目录中每个 SSTable 的格式良好的表格数据:https ://github.com/lokkju/cassandra-tools/blob/main/ls-sstm.sh
推荐阅读
- c# - 绑定 MVVM WPF 后添加到 Combobox
- postgresql - Postgres / JDBC 与 pgjdbc-ng:将 EAN 类型写入数据库
- firebase-storage - 如何升级到 Firebase 存储规则 v2
- c++ - 卡在项目 euler 的问题 8 上,得到错误的答案,但代码似乎正确
- c - 如何处理 C 中输入的数字太大?
- python - 如何通过匹配某个元素来填充二维数组的所有行?
- angular - 关于测试 Angular $localize (Angular 9) 的建议
- amazon-web-services - Boto3 SES 抛出 TypeError: sequence item 0: expected str instance, tuple found
- javascript - 如何使用 d3.js 以编程方式触发拖动事件?
- python - 如何使用 python webbot 获取包含标签的文本?