MongoDB 4.0 多文档事务相关

作者: CoderMiner | 来源:发表于2018-07-10 15:57 被阅读0次

    在MongoDB4.0版本之前只支持单文档事务操作,在4.0版本之后开始支持多文档事务操作

    image

    事务和副本集

    在MongoDB中多文档事务操作只支持副本集的操作,关于在分片上的事务操作会在4.2版本中引入

    存储引擎

    在MongoDB中只有 WiredTiger 存储引擎才支持多文档事务操作,在 in-memoryMMAPv1存储引擎
    中不支持多文档事务操作

    事务和操作

    • 事务支持在已经存在的collections中进行 CURD 操作,collections可以在不同的数据库中
    • configadmin collections和local数据库中不支持读写事务
    • system.* collections中也不支持事务
    • 事务支持计划查询 如 explain
    • 在事务之外创建的 cursors ,在事务中不能进行 getMore 操作
    • 在事务中创建的 cursors,在事务外也不能进行 getMore 操作

    支持多文档事务的操作

    方法 命令 备注
    db.collection.aggregate() aggregate 不包含:
    collStats](https://docs.mongodb.com/manual/reference/operator/aggregation/collStats/#pipe._S_collStats)
    [
    currentOp

    indexStats](https://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/#pipe._S_indexStats) [listLocalSessions
    listSessions](https://docs.mongodb.com/manual/reference/operator/aggregation/listSessions/#pipe._S_listSessions)
    [
    out
    db.collection.distinct() distinct
    db.collection.find() find
    geoSearch
    db.collection.deleteMany()
    db.collection.deleteOne()
    db.collection.remove()
    delete
    db.collection.findOneAndDelete()
    db.collection.findOneAndReplace()
    db.collection.findOneAndUpdate()
    findAndModify 对于upsert,只对已经存在的 collection有效
    db.collection.insertMany()
    db.collection.insertOne()
    db.collection.insert()
    insert 对 已经存在的collection有效
    db.collection.save() 如果是 insert 操作,只有 collection 存在时才有效
    db.collection.updateOne()
    db.collection.updateMany()
    db.collection.replaceOne()
    db.collection.update()
    update upsert, 只对已经存在的 collection有效
    db.collection.bulkWrite() 对于upsert,只对已经存在的 collection有效
    如果是 insert 操作,只有 collection 存在时才有效

    Count操作

    为了在事务中使用count操作,请在 aggregation stage中使用 count](https://docs.mongodb.com/manual/reference/operator/aggregation/count/#pipe._S_count)或者在 `aggregation stage`中使用 [group使用 $sum操作

    信息的操作

    查询信息相关的操作 isMaster, buildInfo,connectionStatus和其他相关的辅助方法,都可以在事务中操作,但是这些方法不能作为事务中的第一个操作

    限制的操作

    下面的操作不能再多文档事务中操作

    事务和 mongo Shell

    mongo Shell中的相关的事务方法

    原子性

    MongoDB中的多文档事务也是原子性的

    事务和锁

    默认情况下,事务等待5毫秒以获取事务中操作所需的锁。如果事务不能在5毫秒内获取其所需的锁,则事务中止。
    可以使用 maxTransactionLockRequestTimeoutMillis
    调整这个时间

    相关文章

      网友评论

      • 42ab2d42527d:Hello~我是腾讯云+社区的运营小编,阅读下来觉得您的内容质量很不错,非常符合我们的《自媒体分享计划》入选要求,所以想咨询一下是否可以将您的文章同步至腾讯云+社区呢? 我们会提供为您基于腾讯云的云服务器、域名等云服务,内容可以在云+社区享受百万流量级的推广,优质文章还有机会在腾讯系内容矩阵进行推广,另外还有技术作者交流机会、腾讯云周边礼物等支持。《自媒体分享计划》的链接是:https://cloud.tencent.com/developer/support-plan 打开地址进行简单申请即可,成功入驻后,社区会与您的源平台自动进行内容同步,不需要您手动搬运哦~。 如果有什么疑问的话可以加我微信详聊哦~我的微信号是:13189608841。
        42ab2d42527d:@CoderMiner 麻烦博主提交下入驻申请,给我们同步授权哦~~:smiley:
        CoderMiner:@腾讯云_运营 OK,可以

      本文标题:MongoDB 4.0 多文档事务相关

      本文链接:https://www.haomeiwen.com/subject/qcxqpftx.html