我是MongoDB数据库的新手,我的一个应用程序计划将其中的一部分迁移到MongoDB。我们需要处理乐观并发的地方。 MongoDB提供了哪些最佳实践。
MongoDB是否适合需要并发的应用程序?
答案 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/