数据库同步软件DBSync的设计与实现

数据库同步软件DBSync的设计与实现

DBSync工作原理示意图

DBSync是一款数据库同步软件,支持各种数据库之间的同步,支持增量同步。本文分享该软件的产品渊源、设计思想、技术要点、功能特征、使用方法,最后分析其优缺点,供IT技术人员参考,也欢迎大家提供宝贵意见,促进我们持续进步。

阅读本文,用时大约15分钟。

1、产品渊源

早在2003年,我们在企业信息化的过程中,就经常遇到系统对接问题。很多客户的一些老旧软件,不方便废弃,又想将其中的数据汇集到我们的信息管理平台,借助平台实现集中查询、外网查询、手机查询等。有些则是反方向的,借助平台实现外网录入、手机录入,再将数据从平台同步到现有系统。

搜遍各大网络,未找到适合的。有些数据库虽然有同步工具,但只支持同型数据库之间的同步,不支持异型同步。而华创平台是通用型的,客户对它的用途五花八门,需要对接的系统也就多种多样,数据库的也就多种多样,因此需要能够异型同步。另外,很多同步工具的配置过程过于复杂,普通用户难以掌握。

为此,我们专门开发了一款同步软件,作为平台的配套工具,提供给客户使用,且力求简单易用。经过多年的实践发现,越来越多的客户,即使不使用平台也有同步需要,于是,我们于2018年开始对它进行改造,将它独立出来,经过不断完善,形成现在的DBSync,于2019年正式对外推出,并提供永久免费版。

2、设计思想

数据库之间的同步,一般是利用事务日志来实现的,它的工作原理是:读取源数据库的事务日志,找到最近执行过的事务,将这些事务传递至目标数据库,在目标库也执行一遍,使得源库、目标库都执行了同样的事务、产生同样的变化,从而使双方始终保持一致。

不同的数据库,其事务日志的格式就不相同的,因此,按照这个思路设计的软件,一般只适用于特定数据库。

DBSync跳出这个思路,不再依靠事务日志,而是直接访问事务执行的结果,也就是数据本身。通过扫描比较双方数据,找到相互间的差异,再将差异部分同步过去,从而使双方始终保持一致。

按照这个设计思想,DBSync就有广泛的适用性,支持各种数据库。因为,无论哪种数据库,无论内部怎么工作,其结果无非就是数据。我们只需要关注数据差异,找到差异并同步过去,就可以了。

3、技术要点

一款软件的设计开发,会涉及很多技术细节,这里仅列出与同步有关的技术要点。

●通过连接字符串连接数据库,允许用户自己填写连接字符串。这样,DBSync就能连接各种数据库,因为几乎所有数据库都可以使用OLEDB或ODBC进行连接。

●在用户操作界面上,为常见数据库提供连接字符串范例。用户可以在范例的基础上,修改其中的IP地址、用户名、密码等个性值,得到自己的连接字符串,从而减轻用户撰写难度。

●同步的基本单位是任务,一个任务负责一对数据表之间的同步。如果多个数据表、多个数据库之间需要同步,分别为它们设置任务,形成多个任务,即可。

●同步任务采取线程的方式运行,由于线程是可并发执行的,因此DBSync可同时执行多个同步任务。

●任务可设置select查询语句,用于限定参与同步的数据范围;可设置update语句,用于同步后的额外处理。

●主程序负责3个方面:一是与用户的交互,包括:任务的增、删、改,任务的手工启动与停止;二是监视任务的执行情况,实时显示同步进度信息;三是负责任务的定时自动启动,实现无人值守同步。

●兼顾性能与可靠性,更新目标数据库时,采用事务进行提交,每逢10000条更新提交一次,不足10000条的,一次性提交。

4、功能特征

根据以上设计思想及技术方案,DBSync具有以下功能特征:

非侵入式,独立运行

无需改动现有数据库,无需注入脚本或触发器,不增加数据库负荷,只需连接上即可同步,独立运行,简单易用。

支持各种数据库

