V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
? RoboMongo
推荐书目
? 50 Tips and Tricks for MongoDB Developers
Related Blogs
? Snail in a Turtleneck
Haujilo
V2EX  ?  MongoDB

刚用 mongodb,请教下类似 MySQL 的「select ... for update」大伙都是如何替代?

  •  
  •   Haujilo · 287 天前 · 1949 次点击
    这是一个创建于 287 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    最近开始用 mongodb ,发现也有事务的概念了。

    不过有些业务代码有在多线程下访问 MySQL 的场景时,更新数据会用 select ... for update 锁行,比如常见的锁个订单,然后调用外部接口后修改状态,失败的时候回滚数据,此时其他的线程访问都是阻塞住的。

    用 MongoDB 的话,是否原生指令就可以实现同样的效果(好像没搜到)?是必须得额外搞个分布式锁来?

    9 条回复  ?  2023-07-24 18:33:20 +08:00
    roundgis
        1
    roundgis  
       287 天前 via Android
    find_and_modify 之類
    rrfeng
        2
    rrfeng  
       287 天前 via Android
    MongoDB 支持事务你这个问题不是问题?
    Haujilo
        3
    Haujilo  
    OP
       287 天前 via Android
    @rrfeng 但是文档里写的,好像是保障两个 document 修改要么发生,要么不发生。好像没有显示加锁的过程和阻塞的过程?比如我在一个事务 commit 里 sleep 十分钟,另一个事务发起似乎是会执行完的?
    Haujilo
        4
    Haujilo  
    OP
       287 天前 via Android
    @roundgis 但是这个似乎没有阻塞的效果?
    homolabby
        5
    homolabby  
       287 天前 via Android
    我记得 mongoDB 隔离级别是可重复读,select for update 会查看到 readview 之外的东西,相当于隔离级别回到了读已提交级别。
    LandCruiser
        6
    LandCruiser  
       287 天前
    mongodb 最新版本才刚加入了锁的概念,以前没有锁的概念,这个你得去看文档了,会的人不多
    yu8403723
        7
    yu8403723  
       287 天前
    次元大陆吗
    dumbbell5kg
        8
    dumbbell5kg  
       286 天前
    mongo 事务用的是乐观锁,不会阻塞线程,想阻塞可以额外加分布式
    dumbbell5kg
        9
    dumbbell5kg  
       286 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5462 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:20 · PVG 17:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com