Mongo DB 中的写锁

Pha*_*jee 6 mongodb

我读过某个MongoDB持有数据库级写锁的地方,这是否意味着当有人更新任何collection其他人时不允许读取其他人collection或它是如何工作的。此外,当有人向数据库写入任何内容时,如何MongoDB获取写锁以及它的粒度是多少?

zag*_*san 6

您的解释与“MongoDB 中的锁的粒度有多细?”相符。参与MongoDB 常见问题解答

MongoDB 中的锁有多细粒度?

从 version 2.2 开始,MongoDB 为大多数读取和写入操作在每个数据库的基础上实现锁。一些全局操作,通常是涉及多个数据库的短期操作,仍然需要全局“实例”范围的锁。在 2.2 之前,每个 mongod 实例只有一个“全局”锁。

例如,如果您有六个数据库,其中一个使用写锁,则其他五个仍可用于读取和写入。

至于锁定的工作方式:

MongoDB 使用什么类型的锁定?

MongoDB 使用读写器 [ed: 也称为“多读者”或“共享排他”]锁,允许并发读取访问数据库,但提供对单个写操作的独占访问。

当存在读锁时,许多读操作可能会使用此锁。但是,当存在写锁时,单个写操作独占该锁,其他读或写操作都不能共享该锁。

锁是“写者贪婪的”,这意味着写优先于读。当读取和写入都在等待锁定时,MongoDB 将锁定授予写入。