这个问题我在多个项目中碰到过,试用过同步复制、数据中间件和纯编程
体会如下:
SQL Server 的同步复制在网络情况很好的情况下才能考虑,否则可靠性和效率都成问题。[:)]
如果是拨号连接,建议自己写程序来完成,这样可以在可靠性,灵活性和效率等各方面都
照顾的很好。
数据同步编程参考思路:
考虑的重点是:同步所需的数据量尽量小。数据传输足够可靠
一、提取变动数据
1、每一次同步后,将要同步的表中的所有数据做数据切片:实现的方法很多啊,比如可以计算出每一条
记录效验码,单独存储成另一个表。关键是能比较出变动的数据。
2、要进行数据同步时,比较数据主表和数据切片表,找出删除的记录,将其记录标示存为
’删除数据表‘;找出新增记录,生成‘新增数据表’;重新计算效验码,找出效验码变
了的记录(这些为修改过的记录),生成‘变动数据表’
3、将这些数据打包传输,可以根据网络情况选用比较可靠的传输协议
4、解包,根据上述3表更新主数据库。
5、客户端重新进行数据切片,以备下一次数据同步。上述方法要注意:
1、提取变动数据以后到数据重新切片之间,必须把数据库独占锁定,否则
2、这个模式比较适合数据单向同步,即客户端同步到中心端。双向同步比较复杂...
其实,条件允许,而且数据结构不是很复杂的话,也可以试着用一些成熟可靠的数据(传输)中间件
比如IBM的MQ,银行据说都用它,应该很可靠吧,我自己没有用它进行过足够多的测试,只是稍微接
触了一下,希望有熟悉它的富翁介绍经验。

解决方案 »

  1.   

    1、就数据传输来说,Internet 和 远程拨号没有什么区别,如果考虑数据安全性的话,拨号好一点
    但Modem的点对点连接只有33.6kps,慢了点。用Internet也可以,那安全性方面得考虑好了
    2、我说的数据中间件不是指DCOM、MIDAS(三层控件)、WINSOCK这些,而是指由软件商开发
    的,比较完善和可靠的数据中间件(完成数据抽取、数据同步)。比较有名的是 IBM 的 MQ
    以前还用过一个国产的,好像叫TongLink吧,也还不错。
    只所以不用DCOM、MIDAS(三层控件)、WINSOCK,是居于以下考虑:
    就数据传输来说,数据的粒度越大越好,这样在传输事务控制、
    传输可靠性才好把握,DCOM、MIDAS(三层控件)、WINSOCK的数据传输的数据粒度是记录级,这样
    每次数据传送的粒度不好把握,比如每次更新100条记录吧,你得等到服务端确认接受到这些数据
    而且数据效验正确以后,才能传输下一批数据。如果在等待服务端确认的时候断线了,那就....[:(]
    所以用DCOM、MIDAS(三层控件)、WINSOCK也可以做,但是很麻烦。还不如使用一些比较常见的
    网络协议,自己编程来传输数据变动库。
    我第一个数据同步模块使用的就是FTP方式来传输的,看上去比较土,可是比较可靠,还能实现断点
    续传功能(FTP自己就支持),再多写点程序,就能实现断线自动重拨,断点续传。再加上数据传输
    计划管理,就能实现无人值守的数据同步。希望以上这些能对你有点帮助[:)]还有,如果想用DCOM、MIDAS、WINSOCK这些来作的话,建议用WINSOCK,听说DCOM会被Internet
    上的某些网关拦截。
      

  2.   

    --我第一个数据同步模块使用的就是FTP方式来传输的,看上去比较土,可是比较可靠,还能实现断点
    续传功能(FTP自己就支持),再多写点程序,就能实现断线自动重拨,断点续传。再加上数据传输
    计划管理,就能实现无人值守的数据同步
    --------------------
    麻烦问一下 norxi ,你的这种方法是怎么实现的,能否详细说明一下解决方法,谢谢!!