既支持常规数据库,如Access、SQL Server、MySQL、Oracle、DB2等,又支持Excel、txt、csv等文件,任何可用OLEDB或ODBC连接的数据,均可参与同步。

支持异构数据库同步

既支持同型数据库之间的同步,如Access到Access,MySQL到MySQL,又支持异型数据库同步,如Access到SQL Server、SQL Server到MySQL、MySQL到Oracle等。

支持跨平台、跨地域同步

既支持同构平台之间的同步,如Windows到Windows,Linux到Linux,又支持跨平台同步,如Windows到Linux,Linux到Unix等,支持异地同步。

支持增量同步

既支持简单的全部复制式同步(Insert),又支持增量同步。软件能快速扫描数据库,找出相互间的差异数据(即增量),只对增量进行同步。

支持双向同步

参与同步的数据表,可根据需要分成多个区块,各区块分别指定同步方向,实现整体上的双向同步,能满足分布式系统的同步要求。

支持二进制字段

有些字段的数据类型为binary、byte[]、image、object等,它们是用于存放图片、文件等二进制数据的,这类字段也可进行同步。

支持同步后处理

可设置同步后需要执行的SQL语句,实现同步后的额外处理,如数据转换、公式计算等。

可以先比较再同步

实施同步前,可以先比较,找出相互间的差异,列出具体的差异数据,以便核对变更情况,确定无误后再同步。

无人值守同步

具有定期自动同步功能,只需预先设置好时间间隔,就可长期自动同步;支持系统重启后自动恢复同步,防止因系统重启而停止,实现无人值守同步。

秒级实时同步

重复同步的时间间隔最短可设置为1秒,源数据库发生变更后,1秒后就同步过去,几乎等同于实时同步。

异常提醒通知

具有提醒通知功能,每当任务执行出现异常,可Email通知当事人,方便您及时排错。

5、使用方法

本软件绿色运行,不需要安装。先下载本软件,下载网址:http://www.hc-software.com/hcgis/home/download.htm,Click页面底部DBSync对应的“立即下载”。下载后,解压至本地目录,Click其中的DBSync.exe即可运行。

5.1主界面介绍

软件启动后进入主界面,显示同步任务列表,如下图所示:

数据库同步软件DBSync的设计与实现

图1:DBSync主界面

说明:

●新增任务:Click右上角的“新增”按钮,可新增一个任务。

●删除任务:Click右上角的“删除”按钮,可删除一个任务。

●数据比较:Click任务列表中的“○”按钮,可比较双方数据。

●开始同步:Click任务列表中的“►”按钮,开始同步。

●中止同步:Click任务列表中的“■”按钮,中止正在进行的同步。

●执行状态:实时显示同步进度,包括:已扫描的记录数、已增、删、改的记录数。

●开始时间、结束时间、下次开始时间:显示每个任务的执行时间。

●日志:Click任务列表中的“查看”按钮,可查看该任务的操作日志、同步日志。

●设置:Click任务列表中的“设置”按钮,可修改任务设置。

5.2任务设置界面

要比较与同步数据,必须先设置一个任务,在任务里指定参与同步的数据库、数据表,字段对应关系,以及同步方式、同步频度等。Click主界面上的“新增”按钮,即可进入新增任务的Step1界面。

Step1:连接源数据库、目标数据库


数据库同步软件DBSync的设计与实现

图2:DBSync如何连接数据库

说明:本界面的用途是设置源数据库及目标数据库的连接字符串,以便连接数据库,其中打星号(*)的是必填栏位。数据库所在的平台以及数据库本身,无论是同型还是异型,也无论是本地还是异地,只要网络是通的,只要DBSync能连接上,就能同步。

填写完成后,请Click标签2,进入Step2。

Step2:选择源数据表、目标数据表


数据库同步软件DBSync的设计与实现

图3:DBSync选择数据表

说明:本界面的用途是选择源数据表及目标数据表。

选择完成后,请Click标签3,进入Step3。

Step3:设置字段对应关系


数据库同步软件DBSync的设计与实现

图4:DBSync选择字段对应关系

