Mongodb 模仿事务

背景

数据库事务四要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
虽然Mongodb 4.0 已经支持事务,但是之前的版本并不支持;由于Mngodb的特性不允许多文档原子事务,为了有效避免该问题,就需要采取有效的方法替代。(mongodb 4.0的文档现在还在更新中,对4.0性能、灵活表示忧虑)

一、合并文档

将二段提交的多文档,合并为单一文档
但是局限性非常明显,文档不能过大,很多场景下显得笨重
在典型的转账问题上,只能是“二段提交“

二、日志校验

最笨的方法是对所有的日志进行统计校验
缺点:验证滞后性
优化方法:分段校验,添加版本记录,一段时间校验一次,减少重复校验,提高效率

三、二阶段提交

在Mongo 中 不可能单个 update 来完成操作,为了满足“事务“需求,一般来说最好的方法是在数据模型上模仿事务
二阶段提交可以分为:预提交阶段(准备阶段)提交阶段

Created with Raphaël 2.1.2 初始状态 初始状态 一阶段 一阶段 二阶段 二阶段 异常状态 异常状态 完成状态 完成状态 定期清理 定期清理 收到事务指定前的状态 接受新操作指令 事务操作成功 进入 new 准备操作异常 事务操作提交 进入 commit commit操作异常 任务超时 定期检测任务超时 操作失败,超时等异常 事务操作完成 回滚(1.准备操作异常,2.二阶段提交异常,3.任何超时)

猜你喜欢

转载自blog.csdn.net/wngzhem/article/details/80409431