如何在MongoDB中管理并发?

时间:2016-07-18 16:23:29

标签: mongodb concurrency

我是MongoDB数据库的新手,我的一个应用程序计划将其中的一部分迁移到MongoDB。我们需要处理乐观并发的地方。 MongoDB提供了哪些最佳实践。

MongoDB是否适合需要并发的应用程序?

1 个答案:

答案 0 :(得分:9)

是MongoDB是并发的正确选择。

MongoDB锁定与RDBMS中的锁定不同。

MongoDB使用多粒度锁定(请参阅有线老虎),允许操作锁定全局,数据库或集合级别,并允许各个存储引擎在集合级别下实现自己的并发控制(例如,在文档中) WiredTiger中的级别。)

MongoDB使用读写器锁,允许并发读者共享访问资源(如数据库或集合),但在MMAPv1中,可以独占访问单个写操作。

WiredTiger 使用乐观并发控制。 WiredTiger仅在全局,数据库和集合级别使用意图锁。当存储引擎检测到两个操作之间发生冲突时,会发生写入冲突,导致MongoDB透明地重试该操作。

MongoDB为每个数据库都有一个读/写锁存器。

闩锁是多读者,单一作家,它是作家贪婪的,所以我们可以在数据库中拥有无限数量的同时读者, 但是任何一个数据库中的任何集合一次只能有一个作者。

" writer-greedy",优先写入,所以当我们收到写请求时,所有的读请求都会被阻塞,直到写完成。

这里的锁被称为锁存器,因为它比锁更轻,并且它在几微秒内执行作业。

MongoDB能够同时运行多个查询。

希望它能帮助!!

参考

https://docs.mongodb.com/manual/faq/concurrency/

https://docs.mongodb.com/manual/reference/command/findAndModify/