mongo并发与锁

除了用于读取的共享 (S) 锁定模式和用于写入操作的独占 (X) 锁定模式之外,意图共享 (IS) 和意图独占 (IX) 模式表示使用更细粒度的锁来读取或写入资源的意图。按一定粒度锁定时,所有更高级别都使用意向锁

例如,当锁定一个集合进行写入(使用模式 X)时,相应的数据库锁和全局锁都必须以意向独占 (IX) 模式锁定。单个数据库可以同时以 IS 和 IX 模式锁定,但独占 (X) 锁不能与任何其他模式共存,共享 (S) 锁只能与意向共享 (IS) 锁共存。

锁是公平的,读取和写入的锁请求都会按顺序排队。然而,为了优化吞吐量,批准一个锁请求时,也会同时批准所有其他兼容的锁请求,这可能会导致在执行冲突的锁请求之前释放锁。例如,当一个 X 锁刚被释放并且冲突队列包含这些锁:

IS → IS → X → X → S → IS

 

 

下表列出一些操作及其为文档级锁定存储引擎使用的锁类型:

 
 
操作
Database
Collection
发出查询
r (意向共享)
r (意向共享)
Insert data
w (意向独占)
w (意向独占)
删除数据
w (意向独占)
w (意向独占)
Update data
w (意向独占)
w (意向独占)
执行聚合
r (意向共享)
r (意向共享)
创建索引(前景)
W (独占)
 
创建索引(背景)
w (意向独占)
w (意向独占)
listCollections
r (意向共享)
 
map-reduce
W (独占)和 R(共享)
w (意向独占)和 r(意向共享)

 

posted @ 2024-07-18 14:07  wongchaofan  阅读(2)  评论(0编辑  收藏  举报