Cassandra nodetool compact是否将所有内容移动到一个SSTable中

Cassandra nodetool compact是否将所有内容移动到一个SSTable中,cassandra,Cassandra,Cassandra压缩过程减少了用于存储数据的SSTABLE(磁盘上的数据文件)的数量。小型压缩自动发生。您可以告诉Cassandra使用nodetool compact命令执行主要压缩 运行nodetool compact是否仅执行一轮压缩,减少了SSTABLE的数量,但可能仍然会导致存在多个SSTABLE?或者它总是将(列族的)所有SSTable压缩到一个SSTable中吗?这取决于您为表设置的压缩策略 对于DateTieredCompactionStrategy和LeveledCompac

Cassandra压缩过程减少了用于存储数据的SSTABLE(磁盘上的数据文件)的数量。小型压缩自动发生。您可以告诉Cassandra使用
nodetool compact
命令执行主要压缩


运行
nodetool compact
是否仅执行一轮压缩,减少了SSTABLE的数量,但可能仍然会导致存在多个SSTABLE?或者它总是将(列族的)所有SSTable压缩到一个SSTable中吗?

这取决于您为表设置的压缩策略

对于DateTieredCompactionStrategy和LeveledCompactionStrategy,根据定义,我认为即使是主要的压缩也不会合并所有的SSTable,因为这会与它们要创建的SSTable的结构背道而驰

对于默认的SizeTieredCompactionStrategy,有趣的是,主要的压缩似乎会将SSTables合并到一个表中。我运行了
cassandra stress-write
,看了一会儿SSTables。我可以看到较小的压缩组合了相似大小的SSTables,但没有将不同大小的SSTables压缩成一个

然后,当我在表上运行
nodetool compact
时,它会将不同大小的SSTables合并到一个表中。我不确定这是否在所有情况下都是正确的


快速查看源代码,在CompactionManager.java中,它调用cfStore.getCompactionStrategy().getMaximalTask(gcBefore),它返回它执行的任务列表,这意味着它将压缩所有任务,但是我没有深入研究过这个问题。

如果您在一个具有SizeTieredCompactionStrategy的集群上手动运行nodetool compact,您可能需要等待很长时间。b4如果您得到足够的SSTables,其大小与您手动创建的SSTables一样大。