
最近开始用 mongodb ,发现也有事务的概念了。
不过有些业务代码有在多线程下访问 MySQL 的场景时,更新数据会用 select ... for update 锁行,比如常见的锁个订单,然后调用外部接口后修改状态,失败的时候回滚数据,此时其他的线程访问都是阻塞住的。
用 MongoDB 的话,是否原生指令就可以实现同样的效果(好像没搜到)?是必须得额外搞个分布式锁来?
1 roundgis 2023-07-23 20:59:06 +08:00 via Android find_and_modify 之 |
2 rrfeng 2023-07-23 21:06:20 +08:00 via Android MongoDB 支持事务你这个问题不是问题? |
3 Haujilo OP @rrfeng 但是文档里写的,好像是保障两个 document 修改要么发生,要么不发生。好像没有显示加锁的过程和阻塞的过程?比如我在一个事务 commit 里 sleep 十分钟,另一个事务发起似乎是会执行完的? |
5 homolabby 2023-07-23 21:59:20 +08:00 via Android 我记得 mongoDB 隔离级别是可重复读,select for update 会查看到 readview 之外的东西,相当于隔离级别回到了读已提交级别。 |
6 LandCruiser mongodb 最新版本才刚加入了锁的概念,以前没有锁的概念,这个你得去看文档了,会的人不多 |
7 yu8403723 2023-07-24 16:02:18 +08:00 次元大陆吗 |
8 dumbbell5kg 2023-07-24 18:32:59 +08:00 mongo 事务用的是乐观锁,不会阻塞线程,想阻塞可以额外加分布式 |
9 dumbbell5kg 2023-07-24 18:33:20 +08:00 锁 |