脱机压缩/将多个SSTable合并为一个

时间:2019-06-03 12:34:38

标签: cassandra nosql datastax nodetool

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

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

但是,最后一条命令返回0退出状态,并且table-6e9e81a0808811e9ace14f79cedcfbc4目录中没有任何更改(仍然有两个表)。有什么想法如何以脱机方式无条件地将潜在的多个SSTable合并为一个(如上,不在正在运行的集群当前使用的SSTable文件上)?

1 个答案:

答案 0 :(得分:2)

nodetool compact <keyspace> <table>并没有真正的脱机压缩,只是告诉cassandra要压缩的是哪个稳定器。用户定义的压缩只是给它一个sstables的自定义列表,而主要的压缩(上面的示例)将在一个表中包含所有sstables。

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