mongo锁机制简介

mongo锁机制简介

背景

锁机制要解决的是并发请求下资源分配的问题,对于数据库来说,就是并发的读写。锁机制要处理两个问题,一个是最基本的,要保证写的原子性,否则会在并发情况下产生混乱。另一个是提高并发效率。

锁的类型

锁加在被请求的资源上,用于标明资源当前的状态。从能否被多个用户共享的角度来说,锁有两种类型:用于读的共享锁(S)和用于写的排它锁(X)。

每一个对资源的请求,都需要首先确保请求的资源上有相应的锁。比如对某个文档的读请求,要先给它加上用于读的S锁,被S锁住的资源不能再加上X锁,确保读的过程中资源不会被改写。同时这个S锁本身是共享的,它锁住的资源可以被其他并发的读请求获取。而写锁是排他的,同一个资源的写锁,只能被单个的请求持有。这种机制即保证了写的原子性(X锁排他),又保证了读的并发性(S锁共享)。

上面这种处理并发的方式,叫做悲观并发控制(pessimistic concurrency control),也叫悲观锁。每一个读写请求都要检查相应的锁,有了对应的锁才进行后续操作,严格的杜绝了数据的混乱。同时悲观锁的代价是要消耗CPU资源去做锁相关的操作,请求可能会互相阻塞,甚至发生死锁。比如两个写请求A和B同时请求a、b两个资源。如果A给a加上了锁,还没给b加上锁;B给b加上了锁,还没有给a加上锁,就会导致死锁。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB使用读写锁来允许多个用户同时读取一个资源,比如数据库或集合。读操作使用共享,写操作使用排它。这意味着在读操作时,多个用户可以同时读取相同的数据,而在写操作时,只允许一个用户写入数据,其他用户必须等待。 在长时间的读写操作,如查询、更新或删除,MongoDB同样会产生。例如,在多个文档满足某些条件的更新操作中,会产生。以下是一些可能会数据库的操作类型: - 查询读 - 从游标中读取更多数据 - 写入数据 - 删除数据 - 更新数据 - map-reduce操作 - 创建索引,默认情况下是在前台创建索引,会住整个数据库 - eval全局,除非使用nolock:true - aggregate操作读取数据 如果想要查看MongoDB实例中的情况,可以使用以下方式: 1. 使用`db.serverStatus`命令来查看服务器状态。 2. 使用`db.currentOp`命令来查看当前正在执行的操作。 3. 使用`mongotop`工具来监视MongoDB实例中的读写操作。 4. 使用`mongostat`工具来监视MongoDB实例中的各种统计信息。 5. 查看`locks`集合中的数据,该集合包含了关于的详细信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mongodb锁机制](https://blog.csdn.net/tang_jin2015/article/details/61192020)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值