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 (意向共享) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了