首页 > 代码库 > 多个不同站点服务器数据同步到总服务器
多个不同站点服务器数据同步到总服务器
实际案例:一家有名公司总部在北京,在全国各个站点也都有分布,例如长沙、广州和上海,它们通过公司内网连接通讯,现他们开发了一款与时俱进的软件在各个站点使用,各个站点都有相应的服务器支持,软件使用过程中存储的数据都保存在服务器里的oracle数据库中,现在要求将各个站点服务器中的一些比较庞大的而且比较重要的数据表需要同步到公司总部服务器(北京服务器),求一个比较好的方案;
模拟同步的表为item_rec和user_rec,这两个表分别都是记录表,每天都能产生大量的数据,总部有可能需要时时查看各站点中这两个表中的数据,因为直接连接到各个站点去看有时候会因为网络限制比较卡,所以要求同步到总部服务器上面,示意图如下:
我相信像腾讯、淘宝等他们都会有内部技术的实现,只是我们学习不到,奈何技术有限,只能从数据库方面用笨方法着手了;
现解决方案:
各站点服务器中:为相应oracle数据库中为相应需要同步的表建立相应的触发器和一张操作日志表,触发器实现的功能是在对item_rec和user_rec表进行增删改的时候,将相应的操作的表、操作记录主键ID、操作的sql语句(要有地区区分,以便总公司服务器在表中插入数据的时候有相应的区分)、是否同步完成标识(方便查看记录是否同步成功)插入到操作日志表中;
公司总部服务器:在公司总部服务器数据库中添加需要同步的表item_rec、user_rec,注意有地区之分,建立一个存储过程,存储过程执行的功能是:通过DB-Link连接各个站点服务器,查询各个站点的操作日志表,根据记录主键ID和地区信息执行其中的sql语句,修改同步表(item_rec、user_rec)信息,成功执行完成后则将各站点操作日志表中的相应的记录的同步标识修改为完成,总公司服务器中使用Job调度程序,通过Job定时调度存储过程,同步完成!
示意图如下:
其实使用这样的同步方案,里面存在很多的问题的:
1、网络不稳定;
2、各站点需要同步的表比较多,每张表对应一个触发器,过多的触发器多多少少会影响软件正常的使用;
3、总公司服务器在执行各站点操作记录数据的时候,由于一次性各站点记录日志表数据比较大,可能会影响总公司服务器的运行,经过测试其实影响也没多少;
4、在总公司服务器同步完成相应的单条记录信息的时候(成功执行单条sql语句),需要修改各站点中操作日志表相应的同步完成标识,由于记录比较多且需要远程访问,也会存在一定的影响;
在实际测试的时候,发现问题还是蛮多的,所以希望专业人士能够给出好的建议,如果有更好的技术希望能交流分享之,让此类问题的数据同步能够更加稳定,谢谢!!
多个不同站点服务器数据同步到总服务器