思路
- 拦截器uuid、被调用次数+局部回滚、记录sql操作日志 + 最终一台服务器统一执行sql日志。
- 从报文中获得 uuid和counted , 并确定uuid和counted的值
- 放入ThreadLocal中供全局取用
- 代理connection
- updateExecute操作操作并利用log4j-jdbc生成的日志+uuid+counted+数据源标识放入日志表中。
- commit操作局部回滚,同时提交日志表记录。并且判断当被调用次数为0(初始)时,异步的交给一个拥有所有数据库连接的服务器(DML消费端),做全部的DML(这里可以采用直连,jms,rpc。。。。都可以)。
- rollback操作局部回滚,同时回滚日志表记录。并且判断当被调用次数为0(初始)时,不做处理。
- DML消费端的实现: 一个uuid就是一个事务从jndi里面找到对应的数据源,执行batchUpdateExecute操作,且提交。
- 说明 : 理论上瓶颈应该是日志表的insert的操作 延时 和 DML消费端, 如果有需要的话可以做分库和分表操作,这就不是重点了。
代码
暂时还在公司的桌面虚拟机里,可以拿出来就会放到github上,如果不能那就以后有需求的时候再写吧。
网友评论