掌桥专利:专业的专利平台
掌桥专利
首页

一种异构数据库的实时同步系统及方法

文献发布时间:2023-06-19 12:18:04


一种异构数据库的实时同步系统及方法

技术领域

本发明涉及数据库技术领域,尤其涉及一种异构数据库的实时同步系统及方法。

背景技术

随着大数据时代的到来,数据呈现了爆炸式的增长,数据种类也变得多样化。在现代社会中,数据的商业价值被逐步挖掘,越来越多的企业开始收集存放各种业务数据。不同种类的数据带来了复杂的技术体系,企业中开始同时存在越来越多异构的数据库,不同结构的数据库无法直接进行数据的融合和交互,所以需要有一种技术来实现异构数据源之间的数据整合能力。

在现有技术中,异构数据库之间通常采用离线同步方式,离线同步比较容易实现,使用现有技术体系中的一些工具即可完成,比如利用不同数据库之间的导入导出工具,或者通过一些数据转换工具进行一次性转换,将源端数据库的数据格式转换为目标数据库的数据格式,最后写入到目标数据库即可。但这种离线同步的实现方式时效性太差,并且是定时转换,不具备连续性,会给用户带来许多不便。因此,现亟需一种实现异构数据库之间实时同步的系统。

发明内容

针对现有技术中存在的上述问题,现提供一种异构数据库的实时同步系统及方法。

具体技术方案如下:

本发明一种异构数据库的实时同步系统,应用于对具有不同数据类型的多个数据库之间的数据进行实时同步,包括:

一日志解析模块,连接多个所述数据库中的源端数据库,用于抽取所述源端数据库的日志并对其进行解析,提取所述日志中涉及所述源端数据库变化的第一类事务语句,在解析完成后依次输出;

一分解模块,连接所述日志解析模块,用于接收所述第一类事务语句,提取出所述第一类事务语句中的第一类语法以及所述第一类事务语句中的字段对应的第一类数据类型;

一转义模块,连接所述分解模块,用于对所述分解模块输出的所述第一类事务语句的所述第一类语法映射为对应于多个所述数据库中的目标数据库的第二类语法,并将所述第一类事务语句的所述第一类数据类型映射为对应于所述目标数据库的第二类数据类型,并根据所述第二类语法和所述第二类数据类型将所述第一类事务语句拼装为一第二类事务语句;

一数据同步模块,分别连接所述转义模块和所述目标数据库,用于接收所述转义模块输出的所述第二类事务语句在所述目标数据库中执行重演。

优选的,还包括一初始化模块,连接于所述源端数据库和所述日志解析模块之间,用于在进行日志解析之前,配置多个所述数据库之间的映射关系以及配置同步开启时间点。

优选的,还包括一事务缓存模块,用于接收所述转义模块新生成的所述第二类事务语句按照事务顺序存放于缓存队列中。

优选的,还包括一事务合并模块,用于获取所述第二类事务语句,判断是否需要对所述第二类事务语句进行合并,并在判断结果表明需要合并时对所述第二类事务语句进行合并。

优选的,所述分解模块包括:

一语法提取单元,用于从所述第一类事务语句中提取出所述第一类语法;

一数据类型提取单元,用于从所述第一类事务语句中提取出所述字段对应的所述第一类数据类型,并将所述字段和所述第一类数据类型组合成记录。

优选的,所述转义模块包括:

一语法映射单元,用于对所述分解模块输出的所述第一类事务语句的所述第一类语法映射为对应于所述目标数据库的所述第二类语法;

一数据类型映射单元,将所述第一类事务语句的所述第一类数据类型映射为对应于所述目标数据库的所述第二类数据类型;

一拼接单元,分别连接所述语法映射单元和所述数据类型映射单元,根据所述第二类语法和所述第二类数据类型将所述第一类事务语句拼装为所述第二类事务语句。

优选的,所述初始化模块包括:

