一个爬虫项目,数据存储使用的 MongoDB 2.6,按网站和月份划分数据库。每次到月末,存储性能就大幅下降,mongostat
查看是锁操作花费太多的时间。
MongoDB 2.6 默认的MMAP引擎只支持数据库锁,虽然做过一些优化,但是在我这实际用起来发现效果并不是很好。
想要降低锁操作的时间,要么减少数据库体积,要么就换引擎。前者需要拆分出更多的数据库,不方便管理,就只能在引擎上下手。
MongoDB 3.0 自三月份正式发布已经快两个月,应该趋于稳定。3.0除了将默认的存储引擎MMAP升级到支持集合锁,更是带入了支持文档锁的WiredTiger引擎。本着试一试的想法,最近把MongoDB升级到了3.0,引擎切换到 WiredTiger,结果是在没做其他优化的情况下解决了爬虫存储性能下降的问题。:P
- 升级的步骤可以参见官方文档。
- WiredTiger引擎还可以开启数据压缩,据说可以大幅降低空间占用,提升内存的效率。现在爬虫系统还没遇到新的瓶颈,就不做尝试了,之后可以在这个点上进行进一步的优化。
- 3.0之后出的修复版本,更新内容很多都是修复WiredTiger引擎的问题的,希望 WT 引擎早日稳定。
- MMAP引擎和WiredTiger的数据文件不兼容,单库切换引擎需要将旧的数据使用
mongoexport
全部导出,在使用mongoimport
重新导入。