低磁盘水平压缩策略 space

Leveled Compaction Strategy with low disk space

我们有带有 Leveled Compaction Strategy 的 Cassandra 1.1.1 服务器。

系统工作,有读取和删除操作。每半年我们删除大约一半的数据,同时有新数据进来。有时磁盘使用率会上升到 75%,而我们知道实际数据大约占 40-50%,其他 space 被墓碑占用.为了避免磁盘溢出,我们通过将所有 SSTable 降到级别 0 来强制压缩我们的 tables。为此,我们删除了 .json 清单文件并重新启动 Cassandra 节点。 (gc_grace 选项没有帮助,因为只有在填充级别后才开始压缩)

从 Cassandra 2.0 开始,清单文件被移动到 sstable 文件本身:https://issues.apache.org/jira/browse/CASSANDRA-4872

我们正在考虑迁移到 Cassandra 2.x,但我们担心我们不会再有强制水平压缩的可能性了。

我的问题是:我们如何实现 table 有磁盘 space 限制,例如150GB? (当超过限制时,它会自动触发压缩)。问题主要是关于 Cassandra 2.x。同时也欢迎 Cassandra 1.1.1 的任何替代解决方案。

看来我自己找到了答案。

  • 有工具 sstablelevelreset 从 2.x 版本开始,它可以像删除清单文件一样进行类似的级别重置。该工具位于 Cassandra 发行版的 tools 目录中,例如apache-cassandra-2.1.2/tools/bin/sstablelevelreset.

  • 从 Cassandra 1.2 (https://issues.apache.org/jira/browse/CASSANDRA-4234) 开始,Leveled Compaction Strategy 支持删除墓碑,支持 tombstone_threshold 选项。它提供了在 table.

  • 中设置最大墓碑比例的可能性