多数据库数据同步问题的处理方式

SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用于大容量数据库快速同步。

安装包下载地址:https://www.syncnavigator.cn/Setup.zip

帮助文档地址:https://www.syncnavigator.cn/Help_zh-CN.chm

Web文档地址:https://www.syncnavigator.cn/chm/index.htm


 对于分库(垂直分割,根据业务分库)数据如何确保数据最终一致性,这里说明一下为什么进行数据同步,而不是通过服务调用获取。这里主要是对应于公共的数据信息,比如(人员,组织等)关联的数据多,查询量大通过本地数据库保存一份的方法来降低全局数据库的压力,提高查询效率。

   实现的方法有如下几种:

   1.直接查询变动数据同步

     写一个定时任务扫描要同步的表数据,当有数据变动或增加数据时,立即向其他子系统数据库同步数据,并依次提交事物。

这种方式的好处是简单易实现;

缺点是如果同步过程中发生异常某个数据库数据回滚,其他数据库成功,会造成数据的不一致性。

实时扫描业务表数据对真实需要业务查询功能产生影响。

   2.异步处理法

    在全局数据库增加一个增量数据表,存放有变动的表名,数据id,变更时间,是否同步标识和回执 。

定时任务实时扫描增量表,根据时间对数据进行count操作,当count数值增加时,查询未同步标识的数据进行同步操作;

当变更时间超过5分钟仍没有返回值时再次进行通过操作,为避免同一条数据多次变更,最新的操作成功,而老的数据再次同步覆盖掉最新的数据,需要对同条数据count>1的数据全部标记为未同步,按照时间顺序进行再次同步。count=1的数据直接再次同步;

有同步返回标示的是同步成功的,这样就保证了同步数据一定能够成功;

 

   3.消息确认法

        由于前面方法2存在延迟较大,针对方法2的改进引入消息机制,就是在全局表进行同步时向消息队列写一条数据,子系统接收处理完消息后也向消息队列写一条消息。

       消费端订阅此消息当收到两个一样的数据id消息时,表名次数据同步成功,如果没有收到两个一样id的消息时,说明此消息同步失败,需要再次同步。
 

展开阅读全文
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值