【问题标题】:Disk space requirement for compaction on a token range in scylla/cassandra在 scylla/cassandra 中压缩令牌范围的磁盘空间要求
【发布时间】:2020-10-23 04:20:42
【问题描述】:

我在 Scylla db 中使用 SizeTieredCompaction 策略。我删除了特定令牌范围内的一半数据(比如说 x 到 y)。我的 gc_grace_seconds 设置为 6 小时。我想摆脱在这个令牌范围内创建的所有墓碑。如果我在 gc_grace_seconds 过去之后在集群中的所有节点上运行nodetool compact --start-token x --end-token y keyspace table,会发生什么?它会删除墓碑吗?它会消耗多少磁盘空间?会不会和nodetool compactmajor compaction 一样,需要多 50% 的空间?

【问题讨论】:

    标签: cassandra scylla


    【解决方案1】:

    不幸的是,Scylla 的nodetool compact 文档(请参阅https://docs.scylladb.com/operating-scylla/nodetool-commands/compact/)甚至没有令牌范围选项。但是 Cassandra 文档 (https://cassandra.apache.org/doc/latest/operating/compaction/index.html) 解释了所谓的 sub-range compaction 的作用:

    可以只压缩给定的子范围 - 如果您知道一个行为不端的令牌 - 这可能很有用 - 收集许多更新或许多删除。 (nodetool compact -st x -et y) 将选择所有包含 x 和 y 之间范围的 sstables 并为这些 sstables 发出压缩。对于 STCS,这很可能包括所有 sstable,但对于 LCS,它可以为 sstable 的子集发出压缩。

    使用 STCS,常见的情况是所有 sstable 都有来自整个令牌环的令牌,因此您的 nodetool compact 调用通常会调用所有 sstable 的完整主要压缩。令牌范围选项可能不会免除任何 sstable 被压缩。因此,STCS 的临时磁盘空间开销将与往常一样:在压缩结束时,您拥有旧的 sstable 和新的 sstable。你假设新的只有原始数据的一半,所以新的 sstable 将是旧 sstable 总大小的一半左右,所以这可能是你问的“50%”。

    【讨论】:

      【解决方案2】:

      要删除墓碑,您还需要运行nodetool repair。有关修复程序的详细信息,请参阅here。基本上修复会比较节点之间的数据,以便墓碑可以安全过期。 压缩所需的空间取决于特定的工作负载,如果没有有关工作负载的数据,就不可能提供答案。但是考虑到安全边际,2x 是一个安全的赌注。完全压缩后,使用的空间将最小化,因为每个节点上只保存 1 个数据副本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-29
        • 2019-06-10
        • 1970-01-01
        • 2022-06-29
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多