背景
数据库事务四要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
虽然Mongodb 4.0 已经支持事务,但是之前的版本并不支持;由于Mngodb的特性不允许多文档原子事务,为了有效避免该问题,就需要采取有效的方法替代。(mongodb 4.0的文档现在还在更新中,对4.0性能、灵活表示忧虑)
一、合并文档
将二段提交的多文档,合并为单一文档
但是局限性非常明显,文档不能过大,很多场景下显得笨重
在典型的转账问题上,只能是“二段提交“
二、日志校验
最笨的方法是对所有的日志进行统计校验
缺点:验证滞后性
优化方法:分段校验,添加版本记录,一段时间校验一次,减少重复校验,提高效率
三、二阶段提交
在Mongo 中 不可能单个 update 来完成操作,为了满足“事务“需求,一般来说最好的方法是在数据模型上模仿事务
二阶段提交可以分为:预提交阶段(准备阶段)、提交阶段