【卡桑德拉】压缩
Compaction的目的是什么?
通过SSTable合并来减少读取开销
为了减少这种开销,SSTable 文件进行排序合并。
不要将数据进行物理删除。
Cassandra通过不进行原始数据替换来减轻更新/删除操作时的I/O开销,但同时也造成了浪费的磁盘空间。因此,需要对SSTable文件进行排序合并,并删除重复/过期的数据。
*换句话说,物理记录删除只会在Compaction时进行。
压缩过程
触发时机
・触发时间如下:
・根据每个表定义的压缩策略,自动在后台启动
・通过管理员执行nodetool compact命令
・SSTable的转换(如nodetool upgradesstables等)、重建(nodetool rebuild)
・与增量修复相关的压缩操作
执行过程
确认处理结果
– 可以通过 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使用量都会增加。