Linux环境下MongoDB的数据压缩策略主要围绕 存储引擎内置压缩(WiredTiger)、网络传输压缩及压缩操作工具展开,旨在平衡存储空间节省、CPU开销与性能需求。
WiredTiger是MongoDB 3.2及以上版本的默认存储引擎,支持块级压缩(Block Compression),可显著减少磁盘空间占用。其配置主要通过mongod.conf文件实现,关键参数包括:
snappy(默认)、zlib、zstd三种算法,不同算法的压缩率、CPU开销及适用场景差异较大:
| 算法 | 压缩率(典型) | CPU开销 | 适用场景 |
|---|---|---|---|
snappy |
中等(约2:1) | 低 | 写入密集型(如日志、实时数据) |
zlib |
较高(约3:1) | 中 | 读取低频、存储敏感(如历史归档) |
zstd |
最高(约4:1) | 中低 | 读取密集型(如报表、分析查询) |
zstd为例):storage:
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 根据服务器内存调整,建议为物理内存的40%-60%
collectionConfig:
blockCompressor: zstd # 设置集合级别的压缩算法
修改配置后需重启mongod服务生效:sudo systemctl restart mongod。MongoDB的网络传输(如副本集同步、mongos与mongod通信)可通过net.compression配置压缩数据包,减少带宽占用(尤其适用于跨地域或云环境)。
net:
compression:
compressors: snappy,zstd,zlib # 按优先级排序,两端协商最优算法
用于重组数据文件、删除未使用空间并应用压缩,适用于已有数据的压缩优化。
db.adminCommand({compact: 1})db.getSiblingDB("dbName").runCommand({compact: "dbName"})db.getSiblingDB("dbName").runCommand({compact: "collectionName"})snappy(低CPU开销,保证写入速度);zstd(高压缩率、高解压效率,节省存储且不影响查询性能);zlib(较高压缩率,适合长期归档);db.serverStatus()、mongostat等工具监控缓存命中率、I/O等待时间、网络吞吐量,评估压缩效果。