MongoDB事务最大限制大小

记录一次MongoDB的事务处理

事件原因

MongoDB在4.0开始引进事务,因业务的某个场景需要用到MongoDB的事务操作,但在某次线上的某一条数据在修改时一直报`org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 112 (WriteConflict): ‘WriteConflict’

WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.,`

是否发生了写冲突?

因为MongoDB采用的是悲观事务,会校验是否发生冲突,原来以为可能是同时操作了同一文档,spring-data-mongodb是没有任何重试操作的,直接把异常抛出来,所以引入了retry操作,但是发现没用,经排查,在操作固定文档的时候必会出现此异常,且不可能出现写冲突,故排除写锁导致的异常。

确定是事务异常?

后来尝试把事务操作去除,该异常便不会出现在异常发生的环境,后来在测试环境尝试测试此问题,发现竟然一直没有重现!!!

对比两侧环境差异

通过对事务两侧配置的比较,发现没有任何区别,最后想了一下,会不会两侧的MongoDB版本不一致导致的,最后发现果然是!!!发生异常环境为4.4版本,测试环境为4.2,然后就去找两个版本的MongoDB事务相关的差异了,最后发现是oplog的产生策略发生了差异,4.2时事务里每个写操作都会产生一个oplog,而4.4中一个事务操作会产生一个oplog,而oplog的限制就是一个document的最大显示大小16M!!!

为啥我一个事务操作的大小超过了16M?

上面招到了其实是因为一个事务操作产生的oplog大小超过了限制值,但是为啥我的一个事务操作会这么大???后来派擦汗数据发现,一部分老数据图片竟然用的base64???OMG,集中把base64老数据换成URL,问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MongoDB事务是指在MongoDB数据库中执行多个操作的一组操作,要么都成功,要么都失败。在MongoDB 4.0及更高版本中,引入了多文档事务的支持。多文档事务允许对已存在的集合或数据库执行读写操作,但不允许在事务中创建、删除集合或进行索引操作。 要使用事务,你需要部署MongoDB 4.2或更高版本,并更新MongoDB的驱动程序为4.2或更高版本。确保驱动程序的兼容性是非常重要的。 MongoDB事务实现采用了两阶段提交(Two-Phase Commit)的方法。在事务提交之前,MongoDB会先执行预提交阶段,将所有的写操作保存到事务日志(oplog)中。然后,在第二阶段,MongoDB会对所有的写操作进行确认提交,如果有任何一个操作失败,整个事务都会回滚。 使用MongoDB事务可以确保数据的一致性和可靠性,实现ACID的特性,即原子性、一致性、隔离性和持久性。这意味着事务中的操作要么全部成功,要么全部失败,保证了数据的完整性和可靠性。 总结来说,MongoDB事务是一组操作的集合,要么全部成功,要么全部失败。它的实现采用了两阶段提交的方法,确保数据的一致性和可靠性,实现ACID的特性。使用事务需要在MongoDB 4.2及以上版本,并更新驱动程序的版本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MongoDB事务](https://blog.csdn.net/ntzzzsj/article/details/125527368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [MongoDB数据库两阶段提交实现事务的方法详解](https://download.csdn.net/download/weixin_38663544/12825081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值