一语法映射配置单元,用于配置所述源端数据库和所述目标数据库之间的语法映射关系;

一数据类型映射配置单元,用于配置所述源端数据库和所述目标数据库之间的数据类型映射关系;

一同步时间配置单元,用于检测所述源端数据库和所述目标数据库是否包含历史数据,并在检测到所述源端数据库和/或所述目标数据库存在历史数据时执行数据初始化。

优选的,所述日志解析模块、所述分解模块、所述转义模块以及所述数据同步模块在对接收的数据进行处理后附加对应的事务编码以及本事务执行顺序编码再输出。

优选的,所述第一类事务语句和所述第二类事务语句采用结构化查询语言。

本发明还包括一种异构数据库的实时同步方法,应用于对具有不同数据类型的多个数据库之间的数据进行实时同步,包括:

步骤S1,抽取所述源端数据库的日志并对其进行解析,提取所述日志中涉及所述源端数据库变化的第一类事务语句,在解析完成后依次输出;

步骤S2,提取出所述第一类事务语句中的第一类语法以及所述第一类事务语句中的字段对应的第一类数据类型;

步骤S3,对所述分解模块输出的所述第一类事务语句的所述第一类语法映射为对应于多个所述数据库中的目标数据库的第二类语法,并将所述第一类事务语句的所述第一类数据类型映射为对应于所述目标数据库的第二类数据类型,并根据所述第二类语法和所述第二类数据类型将所述第一类事务语句拼装为一第二类事务语句;

步骤S4,将所述第二类事务语句放入所述目标数据库中执行重演,以实现所述源端数据库和所述目标数据库之间的实时同步。

本发明的技术方案具有如下优点或有益效果:提供一种异构数据库的实时同步系统及方法,实现异构数据库之间的实时同步,优化数据同步的时效性,可以连续对数据进行同步更新,提高用户使用数据库的便利性。

附图说明

参考所附附图,以更加充分的描述本发明的实施例。然而,所附附图仅用于说明和阐述,并不构成对本发明范围的限制。

图1为本发明实施例中的异构数据库实时同步系统的原理框图;

图2为本发明实施例中的初始化模块的原理框图;

图3为本发明实施例中的异构数据库实时同步方法的步骤流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。

本发明包括一种异构数据库的实时同步系统,应用于对具有不同数据类型的多个数据库之间的数据进行实时同步,如图1所示,数据库包括源端数据库1和目标数据库2,包括:

日志解析模块3,连接多个数据库中的源端数据库1,用于抽取源端数据库1的日志并对其进行解析,提取日志中涉及源端数据库1变化的第一类事务语句,在解析完成后依次输出;

分解模块4,连接日志解析模块3,用于接收第一类事务语句,提取出第一类事务语句中的第一类语法以及第一类事务语句中的字段对应的第一类数据类型;

转义模块5,连接分解模块4,用于对分解模块4输出的第一类事务语句的第一类语法映射为对应于目标数据库2的第二类语法,并将第一类事务语句的第一类数据类型映射为对应于目标数据库的第二类数据类型,并根据第二类语法和第二类数据类型将第一类事务语句拼装为一第二类事务语句;

数据同步模块6,分别连接转义模块5和目标数据库2,用于接收转义模块5输出的第二类事务语句在目标数据库2中执行重演。

具体地,在本实施例中,由于异构数据库之间的数据所采用的语法和数据类型不同,因此通过日志解析模块3解析源端数据库的日志,日志可以包括在线日志和/或归档日志;捕获日志中涉及数据库变化的第一类事务语句,例如,增加、删减、修改等DML(DataManipulation Language,数据操作语言)操作以及DDL(Data Definition Language,数据定义语言)操作等,DML操作包括SELECT(选择)、UPDATE(更新)、INSERT(插入)、DELETE(删除)四条命令,这四条命令是用来对数据库里的数据进行操作的语言,本实施例中捕获除SELECT操作以外的其它三种DML操作。

