我正在使用大约 400 万个文档和大约 5-6GB 数据库大小的 MongoDB。该机器有 10GB 的 RAM,并且免费报告仅使用了大约 3.7GB。该数据库用于视频游戏相关的阶梯(排名)网站,按地区分隔。
这是一个相当繁重的写入操作,但仍然可以获得大量读取。我们使用一个更新程序,它每隔一两个小时查询一次外部源。然后,此更新程序处理记录并更新数据库上的文档。更新程序一次只处理一个区域(见上一段),因此大约 33% 的数据库被更新。
当更新程序运行时,在其运行期间,平均刷新时间会飙升至大约 35-40 秒,并且我们会遇到其他查询的普遍减速。更新程序是在单独的机器上运行的,并且仅在最后从第三方检索和处理所有数据时才查询 MongoDB。
有人建议放慢更新次数,或者只更新发生变化的玩家,但问题归结为排名。由于我们支持玩家之间的关系,我们需要预先计算排名 - 所以如果只有少数用户实际改变了排名,我们仍然需要相应地更新其余用户的排名。至少,MySQL 就是这种情况——我不确定 MongoDB 是否有一个很好的解决方案,可以在支持关系的同时对约 800K->120 万个文档进行排名。
我的问题是:我们如何才能改善我们正在经历的冲洗和减速?为什么它的峰值如此之高?禁用日志(以减轻 i/o 的负载)会有所帮助吗,因为数据丢失不是我担心的事情,因为数据库经常更新,无论如何?
服务器状态: http: //pastebin.com/w1ETfPWs