我调查了并发性 http://docs.mongodb.org/manual/faq/concurrency/#how-granular-are-locks-in-mongodb在 MongoDB 中,显然它使用了数据库级锁定系统。我认为这意味着插入同一数据库的多个线程的性能与插入数据库的单个线程的性能相似或更差。
我发现当我有 4 个线程同时插入数据库时,性能几乎翻倍(就插入/秒而言)。
性能变得更好有什么原因吗?我不明白为什么。
如果有帮助的话,我有一个线程不断从服务器接收数据包并将其插入队列中。我的 4 个线程不断地从该队列中出列并插入到数据库中。
当 MongoDB 中发生写入时,实际写入锁仅保留完成所需总时间的一小部分。
事实证明,写入 RAM 中的数据文件只需要微秒(微,而不是毫)。其余时间会发生“其他”事情 - 这就是为什么如果您有多个线程或少数线程,您将获得最佳性能 - 在大多数情况下,限制因素将是网络带宽或磁盘 IO 之类的东西或CPU(一旦你有足够的线程)而不是锁。
如果您有足够的线程进行写入mongod
并且文档非常小,磁盘速度很快(用于将所有写入的数据刷新到磁盘)并且有足够的 RAM 来处理相关索引更新然后数据库锁定can成为写入吞吐量的限制因素,但通常不是成为瓶颈的第一或第二件事。
我鼓励您使用类似的工具mongostat
, iostat
以及其他系统监控资源,以了解实际瓶颈在哪里。如果您没有看到任何内容,那么您的应用程序没有足够快地向数据库投入工作以最大化其容量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)