多个SSTable离线compaction/merging合二为一

Offline compaction/merging of multiple SSTables into one

$ cd /tmp
$ cp -r /var/lib/cassandra/data/keyspace/table-6e9e81a0808811e9ace14f79cedcfbc4 .
$ nodetool compact --user-defined table-6e9e81a0808811e9ace14f79cedcfbc4/*-Data.db

我希望将两个 SSTable(其中第二个仅包含墓碑)合并为一个,这相当于第一个减去第二个墓碑掩盖的数据。

然而,最后一个命令returns 0退出状态并且table-6e9e81a0808811e9ace14f79cedcfbc4目录中没有任何变化(仍然有两个表)。任何想法如何以离线方式无条件地将多个潜在的 SSTables 合并为一个(像上面一样,不是 运行 集群当前使用的 SSTables 文件)?

只是nodetool compact <keyspace> <table>没有真正的离线压缩,只是告诉cassandra要压缩哪些sstable。 user-defined 压缩就是给它一个自定义的 sstables 列表,而主要压缩(上面的例子)将在 table.[= 中包含所有 sstables 12=]

虽然它真的取决于你使用的是哪个版本,但它是否可以工作https://github.com/tolbertam/sstable-tools#compact available. If desperate can import cassandra-all for your version and do like it : https://github.com/tolbertam/sstable-tools/blob/master/src/main/java/com/csforge/sstable/Compact.java