Mongo 锁的理解

MongoDB 提供多粒度锁

Global (MongoD 实例) – 所有的数据库上加锁

Database – 锁定某个数据库

Collection – 锁定某个集合

Document – 锁定某个文档

MongoDB 提供了四种锁

  • 意向共享锁(IS)表示事务意图在表中的单个行上设置共享锁。
  • 意向排他锁(IX)表明事务意图在表中的单个行上设置独占锁。
  • S 共享锁
  • X 排它锁

意向锁有什么作用?

mongo的资源层级结构:Global ->DB -> Collection -> Doc

意向锁加在高层级的,当需要对Doc1加X锁,需要对DB和Collection加IX,IX,此时如果对Doc2加X锁,就需要获取DB和Collection的IX锁,IX是可以被多个事务获取的,再获取Doc2的X锁,这样就实现了并发修改,此时如果foreground创建索引(库级别的写锁),那个DB的IX锁如果没有释放完,是无法无获取DB的X锁的。

意向锁为了高层级资源的隔离。

Mongo锁直接的隔离关系

  IS   IX  S  X
 IS   yes  yes yes  no
 IX  yes  yes  no no
 S  yes  no  yes no
 X   no  no  no  no

原文地址:https://www.cnblogs.com/peterleee/p/13438793.html