Sta*_*low 19 performance mongodb nosql
我目前正在评估MongoDb的重写应用程序...
目前,MongoDb使用单线程进行写操作,并且在执行写操作时也使用全局锁...是否可以在多CPU服务器上利用多个CPU来获得更好的写入性能?全局写锁的解决方法是什么?
Gat*_* VP 17
所以现在,简单的解决方案是碎片.
是的,通常在服务器之间进行分片.但是,完全可以在一个盒子上进行碎片.您只需启动不同端口上的分片,并为它们提供不同的文件夹.这是一个盒子上2个分片的示例配置.
MongoDB团队认识到这有点低于标准,我通过与他们交谈知道他们正在寻找更好的方法来做到这一点.
显然,一旦你在一个盒子上获得多个分片并增加你的写入线程,你就必须警惕磁盘IO.根据我的经验,我已经能够通过一个写线程来使磁盘饱和.如果您的插入/更新相对简单,您可能会发现额外的写入线程不执行任何操作.(Map-Reduces是例外,分片肯定有帮助)
fit*_*low 17
不,仍建议使用分片来利用多个CPU核心.如FAQ中所述
分片通过在多个mongod实例上分发集合来提高并发性,允许分片服务器(即mongos进程)同时对各种下游mongod实例执行任意数量的操作.
每个mongod实例独立于分片群集中的其他实例,并使用MongoDB reader-writer锁定.一个mongod实例上的操作不会阻止任何其他操作.
正如一位用户在mongodb-user邮件列表中所述,单个框上的分片存在问题
经过一些重要的实验,我发现一个MongoDB分片守护进程不能使用多个CPU.在一个24 CPU的盒子上,性能可以扩展,直到我们达到大约8个分片,然后另一个限制开始.