1. 选择合适的存储引擎
MongoDB 4.2及以上版本默认使用WiredTiger存储引擎(替代已弃用的MMAPv1),其支持文档级并发控制、数据压缩和更好的内存管理,显著提升性能与存储效率。可通过以下命令验证当前存储引擎:
mongo --eval 'db.adminCommand({getParameter: 1, storageEngine: 1})'
若需切换引擎(如从MMAPv1转WiredTiger),需停止服务、备份数据、修改配置文件(/etc/mongod.conf)中的engine参数,再重启服务。
2. 配置WiredTiger关键参数
WiredTiger的性能与存储效率可通过以下参数优化:
storage.wiredTiger.engineConfig.cacheSizeGB,建议设置为系统物理内存的50%-80%(如8GB内存可设为4-6GB),避免占用过多内存影响系统及其他进程。blockCompressor(支持snappy、zlib、lz4),其中snappy平衡了压缩率与CPU开销(默认),zlib压缩率更高但消耗更多CPU。配置示例如下:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4
collectionConfig:
blockCompressor: snappy
压缩可减少磁盘空间占用(通常可达30%-50%),但会增加少量CPU负载。3. 优化数据存储路径与权限
/etc/mongod.conf中设置storage.dbPath(如/var/lib/mongodb),确保该路径仅用于MongoDB数据存储,避免与其他应用冲突。chown -R mongodb:mongodb /var/lib/mongodb(假设MongoDB用户为mongodb),确保MongoDB进程对数据目录有读写权限。4. 索引策略优化
合理的索引可大幅提升查询性能,减少全表扫描带来的磁盘I/O:
_id、username、timestamp)创建索引,使用db.collection.createIndex({field: 1})(升序)或db.collection.createIndex({field: -1})(降序)。{status: 1, createTime: -1}),创建复合索引可避免多次索引扫描。db.collection.getIndexes()查看现有索引,删除未使用或冗余的索引(如db.collection.dropIndex("indexName")),减少内存与存储占用。5. 磁盘空间管理技巧
compact命令(如db.runCommand({compact: 'collectionName'}))对集合进行压缩和碎片整理,释放未使用的空间(需停机或锁定集合);定期执行repairDatabase(db.runCommand({repairDatabase: 1}))可回收损坏数据占用的空间,但需备份数据后操作。mongodump导出后删除本地数据;定期清理临时集合、日志集合(如system.profile)。df -h监控磁盘空间使用率,设置阈值(如85%)触发告警;通过MongoDB内置工具(如mongostat)监控存储增长趋势,提前规划扩容。6. 硬件与文件系统选择
ext4(稳定、兼容性好)或XFS(高性能、支持大文件),避免使用FAT32或NTFS(不支持Linux权限与大文件)。7. 副本集与分片集群
_id、userId)避免数据倾斜。