首页 > 解决方案 > 将多个 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 文件上)?

标签: cassandranosqldatastaxnodetool

解决方案


只是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


推荐阅读