4

我研究了 MongoDB 中的并发性,显然它使用了数据库级锁定系统。我认为这意味着插入同一个数据库的多个线程的性能与插入数据库的单个线程相似或更差。

我发现当我有 4 个线程同时插入数据库时​​,性能几乎翻了一番(就插入/秒而言)。

性能变得更好有什么原因吗?我不明白为什么。

如果有帮助,我有一个线程不断地从服务器接收数据包并将其插入队列。我的 4 个线程不断从该队列中出列并插入数据库。

4

1 回答 1

3

当在 MongoDB 中发生写入时,实际的写入锁只保留了完成所需总时间的一小部分。

事实证明,写入 RAM 中的数据文件只需要几微秒(微秒,而不是毫微秒)。其余时间“其他”事情正在发生——这就是为什么如果你有不止一个或少数几个线程,你将获得最佳性能——在大多数情况下,限制因素将是网络带宽或磁盘 IO 之类的东西或 CPU(一旦你有足够的线程)而不是锁。

如果您有足够多的线程来写入mongod并且文档非常小,磁盘速度很快(用于将所有写入的数据刷新到磁盘)并且有足够的 RAM 来处理相关的索引更新,那么数据库锁可能成为您的限制因素写入吞吐量,但通常不会成为瓶颈的第一件事或第二件事。

我鼓励您使用 、 和其他系统监控资源等工具mongostatiostat查看实际瓶颈在哪里。如果您没有看到任何内容,则说明您的应用程序没有足够快地在数据库中投入工作以最大化其容量。

于 2013-06-12T15:33:02.607 回答