【卡桑德拉】压缩

Compaction的目的是什么?

通过SSTable合并来减少读取开销

为了减少这种开销,SSTable 文件进行排序合并。

不要将数据进行物理删除。

Cassandra通过不进行原始数据替换来减轻更新/删除操作时的I/O开销,但同时也造成了浪费的磁盘空间。因此,需要对SSTable文件进行排序合并,并删除重复/过期的数据。
*换句话说,物理记录删除只会在Compaction时进行。

压缩过程

触发时机

・触发时间如下:
・根据每个表定义的压缩策略,自动在后台启动
・通过管理员执行nodetool compact命令
・SSTable的转换(如nodetool upgradesstables等)、重建(nodetool rebuild)
・与增量修复相关的压缩操作

执行过程

undefined

确认处理结果

– 可以通过 system.log 或 debug.log 中 CompactionExecutor 的日志输出进行确认。
– Compacting ~
可以确认 Compaction 处理的 SSTable 目标。
– Compacted ~
可以确认 Compaction 处理的结果。
– 合并了 ~ 个 SSTable [合并的 SSTable 数量]
– 将 ~ 字节缩减为 ~ [前后数据大小]
– 合并了 ~ 个分区到 ~ [前后分区数量]
– 从{1: ~,2: ~,}个 SSTable 合并了多少个分区
例如,“2:46” 表示从两个 SSTable 合并了 46 个分区。

压实的注意事项

・在进行Compaction处理时,由于新旧的SSTable共存,导致磁盘空间的使用量暂时增加。
・在进行Compaction处理时,磁盘I/O和CPU使用量都会增加。

广告
将在 10 秒后关闭
bannerAds