MongoDB 在 Linux 上的数据压缩实践
一 存储引擎与压缩总览
二 配置集合与索引压缩
storage:
engine: wiredTiger
wiredTiger:
collectionConfig:
blockCompressor: snappy # 可选:none/snappy/zlib/zstd
indexConfig:
prefixCompression: true # 默认 true,建议保持开启
修改后需重启 mongod 生效。db.createCollection("email", {
storageEngine: {
wiredTiger: { configString: "block_compressor=zlib" }
}
})
三 压缩算法选择与影响
| 算法 | 压缩率 | CPU 开销 | 适用场景 |
|---|---|---|---|
| none | 无 | 极低 | 已加密/已压缩数据(如图片、视频) |
| snappy | 中等(约2:1) | 低 | 写入密集、对时延敏感 |
| zlib | 较高(约3:1) | 中 | 读取低频、存储敏感 |
| zstd | 最高(约4:1) | 中低 | 读取密集、存储紧张 |
四 网络传输压缩
net:
compression:
compressors: snappy,zstd,zlib
五 监控、空间回收与备份压缩
db.serverStatus().mem(关注 resident/virtual)。db.stats().dataSize + db.stats().indexSize 在压缩前后变化(单位字节)。compact 整理碎片并释放未使用空间:db.runCommand({ compact: "<collection>" })(注意:执行期间会占用额外磁盘空间与 I/O)。--gzip 在导出/导入时直接压缩,减少备份体积与磁盘占用(MongoDB 3.2+ 支持)。mongodump --host <host> --port <port> --gzip --out /backup/path
mongorestore --host <host> --port <port> --gzip /backup/path