如何解决scylla / cassandra中令牌范围上压缩的磁盘空间要求
我在Scylla db中使用SizeTieredCompaction策略。我删除了特定令牌范围内的一半数据(假设x到y)。我的gc_grace_seconds设置为6小时。我想摆脱在此令牌范围内创建的所有墓碑。如果在gc_grace_seconds过去之后在群集中的所有节点上运行nodetool compact --start-token x --end-token y keyspace table
,会发生什么?它将删除逻辑删除,并消耗多少磁盘空间?会和需要更多50%空间的nodetool compact
大压缩一样吗?
解决方法
要删除墓碑,您还需要运行nodetool repair
。有关修复程序的详细信息,请参见here。基本上,修复会比较节点之间的数据,以便可以安全地删除逻辑删除。
压缩所需的空间取决于特定的工作负载,如果没有有关您的工作负载的数据,则不可能提供答案。但是2倍是一个安全的赌注,其中要考虑安全边际。完全压缩后,由于每个节点上仅保存了一份数据副本,因此使用的空间将最小。
很遗憾,Scylla的nodetool compact
文档(请参阅https://docs.scylladb.com/operating-scylla/nodetool-commands/compact/)甚至没有令牌范围选项。但是Cassandra文档(https://cassandra.apache.org/doc/latest/operating/compaction/index.html)解释了所谓的子范围压缩的作用:
仅压缩给定的子范围是可能的-如果您知道令牌的行为不正常,这可能很有用-收集许多更新或许多删除。 (
nodetool compact -st x -et y
)将选择包含x和y范围内的所有sstable,并为这些sstable进行压缩。对于STCS,这很可能会包含所有sstable,但是使用LCS时,它可以为该sstable的子集发出压缩。
使用STCS的常见情况是,所有sstable在令牌环中都具有令牌,因此,您的nodetool紧凑调用通常会调用所有sstable的完全主要压缩。令牌范围选项可能不会免除任何sstable的压缩。因此,临时磁盘空间开销将与STCS一样:在压缩结束时,您将同时拥有旧的sstable和新的sstable。您假设新数据仅占原始数据的一半,因此新数据将约为旧数据的总大小的一半,因此这可能是您要求的“ 50%”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。