【问题标题】:How to manage concurrency in MongoDB?如何在 MongoDB 中管理并发?
【发布时间】:2016-11-21 08:29:15
【问题描述】:

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

对于需要并发的应用来说,MongoDB 是正确的选择吗?

【问题讨论】:

    标签: mongodb concurrency


    【解决方案1】:

    是的,MongoDB 将是并发的正确选择。

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

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

    MongoDB 使用读写锁,允许并发读者共享访问资源,例如数据库或集合,但在 MMAPv1 中,对单个写入操作提供独占访问权限。

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

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

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

    “writer-greedy”,优先写,所以当我们得到一个写请求时,所有的读请求都被阻塞,直到写完成。

    这里的锁被称为闩锁,因为它比锁更轻,并且可以在几微秒内完成工作。

    MongoDB 能够同时运行尽可能多的查询。

    希望对你有帮助!!

    参考文献

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

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

    【讨论】:

    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多