在捕获到了涉及数据库变化的第一类事务语句后,再通过分解模块4提取第一类事务语句的语法和数据类型,转义模块5将第一类事务语句处理成目标数据库对应的语法和数据类型的第二类事务语句,例如,假设源端数据库1为ORACLE,目标数据库2为MySQL,则将源端数据库1中的日期换字符函数TO_CHAR(a,’yyyy-mm-dd HH:mi:ss’)映射为DATE_FORMAT(a,’%Y-%m-%d%H:%i:%s’),是否为空函数nvl(a,1)映射为ifnull(a,1)等;此外,数据类型的映射包括将源端数据库ORACLE中的数据类型映射为目标数据库MYSQL中的DATETIME类型,ORACLE中的NUMBER数据类型映射为MYQL中的DECIMAL/NUMERIC数据类型,以实现异构数据库之间的融合。

最后通过数据同步模块6在目标数据库2内进行事务的重演来完成数据的实时同步。数据同步模块6拿到需要执行的第二类事务语句后,按照第二类事务语句的事务编码在目标数据库2进行重演。每次执行记录当前执行完的事务编码,出现故障时则从该事务编码开始进行重试,以确保数据同步的稳定性。

需要说明的是,本实施例中的事务语句优选采用结构化查询语言(StructuredQuery Language,简称SQL),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

在一种较优的实施例中,如图1所示,实时同步系统还包括初始化模块7,连接于源端数据库1和日志解析模块3之间,用于在进行日志解析之前,配置多个数据库之间的映射关系以及配置同步开启时间点。如图2所示,初始化模块7包括:语法映射配置单元701,用于配置源端数据库1和目标数据库2之间的语法映射关系;数据类型映射配置单元702,用于配置源端数据库1和目标数据库2之间的数据类型映射关系;同步时间配置单元703,用于检测源端数据库1和目标数据库2是否包含历史数据,并在检测到源端数据库1和/或目标数据库2存在历史数据时执行数据初始化。

具体地,在本实施例中,初始化模块7用于配置异构数据库之间的映射关系,具体包含语法映射关系和数据类型映射关系。此外,还用于配置需要同步的数据范围,选择全库同步或者部分同步,以及配置数据同步开启时间点,若源端数据库1和目标数据库2都是新库(均不包含历史数据),则无需进行数据初始化,如果是从中间点开始同步,则初始化模块还将完成同步时间点之前的数据同步工作。

在一种较优的实施例中,如图1所示,实时同步系统还包括:

事务缓存模块8,用于接收转义模块5新生成的第二类事务语句按照事务顺序存放于缓存队列中;

事务合并模块9,用于获取第二类事务语句,判断是否需要对第二类事务语句进行合并,并在判断结果表明需要合并时对第二类事务语句进行合并。

具体地,事务缓存模块8接收转义模块5新生成的第二类事务语句,按照第二类事务语句对应的事务顺序存放在缓存队列中,事务缓存模块8设置于目标数据库之前,主要用于防止目标数据库2出现意外,导致事务语句丢失,出现断点并导致数据不一致的情况。

具体地,事务合并模块9从事务缓存模块8中依次获取第二类事务语句,并判断第二类事务语句是否需要合并,比如针对1..10000的同表同字段修改为某个值,可以将多个第二类事务语句合并成一个事务语句以提升执行效率,若判断无法合并的事务语句则仍保留原始的事务语句,不执行合并。

在一种较优的实施例中,如图1所示,分解模块4包括:

语法提取单元401,用于从第一类事务语句中提取出第一类语法;

数据类型提取单元402,用于从第一类事务语句中提取出字段对应的第一类数据类型,并将字段和第一类数据类型组合成记录。

在一种较优的实施例中,如图1所示,转义模块5包括:

语法映射单元501,用于对分解模块4输出的第一类事务语句的第一类语法映射为对应于目标数据库2的第二类语法;

数据类型映射单元502,将第一类事务语句的第一类数据类型映射为对应于目标数据库2的第二类数据类型;

拼接单元503,分别连接语法映射单元501和数据类型映射单元502,根据第二类语法和第二类数据类型将第一类事务语句拼装为第二类事务语句。

在一种较优的实施例中,日志解析模块3、分解模块4、转义模块5以及数据同步模块6在对接收的数据进行处理后附加对应的事务编码以及本事务执行顺序编码再输出。

具体地,在本实施例中,事务编码(即事务ID)是用于判断事务语句所对应的事务的执行顺序,而本事务执行顺序编码(即事务执行顺序ID)是指一个事务中包含多个事务语句,用于判断同一事务中的多个事务语句的执行顺序。例如,分解模块4对包含事务的SQL语句进行拆解,提取出SQL语句中的语法,并附加事务ID以及本事务执行顺序ID,若当前接收的SQL语句对应的事务是DELETE操作,则给DELETE操作附加事务ID为“1”,DELETE操作这个事务同时又包含了多个SQL语句,再根据当前SQL在该事务中的执行顺序附加一个事务执行顺序ID“8”。通过附加顺序ID的方式,以便于每一级模块按照相应的顺序对数据进行处理,提高数据实时同步的效率以及时效性。

本发明还提供一种异构数据库的实时同步方法,应用于对具有不同数据类型的多个数据库之间的数据进行实时同步,如图3所示,包括:

步骤S1,抽取源端数据库的日志并对其进行解析,提取日志中涉及源端数据库变化的第一类事务语句,在解析完成后依次输出;

步骤S2,提取出第一类事务语句中的第一类语法以及第一类事务语句中的字段对应的第一类数据类型;

步骤S3,对分解模块输出的第一类事务语句的第一类语法映射为对应于多个数据库中的目标数据库的第二类语法,并将第一类事务语句的第一类数据类型映射为对应于目标数据库的第二类数据类型,并根据第二类语法和第二类数据类型将第一类事务语句拼装为一第二类事务语句;

步骤S4,将第二类事务语句放入目标数据库中执行重演,以实现源端数据库和目标数据库之间的实时同步。

具体地,本实施例中的第一类事务语句和第二类事务语句所采用的程序语言优选为SQL。由于异构数据库之间的数据所采用的语法和数据类型不同,因此需要对源端数据库的数据进行处理。首先解析源端数据库的在线日志或归档日志,捕获日志中涉及数据库变化的第一类事务语句,例如增加、删减、修改等DML操作以及DDL操作等,忽略SELECT操作。在捕获到了涉及数据库变化的第一类事务语句后,再提取第一类事务语句的语法和数据类型,将第一类事务语句处理成目标数据库对应的语法和数据类型的第二类事务语句,例如,假设源端数据库1为ORACLE,目标数据库2为MySQL,则将源端数据库1中的日期换字符函数TO_CHAR(a,’yyyy-mm-dd HH:mi:ss’)映射为DATE_FORMAT(a,’%Y-%m-%d%H:%i:%s’),是否为空函数nvl(a,1)映射为ifnull(a,1)等;此外,数据类型的映射包括将源端数据库ORACLE中的数据类型映射为目标数据库MYSQL中的DATETIME类型,ORACLE中的NUMBER数据类型映射为MYQL中的DECIMAL/NUMERIC数据类型。最后在目标数据库内执行事务重演来完成数据的实时同步,以实现异构数据库之间的交互。

本发明实施例的有益效果在于:提供一种异构数据库的实时同步系统及方法,实现异构数据库之间的实时同步,优化数据同步的时效性,可以连续对数据进行同步更新,提高用户使用数据库的便利性。

以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。

相关技术
  • 一种异构数据库的实时同步系统及方法
  • 一种基于国产环境下的异构数据库同步系统及同步方法
技术分类

06120113240676