【问题标题】:Does nodetool compact move everything into one SSTablenodetool compact 是否将所有内容都移到一个 SSTable 中
【发布时间】:2015-12-07 01:01:33
【问题描述】:

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

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

【问题讨论】:

    标签: cassandra


    【解决方案1】:

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

    对于 DateTieredCompactionStrategy 和 LeveledCompactionStrategy,根据定义,我认为即使是主要的压缩也不会合并所有 SSTable,因为这会违背他们打算创建的 SSTable 的结构。

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

    然后,当我在桌子上运行 nodetool compact 时,它会将不同大小的 SSTable 组合到一个表格中。我不确定这是否适用于所有情况。

    快速查看源代码,在 CompactionManager.java 中,它调用 cfStore.getCompactionStrategy().getMaximalTask​​(gcBefore),它返回它执行的任务列表,因此这意味着它会压缩所有内容,但我没有比这更深入的了。

    【讨论】:

    • 如果您使用 SizeTieredCompactionStrategy 在集群上手动运行 nodetool compact,您可能会等待很长时间 b4 您会获得与您手动创建的一样大的 SSTable。
    猜你喜欢
    • 2021-04-14
    • 2014-01-16
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多