最近在研究数据同步的技术,经过几个月的努力,现在终于实现了!主要功能是实现多台SQL Server数据同步,我现在有10台SQL Server,这些数据库的结构基本上一致,且地理分布很分散,有的服务器甚至再国外,只要有一台服务的数据发生变化(添加,修改,删除),就会根据设置将数据同步到其他的服务器上面,而且可以设置条件,条件可以是表和字段,比如T1表要同步,还有当T1表的F1字段数据为XXX时可以同步,而且还可以设置要同步到那些服务器.
现在经过测试了一段时间,程序基本上没有问题了,今天来这里看看,发现有众多的兄弟为这个问题困扰着,而且打不得想法是用SQL Server复制的技术,SQL Server复制技术有很多的问题,且不能灵活,一旦服务器出现问题了,数据将会导致丢失,
不知道大家是否有更好的实现思路,可以交流一下

解决方案 »

  1.   

    这个市为公司开发的,所以不方便拿出来分享,我的基本思路是:第一步,将变更的数据使用触发器把数据存放到Transfer_Send表中;第二步:程序每隔几秒钟将数据打包(同时还用GZip压缩),并发到一个Router的服务器,Router的服务器负责接受数据包,并将数据分成不同文件,比如某个数据包是发给美国和香港的,那么就会在USA和HKG文件夹下面生成两个文件;第三步,Router将接受的数据发给对应的Sql Server数据库,如上,Router就会将数据包发给美国和香港的服务器,第四步,美国和香港服务器收到数据包后就会将数据解压,并变成XML纪录的文本格式,同时将这些数据更新到对应的表中.其中关键的思想是和IP路由的思想有点相似,还有就是压缩的技术,另外由于不同服务器编码不同,如"来"字,在简体上面显示正常,可是当把数据同步到香港的服务器上面(繁体)就会出现乱码的现象,应当要将编码变为Big5的"來"字.所以还有一个就是内码的装换,主要是可以实现 GB2312-Big5-Unicode之间任意转换.另外我使用的是TCP二进制传输数据,保证传输的效率,同时在发送和接收数据包的时候还进行了MD5验证,保证数据传输的正确性.
      

  2.   

    谢谢楼主.这个已经足够了.那你使用到socket 做数据传输吧.
      

  3.   

    我使用的是.net Remoting来开发,底层其实还是Socket,测试来看,传输的速度还挺快的