对于 WiredTiger
从版本 3.0 开始, MongoDB 附带了 WiredTiger 存储引擎。
对于大多数读写操作, WiredTiger 使用乐观并发控制。 WiredTiger 仅在全局,数据库和集合级别使用意图锁。 当存储引擎检测到两个操作之间的冲突时,会发生写入冲突,导致 MongoDB 透明地重试该操作。
一些全局操作(通常是涉及多个数据库的短期操作)仍然需要全局“实例范围”锁定。其他一些操作(例如删除集合)仍需要独占数据库锁。
对于 MMAPv1
MMAPv1 存储引擎在 3.0 版本系列中使用了集合级锁定,这是对早期版本的改进,其中数据库锁是最精细的锁。第三方存储引擎可以使用集合级锁定或实现自己的更细粒度的并发控制。
例如,如果使用 MMAPv1 存储引擎在数据库中有六个集合,并且一个操作采用集合级写锁定,则其他五个集合仍可用于读取和写入操作。独占数据库锁使得所有六个集合在持有锁的操作期间不可用。
收起