数据同步方案求教
在开发一大型应用系统,系统为省、市、县三级架构,各级单位单独部署一套系统,通过网络互联和系统通讯功能实现系统间互联互访,形成一个三级架构的分布式资源平台。
现有某一资源(数据)准备统一放在省级管理,然后各下级分别往自己上级同步各自相关的资源,形如:省级<--市级<--县级, 考虑数据量大,可能同步需要分批同步,中间考虑用个表记录。
以上问题目前鄙人在考虑webservic,MQ,可总觉得不是很好,可能是我对这两技术掌握的不是很好,也可能真有比这两个更好的方案,请高人请指点一下有没有别的可行方案,或就我说的两个技术指点下具体可行方案,感谢不尽!
本人结帐率100%,尽可放心,当然高手也是不在乎这个,哈哈。
------解决方案--------------------数据库需要实时同步吗?非实时的话可以考虑夜间做批处理
实时的话(不知道数据量多大),MQ,JMS等都可以,也可以考虑用个中间服务器做数据缓存
------解决方案--------------------既然都是你们自己做的系统,直接做数据库联接不行吗?
------解决方案--------------------
------解决方案--------------------使用webservice+数据文件
调用webservice后将数据导出为数据文件。
另一方通过webservice返回的文件名进行导入。
------解决方案--------------------
------解决方案--------------------
从项目实施经验而言,并不建议直接纯粹依靠应用来做这种数据同步,因为很容易就会陷入分布式事务控制问题。
建议:
1、用数据复制工具,如GoldenGate、Datastage、SharePlex等;
2、数据库之间建立DBLink,对所需同步的表建同义词,这样程序就不必操心跨库访问的问题,跨库操作下推给数据库来负责了;
3、如果你确实因为某些愿意必须用纯应用手段做数据复制,那么对于增量复制的控制要做好处理,也就是确认清楚每次成功复制到什么位置了。
模型一般是:
复制源,部署Client端;复制目标,部署Server端;
Client负责将数据打包,比如50~100条,然后通过EJB或其它服务接口调用Server端,将打包的数据传送给Server端;
然后Server端对打包数据进行校验,然后拆包批量写入(检查重复),完成后返回成功提示给Client端;
Client端更新复制进度(下次复制就不会重复复制已经复制的内容了)。
如果想将上述模型修改为基于消息的,比如JMS或MQ,道理也差不多。主要难度是处理增量问题。比如记录复制时间戳、流水号、复制标志位等。