Mongodb的锁及原子性


  • 註冊用戶

    MongoDB 数据库级锁

     MongoDB的锁机制和一般关系数据库如 MySQL(InnoDB), Oracle 有很大的差异,InnoDB 和 Oracle 能提供行级粒度锁,而 MongoDB 只能提供 库级粒度锁,这意味着当 MongoDB 一个写锁处于占用状态时,其它的读写操作都得干等。
     初看起来库级锁在大并发环境下有严重的问题,但是 MongoDB 依然能够保持大并发量和高性能,这是因为 MongoDB 的锁粒度虽然很粗放,但是在锁处理机制和关系数据库锁有很大差异,主要表现在:

    • MongoDB 没有完整事务支持,操作原子性只到单个 document 级别,所以通常操作粒度比较小;
    • MongoDB 锁实际占用时间是内存数据计算和变更时间,通常很快;
    • MongoDB 锁有一种临时放弃机制,当出现需要等待慢速 IO 读写数据时,可以先临时放弃,等 IO 完成之后再重新获取锁。

    MongoDB 原子操作

       mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。
       但是mongodb对单个文档的操作提供了许多原子操作,比如文档的保存,修改(包括对单个文档修改多个字段),删除等,都是原子操作。
       所谓原子操作就是要么对这个文档操作全部成功,要么全部失败,不会出现查询到的文档没有保存完整的情况。

    这里写图片描述

    原子操作常用命令

    • $set
    • $unset
    • $inc
    • $push
    • $pushAl
    • $pull
    • $addToSet
    • $pop
    • $rename
    • $bit ……

登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待