关于拆分子系统

aCpr_d 2016-10-27 02:30:39
现在我们系统整个数据库用的mongodb,基本的事物也没有!现在系统小,业务简单,考虑到有些模块(比如书订单之类的)需要事物支持,想拆分系统,想请教下怎么拆分对现有的改动不大。
...全文
236 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
attilax 2016-10-28
  • 打赏
  • 举报
回复
Atitit 数据库事务实现原理 1.1.自己在程序中实现事务操作。 如果只是需要事务的话,你自己给mongo操作加上事务功能就可以啦。。数据库事务只不过是他自己实现了而已。。如果数据库不支持事务,就要你在代码里面实现事务就可以了。。 最简单方便的就是使用日志方式来做事务就可以了。。 比如插入俩个数据。每执行一个sql,就生成一个undo日志即可。。 Undo日志表如下字段(事务id,表格名称,操作【insert,update,delete】,原记录id,新记录id) 如果后面的sql失败了。那么根据undo日志,撤销掉前面执行的sql数据即可。 主要流程如下。根据事务id,得到前几个sql语句新增的记录id,然后删除这几个id的数据即可。。 如果提交成功,那么可以删除掉此事务id对应的undo日志即可。。 1.2.事务有两种方式达到这样的目的: Shadow copies/pages(影像拷贝/影像页面): 每ransaction log (事务日志) Shadow copies/pages(影像拷贝/影像页面): 每个事务拷贝一份自己的数据库(或者是数据库的一部分),在这份拷贝上操作。出错了,就删除这份拷贝。成功后,使用文件系统的功能 做一下文件交换,替换掉旧的数据。 Transaction log (事务日志):Transaction log是这样一块存储区域–在事务将数据写到磁盘之前先将信息写到Transaction log文件。这样,如果服务发生崩溃、事务被取消;数据库清楚如果根据日志删除数据,或者继续完成未完成的操作。 1.3.innodb通过undo log和redo log来实现。 事务中,每当执行一条SQL语句对数据产生了影响,就会记录下来与之相反的操作到undo log(撤销日志)中,例如,更新会记录之前的状态,删除会形成insert,添加会形成delete,一旦事务被回滚,则执行undo log中记录的操作,来完成恢复到之前的状态。这里是个 逻辑恢复哦! 同时,每当执行一条事务中的SQL,会将操作记录到redo log中,此时事务一旦被提交,就将该redolog中的操作,持久化到磁盘上,数据就持久的记录下来了(ACID的D)。 PS:还有,undolog才是原子性的关键 2.隔离级别的概念 关系型数据库工作原理-事务管理(二) - 数据库其他综合 - 红黑联盟.html 作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )  汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com 转载请注明来源: http://blog.csdn.net/attilax Atiend
方丈的寺院 2016-10-27
  • 打赏
  • 举报
回复
mongo本身不支持事务,可以通过嵌套文档来实现原子操作。但是你提到有订单这种业务,涉及到支付,需要强事务来保证。可以考虑把订单部分存入到关系型数据库
bcsflilong 2016-10-27
  • 打赏
  • 举报
回复
你加入spring 用spring XML形式批量管理事务。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