MongoDb - 利用多 CPU 服务器进行写入密集型应用程序

问题描述 投票:0回答:2

我目前正在评估 MongoDb 对于我们的写入量大的应用程序...

目前MongoDb使用单线程进行写入操作,并且在写入时也使用全局锁...是否可以在多CPU服务器上利用多个CPU来获得更好的写入性能?全局写锁的解决方法是什么?

mongodb performance nosql
2个回答
19
投票

不,仍然建议使用分片来利用多个CPU核心。 正如常见问题解答

中所述

分片通过将集合分布在多个 mongod 实例上来提高并发性,允许分片服务器(即 mongos 进程)对各种下游 mongod 实例同时执行任意数量的操作。

每个 mongod 实例都独立于分片集群中的其他实例,并使用 MongoDB 读写锁)。一个 mongod 实例上的操作不会阻止任何其他实例上的操作。

单个盒子上的分片有其问题,正如一位用户在

mongodb-user 邮件列表中所述

经过一些重要的实验,我发现单个 MongoDB 分片守护进程不能使用多个 CPU。在 24 个 CPU 的机器上,性能会不断提升,直到达到大约 8 个分片,然后就会出现另一个限制。


18
投票
所以现在,简单的解决方案就是分片。

是的,通常分片是跨服务器完成的。然而,在单个盒子上进行分片是完全可能的。您只需在不同端口上启动分片并为它们提供不同的文件夹即可。

这是一个盒子上 2 个分片的示例配置

MongoDB 团队认识到这是一种低于标准的做法,从与他们的交谈中我知道他们正在寻找更好的方法来做到这一点。

显然,一旦您在一台机器上获得多个分片并增加写入线程,您将不得不警惕磁盘 IO。根据我的经验,我已经能够用单个写入线程使磁盘饱和。如果您的插入/更新相对简单,您可能会发现额外的写入线程不会执行任何操作。 (Map-Reduce 是这里的例外,分片绝对有帮助)

© www.soinside.com 2019 - 2024. All rights reserved.