说明:本界面的用途是设置字段对应关系。如果您需要做增量同步,这里必须选择主键字段,主键字段是记录的唯一标识,用于判别同步双方是否存在对应记录。

选择完成后,请Click标签4,进入Step4。

Step4:设置同步方式及频度


数据库同步软件DBSync的设计与实现

图5:DBSync同步方式及频度

说明:本界面的用途是设置同步方式、同步频度,以及其它高级选项。

(1)同步方式:

●全部新增(Insert)至目标表:是指将源数据表中的数据全部Insert到目标数据表。

●仅同步增量数据:是指以主键字段为记录标识,只同步差异数据(即增量),而相同的数据不同步。增量分三种:

一是新增,是指源数据表存在而目标表不存在的记录,视作源数据表新增的,因此该记录应新增(Insert)到目标表;

二是删除,是指源数据表不存在而目标数据表存在的记录,视作源数据表已删除,因此目标表也应随之删除(Delete);

三是修改,是指源数据表与目标数据表均存在的记录,但双方数据有差异,视作源库已做修改,因此需用源数据表的数据修改(Update)目标表。

需要注意的是,主键字段值应该非空且全局唯一,同步时如遇到空或者重复的主键值,将直接跳过,不作处理。

(2)执行频度:

●手动点击“开始”执行:是指每次同步都由用户Click任务列表中的“►”来执行。

●手动,然后自动重复执行:是指由用户Click“►”开始同步,完成后,程序会按照预定的时间间隔自动重复执行。只要程序不关闭,同步就会一直持续下去,从而实现长期自动同步。

(3)同步范围:

可填写Select * From...Where... 形式的 SQL 语句,限定参与同步的数据范围。

(4)同步后处理:

可填写 Update SQL 语句,每次同步后,程序会执行该SQL 语句,可实现同步后的额外处理,如数据转换、公式计算等。

各步骤完成后,Click页面底部的“保存”按钮,任务列表就会新增一个任务。

5.3数据比较界面

设置好同步任务后,Click任务列表中的“○”按钮,进入扫描与比较界面,如下图所示:

数据库同步软件DBSync的设计与实现

图6:DBSync扫描与比较界面

说明:本界面的用途是比较双方数据,找出差异数据(即增量),并逐条列出增量数据。Click右上角“开始”按钮即开始比较。对于修改增量,标识为红色的字段值代表已发生修改,移动鼠标过去能显示修改前的原值。

5.4操作日志界面

Click任务列表中“日志”列的“查看”按钮,进入操作日志界面,如下图所示:

数据库同步软件DBSync的设计与实现

图7:DBSync操作日志

说明:本界面的用途是显示任务的操作日志、同步日志,用于追索其历史。Click右上角“删除”按钮,可删除该任务的日志。

6、优缺点分析

基于数据比较的设计思想,使得DBSync能够支持各种数据库之间的同步,支持异构同步,且简单易用,这些优点前文已有说明,不再赘述。

另一个优点是非常稳定可靠。因为同步任务是定期重复执行的,每次都会进行数据比较,所以即使偶尔发生网络故障、数据库宕机等,没问题都不大,故障排除后,它能照常继续工作,不会有什么遗漏。不像事务日志模式,日志一旦损坏或丢失,就很麻烦。

常言道,有得必有失,这种设计有2个弊端:

一是,只能同步数据,不能同步库结构、存储过程、触发器等。所幸的是,如果需要修改库结构,往往也需要修改程序,这2者是相互配套的,是需要一起做的,所以,大部分情况下人工操作更合适。

二是,由于需要扫描比较数据,如果数据量很大,同步速度会较慢,但这个可以通过增量范围限定、分类处理进行提速。具体提速方法,请看用户手册第6章节。实际测试结果表明:记录数为百万级的数据同步,能在数秒内完成扫描;千万级的,约1分钟完成;亿级的,约数分钟完成。


结论:如果实时性要求很高,如毫秒级的快速同步,DBSync无法胜任。其它大部分数据同步场合,如系统对接、数据热备份、读写分离等,DBSync是适用的。

DBSync
分享到:

您可能还会对下面的文章感兴趣: