DBSync工作原理示意图
DBSync是一款数据库同步软件,支持各种数据库之间的同步,支持增量同步。本文分享该软件的产品渊源、设计思想、技术要点、功能特征、使用方法,最后分析其优缺点,供IT技术人员参考,也欢迎大家提供宝贵意见,促进我们持续进步。
阅读本文,用时大约15分钟。
早在2003年,我们在企业信息化的过程中,就经常遇到系统对接问题。很多客户的一些老旧软件,不方便废弃,又想将其中的数据汇集到我们的信息管理平台,借助平台实现集中查询、外网查询、手机查询等。有些则是反方向的,借助平台实现外网录入、手机录入,再将数据从平台同步到现有系统。
搜遍各大网络,未找到适合的。有些数据库虽然有同步工具,但只支持同型数据库之间的同步,不支持异型同步。而华创平台是通用型的,客户对它的用途五花八门,需要对接的系统也就多种多样,数据库的也就多种多样,因此需要能够异型同步。另外,很多同步工具的配置过程过于复杂,普通用户难以掌握。
为此,我们专门开发了一款同步软件,作为平台的配套工具,提供给客户使用,且力求简单易用。经过多年的实践发现,越来越多的客户,即使不使用平台也有同步需要,于是,我们于2018年开始对它进行改造,将它独立出来,经过不断完善,形成现在的DBSync,于2019年正式对外推出,并提供永久免费版。
数据库之间的同步,一般是利用事务日志来实现的,它的工作原理是:读取源数据库的事务日志,找到最近执行过的事务,将这些事务传递至目标数据库,在目标库也执行一遍,使得源库、目标库都执行了同样的事务、产生同样的变化,从而使双方始终保持一致。
不同的数据库,其事务日志的格式就不相同的,因此,按照这个思路设计的软件,一般只适用于特定数据库。
DBSync跳出这个思路,不再依靠事务日志,而是直接访问事务执行的结果,也就是数据本身。通过扫描比较双方数据,找到相互间的差异,再将差异部分同步过去,从而使双方始终保持一致。
按照这个设计思想,DBSync就有广泛的适用性,支持各种数据库。因为,无论哪种数据库,无论内部怎么工作,其结果无非就是数据。我们只需要关注数据差异,找到差异并同步过去,就可以了。
一款软件的设计开发,会涉及很多技术细节,这里仅列出与同步有关的技术要点。
●通过连接字符串连接数据库,允许用户自己填写连接字符串。这样,DBSync就能连接各种数据库,因为几乎所有数据库都可以使用OLEDB或ODBC进行连接。
●在用户操作界面上,为常见数据库提供连接字符串范例。用户可以在范例的基础上,修改其中的IP地址、用户名、密码等个性值,得到自己的连接字符串,从而减轻用户撰写难度。
●同步的基本单位是任务,一个任务负责一对数据表之间的同步。如果多个数据表、多个数据库之间需要同步,分别为它们设置任务,形成多个任务,即可。
●同步任务采取线程的方式运行,由于线程是可并发执行的,因此DBSync可同时执行多个同步任务。
●任务可设置select查询语句,用于限定参与同步的数据范围;可设置update语句,用于同步后的额外处理。
●主程序负责3个方面:一是与用户的交互,包括:任务的增、删、改,任务的手工启动与停止;二是监视任务的执行情况,实时显示同步进度信息;三是负责任务的定时自动启动,实现无人值守同步。
●兼顾性能与可靠性,更新目标数据库时,采用事务进行提交,每逢10000条更新提交一次,不足10000条的,一次性提交。
根据以上设计思想及技术方案,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通知当事人,方便您及时排错。
本软件绿色运行,不需要安装。先下载本软件,下载网址:http://www.hc-software.com/hcgis/home/download.htm,Click页面底部DBSync对应的“立即下载”。下载后,解压至本地目录,Click其中的DBSync.exe即可运行。
软件启动后进入主界面,显示同步任务列表,如下图所示:
图1:DBSync主界面
说明:
●新增任务:Click右上角的“新增”按钮,可新增一个任务。
●删除任务:Click右上角的“删除”按钮,可删除一个任务。
●数据比较:Click任务列表中的“○”按钮,可比较双方数据。
●开始同步:Click任务列表中的“►”按钮,开始同步。
●中止同步:Click任务列表中的“■”按钮,中止正在进行的同步。
●执行状态:实时显示同步进度,包括:已扫描的记录数、已增、删、改的记录数。
●开始时间、结束时间、下次开始时间:显示每个任务的执行时间。
●日志:Click任务列表中的“查看”按钮,可查看该任务的操作日志、同步日志。
●设置:Click任务列表中的“设置”按钮,可修改任务设置。
要比较与同步数据,必须先设置一个任务,在任务里指定参与同步的数据库、数据表,字段对应关系,以及同步方式、同步频度等。Click主界面上的“新增”按钮,即可进入新增任务的Step1界面。
Step1:连接源数据库、目标数据库
图2:DBSync如何连接数据库
说明:本界面的用途是设置源数据库及目标数据库的连接字符串,以便连接数据库,其中打星号(*)的是必填栏位。数据库所在的平台以及数据库本身,无论是同型还是异型,也无论是本地还是异地,只要网络是通的,只要DBSync能连接上,就能同步。
填写完成后,请Click标签2,进入Step2。
Step2:选择源数据表、目标数据表
图3:DBSync选择数据表
说明:本界面的用途是选择源数据表及目标数据表。
选择完成后,请Click标签3,进入Step3。
Step3:设置字段对应关系
图4:DBSync选择字段对应关系
说明:本界面的用途是设置字段对应关系。如果您需要做增量同步,这里必须选择主键字段,主键字段是记录的唯一标识,用于判别同步双方是否存在对应记录。
选择完成后,请Click标签4,进入Step4。
Step4:设置同步方式及频度
图5:DBSync同步方式及频度
说明:本界面的用途是设置同步方式、同步频度,以及其它高级选项。
(1)同步方式:
●全部新增(Insert)至目标表:是指将源数据表中的数据全部Insert到目标数据表。
●仅同步增量数据:是指以主键字段为记录标识,只同步差异数据(即增量),而相同的数据不同步。增量分三种:
一是新增,是指源数据表存在而目标表不存在的记录,视作源数据表新增的,因此该记录应新增(Insert)到目标表;
二是删除,是指源数据表不存在而目标数据表存在的记录,视作源数据表已删除,因此目标表也应随之删除(Delete);
三是修改,是指源数据表与目标数据表均存在的记录,但双方数据有差异,视作源库已做修改,因此需用源数据表的数据修改(Update)目标表。
需要注意的是,主键字段值应该非空且全局唯一,同步时如遇到空或者重复的主键值,将直接跳过,不作处理。
(2)执行频度:
●手动点击“开始”执行:是指每次同步都由用户Click任务列表中的“►”来执行。
●手动,然后自动重复执行:是指由用户Click“►”开始同步,完成后,程序会按照预定的时间间隔自动重复执行。只要程序不关闭,同步就会一直持续下去,从而实现长期自动同步。
(3)同步范围:
可填写Select * From...Where... 形式的 SQL 语句,限定参与同步的数据范围。
(4)同步后处理:
可填写 Update SQL 语句,每次同步后,程序会执行该SQL 语句,可实现同步后的额外处理,如数据转换、公式计算等。
各步骤完成后,Click页面底部的“保存”按钮,任务列表就会新增一个任务。
设置好同步任务后,Click任务列表中的“○”按钮,进入扫描与比较界面,如下图所示:
图6:DBSync扫描与比较界面
说明:本界面的用途是比较双方数据,找出差异数据(即增量),并逐条列出增量数据。Click右上角“开始”按钮即开始比较。对于修改增量,标识为红色的字段值代表已发生修改,移动鼠标过去能显示修改前的原值。
Click任务列表中“日志”列的“查看”按钮,进入操作日志界面,如下图所示:
图7:DBSync操作日志
说明:本界面的用途是显示任务的操作日志、同步日志,用于追索其历史。Click右上角“删除”按钮,可删除该任务的日志。
基于数据比较的设计思想,使得DBSync能够支持各种数据库之间的同步,支持异构同步,且简单易用,这些优点前文已有说明,不再赘述。
另一个优点是非常稳定可靠。因为同步任务是定期重复执行的,每次都会进行数据比较,所以即使偶尔发生网络故障、数据库宕机等,没问题都不大,故障排除后,它能照常继续工作,不会有什么遗漏。不像事务日志模式,日志一旦损坏或丢失,就很麻烦。
常言道,有得必有失,这种设计有2个弊端:
一是,只能同步数据,不能同步库结构、存储过程、触发器等。所幸的是,如果需要修改库结构,往往也需要修改程序,这2者是相互配套的,是需要一起做的,所以,大部分情况下人工操作更合适。
二是,由于需要扫描比较数据,如果数据量很大,同步速度会较慢,但这个可以通过增量范围限定、分类处理进行提速。具体提速方法,请看用户手册第6章节。实际测试结果表明:记录数为百万级的数据同步,能在数秒内完成扫描;千万级的,约1分钟完成;亿级的,约数分钟完成。
结论:如果实时性要求很高,如毫秒级的快速同步,DBSync无法胜任。其它大部分数据同步场合,如系统对接、数据热备份、读写分离等,DBSync是适用的。