Mongodb事务模拟
2016-04-29 04:36
387 查看
1、创建事务表,添加一条记录,如果成功,执行第2步,如果失败,则事务失败。
2、将该事务的ID标志加在要执行事务的一批数据上,并添加状态字段:待插入状态。然后执行批量写操作。如果成功,则执行第3步,如果失败,则执行第6步。
3、update mult 待插入状态 -> 成功状态。
如果成功,执行第4步。如果失败,执行第6步。
4、删除事务表当前批次事务数据。如果成功,执行第5步,如果失败执行第6步。
5、事务提交成功。
6、执行3次清道夫程序,如果成功则事务回滚成功,如果失败,则交由清道夫守护程序再定时执行。
注:写操作时无论是C U D,均为新增一条记录,并将version+1,取记录永远取version最新的数据。此处实现有一定逻辑,非本文重点,清道夫守护线程也非本文重点,均不再熬述。
2、将该事务的ID标志加在要执行事务的一批数据上,并添加状态字段:待插入状态。然后执行批量写操作。如果成功,则执行第3步,如果失败,则执行第6步。
3、update mult 待插入状态 -> 成功状态。
如果成功,执行第4步。如果失败,执行第6步。
4、删除事务表当前批次事务数据。如果成功,执行第5步,如果失败执行第6步。
5、事务提交成功。
6、执行3次清道夫程序,如果成功则事务回滚成功,如果失败,则交由清道夫守护程序再定时执行。
1)mult删除该事务批次状态为“待插入状态”的数据 2)删除事务表事务记录。
注:写操作时无论是C U D,均为新增一条记录,并将version+1,取记录永远取version最新的数据。此处实现有一定逻辑,非本文重点,清道夫守护线程也非本文重点,均不再熬述。
第1步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为init(如果这时候操作中断,那么在重新启动时,会判断到它处于init状态,从而将其保存的多行修改操作应用到具体的行上)。 第2步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的tran字段中。 第3步:将事务记录的状态从init变成pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是pending,这时查看其所有对应的多条要修改的记录,如果其tran值不为空,那么就进行第4步;如果值为空,说明第4步已经执行过了,直接将其状态从pending变成 commited就行)。 第4步:将需要修改的多条记录的相应值加以修改,并且unset掉之前的tran字段。 第5步:将事务记录那一条的状态从pending变成commited,事务至此完成。
相关文章推荐
- mongodb副本集的配置及node.js的使用
- MongoDB入门
- 提升 MongoDB 安全性的 10 个提示
- NoSQL Mongodb的快速入门
- mongodb csv 文件导入数据库,删除特定字段
- mongodb的用户管理及安全认证
- 使用MongoDB 记录业务日志
- MongoDB查询语法
- Node.js + MongoDB + AngularJS - 6 访问文件系统-1
- Python中MySQL数据迁移到MongoDB脚本的方法
- 一个慌里慌张的中午
- MongoDB数据仓储
- Python迁移MySQL数据到MongoDB脚本
- mongodb 3.x for java
- Python中MySQL数据迁移到MongoDB脚本的方法
- MongoEngine文档 新手教程 安装MongoEngine&连接MongoDB
- MongDB 分片和副本集
- MongoDB涉及的业务比较慢--慢查询优化分析案例--以及参数说明
- MongoDB学习(1)--Windows安装与运行
- Node.js + MongoDB + AngularJS - 5 在Node.js中处理数据I0-2