java 数据同步要怎么实现才好?
两个相同的web应用,数据库中的表是相同的。
一个应用布署在上海,一个在北京。
现在希望对上海一张表的操作(通过后台程序)
如
user 表
北京的user表也可以进行同步。
目前的思路是通过把操作的执行语句给记录下来。
如delete from user where username=xxx
然后发到另一台应用中执行。
注:思考不能通过id,因为id是序列生成的
如果有以下情况:
一:上海新增一个用户(test1 id为1)。执行语句没有发到北京(网络原因,我会把它记下)
二:北京过了一会,也新增了一个的用户(test2 id为1)(这样两边test1与test2的id相同)
三:上海过了一会,把我记下来的未发过去的语句发过去。
四: 北京也新增了一个test1用户,id 为2
那以后的删除修改,如果都是通过id会有问题,所以修改程序把根据username进行修改与删除。
==========================================================
以上是我的思路。
可是这样子有点问题。
1.修改user的时候,也可以修改用户名。(有点怪,等于我自己把主键修改了)
2.实际程序中,user 表跟三张表 多对多 关连,就是有三张中间表。
我如果在原程序中修改的话就要对这三张表关连的中间表的增,删,改进行修改了
3.这三张表的 删,改也要进行修改,不通过 id
以上的改动量大,涉及的地方也多。
想请问一下有没有更好的思路来实现这种同步的功能????????????
------解决方案--------------------分布式事务,数据库通过2PC协议实现的,java则是JTA。
------解决方案--------------------为什么不试试数据库自已的同步方案呢?
oracle/mysql 有GoldenGate