日期:2014-05-19  浏览次数:20636 次

数据同步方案求教
在开发一大型应用系统,系统为省、市、县三级架构,各级单位单独部署一套系统,通过网络互联和系统通讯功能实现系统间互联互访,形成一个三级架构的分布式资源平台。
  现有某一资源(数据)准备统一放在省级管理,然后各下级分别往自己上级同步各自相关的资源,形如:省级<--市级<--县级, 考虑数据量大,可能同步需要分批同步,中间考虑用个表记录。
  以上问题目前鄙人在考虑webservic,MQ,可总觉得不是很好,可能是我对这两技术掌握的不是很好,也可能真有比这两个更好的方案,请高人请指点一下有没有别的可行方案,或就我说的两个技术指点下具体可行方案,感谢不尽!
  本人结帐率100%,尽可放心,当然高手也是不在乎这个,哈哈。

------解决方案--------------------
数据库需要实时同步吗?非实时的话可以考虑夜间做批处理
实时的话(不知道数据量多大),MQ,JMS等都可以,也可以考虑用个中间服务器做数据缓存
------解决方案--------------------
既然都是你们自己做的系统,直接做数据库联接不行吗?
------解决方案--------------------
探讨

引用:
数据库需要实时同步吗?非实时的话可以考虑夜间做批处理
实时的话(不知道数据量多大),MQ,JMS等都可以,也可以考虑用个中间服务器做数据缓存


其实数据说大也不大,几十万的数据,分到下级各部的话,也就几万的数据吧。
目前中间服务器就没得考虑了,做不起来,资源有限。
MQ,JMS 和 单用webservice,那个更好?

------解决方案--------------------
使用webservice+数据文件

调用webservice后将数据导出为数据文件。
另一方通过webservice返回的文件名进行导入。
------解决方案--------------------
探讨
引用:
什么资源? 数据库文件? 还是什么?

数据库文件的话 可以做个下载 下载到本地之后执行个命令导入数据库

几万的数据 下载的话没什么问题

不是文件,就是上级数据库中的数据

------解决方案--------------------
从项目实施经验而言,并不建议直接纯粹依靠应用来做这种数据同步,因为很容易就会陷入分布式事务控制问题。

建议:
1、用数据复制工具,如GoldenGate、Datastage、SharePlex等;
2、数据库之间建立DBLink,对所需同步的表建同义词,这样程序就不必操心跨库访问的问题,跨库操作下推给数据库来负责了;
3、如果你确实因为某些愿意必须用纯应用手段做数据复制,那么对于增量复制的控制要做好处理,也就是确认清楚每次成功复制到什么位置了。

模型一般是:
复制源,部署Client端;复制目标,部署Server端;
Client负责将数据打包,比如50~100条,然后通过EJB或其它服务接口调用Server端,将打包的数据传送给Server端;
然后Server端对打包数据进行校验,然后拆包批量写入(检查重复),完成后返回成功提示给Client端;
Client端更新复制进度(下次复制就不会重复复制已经复制的内容了)。

如果想将上述模型修改为基于消息的,比如JMS或MQ,道理也差不多。主要难度是处理增量问题。比如记录复制时间戳、流水号、复制标志位等。