cassandra - 将多个 SSTable 离线压缩/合并为一个
问题描述
$ cd /tmp
$ cp -r /var/lib/cassandra/data/keyspace/table-6e9e81a0808811e9ace14f79cedcfbc4 .
$ nodetool compact --user-defined table-6e9e81a0808811e9ace14f79cedcfbc4/*-Data.db
我希望将两个 SSTable(其中第二个仅包含墓碑)合并为一个,这相当于第一个减去第二个中的墓碑掩盖的数据。
但是,最后一个命令返回0
退出状态并且目录中没有任何变化table-6e9e81a0808811e9ace14f79cedcfbc4
(仍然有两个表)。任何想法如何以离线方式无条件地将潜在的多个 SSTable 合并为一个(如上,不在正在运行的集群当前使用的 SSTable 文件上)?
解决方案
只是nodetool compact <keyspace> <table>
没有真正的离线压缩,只是告诉 cassandra 哪些 sstables 要压缩。用户定义的压缩只是给它一个自定义的 sstable 列表,一个主要的压缩(上面的例子)将包括一个表中的所有 sstable。
虽然它确实取决于您使用的版本是否可以工作,但有https://github.com/tolbertam/sstable-tools#compact可用。如果绝望可以为您的版本导入 cassandra-all 并喜欢它:https ://github.com/tolbertam/sstable-tools/blob/master/src/main/java/com/csforge/sstable/Compact.java
推荐阅读
- r - 如何在 R 中创建新变量?
- python - Pandas 数据框中的某些字段在使用 apply 和 Polyfuzz 时显示为 None
- reactjs - 'Notifications' 类型的参数不能分配给 'Notifications[] 类型的参数 | 记录
' - java - 在异步进程的情况下,Spring @Cacheable 无法按预期工作
- python - 无法让 matlab.engine 在 M1 Mac 上工作
- sql-server - Spring:调用具有 DATE 或 DATETIME 参数的 SQL Server 存储过程
- swift - 如何在swift中同步下载Dropbox中的所有文件?
- django-rest-framework - 您如何禁止同源访问但允许严格的跨域访问?
- python - 以编程方式访问 Excel 公式
- javascript - 循环时如何创建不同的数组值?