日期:2014-05-17  浏览次数:20346 次

问题请教:千万级数据同步
现有两台服务器,分别是我们公司的服务器A,和其它公司的服务器B,现在那个公司的工作人员在他们的服务器B上给我们开了只读帐户,其它就再也没有任何提供了。

现在我们要同步服务器B数据库中的若干张表,这些表的数据由几十万到几百万不等,而且每天都在不停的增加。现在我们要做的就是在每天晚上,保证我们数据库中的这几张表的数据与对方服务器中的这些表的数据相同。本来打算用程序跑的,但是问题是对方的这些表不仅仅是新增数据,而且还伴随着大量的修改操作,以及删除操作。所以用程序跑的话,就有点不好搞了。

现在想到的一个办法就是在我们的服务器上建立一个链接服务器,然后通过这个链接服务器将两个库中的表相关连,然后通过排除,把对方库中新增的数据导到我们库中,把对方修改的数据也更新到我们的库中,同时将他们库中的被删除的数据,在我们库中也删除掉。但是这样做效率太慢,十六七张表,同步一次,要好长时间,所以想问问有没有效率更高的办法?

我们的环境是:sql 2005
对方的环境是:sql 2008
数据同步 同步数据 数据更新 导数据

------解决方案--------------------
链接服务器也可以,但首先需要了解数据库的表结构,看能否通过表主键,更新数据时间字段作,有了这些可以考虑增量追加。 如果不能作增量,还可以与对方协商,给每一个table 增加一个字段timestamp,应用于行版本控制,每次抽取数据,先从远程服务器上获得所有table的主键字段和timestamp字段,比较本地的数据,再根据timestamp的变化情况来判断数据是update还是insert,如果在远程服务器有,本地没有存在,说明在远程服务器已被删除,可以考虑作delete操作或update 类似is_deleted(bit)字段=1描述数据已删除。




------解决方案--------------------
与对方协商,在所有表增加一个时间戳字段

你们每次读取后记录每个表的最大时间戳,下次只读区时间戳大于这个保存值得数据,都过来的数据根据主键相同的更新,不存在的插入操作。

------解决方案--------------------
假如按10G左右的数据量,是需要点时间。。
如果对方只给你只读帐号,而不配合你多一点点权限,那只能每晚都同步10G
如果对方能稍微配合一点,那么就可以实现增量同步,估计每晚最多同步几M or 最多几十M即可
------解决方案--------------------
建议了解下时间戳字段再说,时间戳字段的关键是不需要自己控制,这样对方程序不比任何修改
时间戳字段只要数据更新就会修改,这样可以用来区别哪些数据需要更新,从而减少传输的数据量

以上几乎不必怎么编程就可以实现