mongo并发与锁
MongoDB 使用哪种类型的锁定?
除了用于读取的共享 (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(意向共享) | 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号