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