MongoDB在Ubuntu上的數據壓縮技巧
WiredTiger是MongoDB 3.2及以上版本的默認存儲引擎,支持塊壓縮(對集合數據)和前綴壓縮(對索引數據),是Ubuntu環境下最常用的數據壓縮方式。
/etc/mongod.conf
),在storage
section下添加或修改wiredTiger
配置,指定collectionConfig.blockCompressor
(集合塊壓縮算法)和indexConfig.prefixCompression
(索引前綴壓縮開關)。示例如下:storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 1 # 根據系統內存調整(建議為物理內存的50%-70%)
collectionConfig:
blockCompressor: zstd # 可選snappy(默認,平衡速度與壓縮比)、zlib(高壓縮比,高CPU消耗)、zstd(高壓縮比,低CPU消耗)
indexConfig:
prefixCompression: true # 開啟索引前綴壓縮(默認開啟,減少索引內存占用)
保存后重啟MongoDB服務使配置生效:sudo systemctl restart mongod
mongod
時通過命令行參數指定壓縮算法,適用于臨時測試:mongod --dbpath /var/lib/mongodb --wiredTigerCollectionBlockCompressor zstd
WiredTiger支持多種壓縮算法,需根據存儲空間需求、CPU性能和MongoDB版本選擇:
WiredTiger的塊壓縮不會自動回收刪除數據后的磁盤空間,需通過compact
命令重新組織數據文件并應用壓縮:
mongo --eval 'db.getSiblingDB("yourDatabase").runCommand({compact: "yourCollection"})'
compact
命令并傳入1
,壓縮指定數據庫下的所有集合:mongo --eval 'db.getSiblingDB("yourDatabase").runCommand({compact: 1})'
admin
數據庫執行compactAllDatabases
命令,壓縮實例中的所有數據庫(需管理員權限):mongo --eval 'db.adminCommand({compactAllDatabases: 1})'
注意:compact
命令會消耗大量CPU和I/O資源,建議在低峰時段執行;執行后磁盤空間不會立即釋放,需等待MongoDB自動清理或重啟服務。MongoDB 4.4及以上版本支持compactServer
命令,可在后臺異步壓縮整個實例的數據,避免阻塞正常讀寫:
mongo --eval 'db.adminCommand({compactServer: true, compression: "zstd"})'
該命令會啟動一個后臺進程執行壓縮,適合生產環境使用,但仍需注意CPU資源占用。
使用mongodump
導出數據時,添加--gzip
選項對備份文件進行壓縮,節省備份存儲空間:
# 導出并壓縮數據庫
mongodump --gzip --out /path/to/backup
# 導入壓縮的備份文件
mongorestore --gzip /path/to/backup/yourDatabase
mongostat
或serverStatus
命令監控opcounters
(操作次數)和cpuUsage
(CPU使用率),確保系統資源充足。cacheSizeGB
)應足夠大,避免頻繁讀取磁盤(壓縮后的數據讀取時需解壓縮),建議設置為物理內存的50%-70%(不超過系統總內存-1GB)。compact
)可能導致數據損壞,執行前務必備份重要數據(使用mongodump
)。prefixCompression: true
)可減少索引內存占用(約30%-50%),提升索引查詢性能。