发明内容
本发明提供了一种数据同步方法及装置,其目的是为了解决现有的数据库同步技术对异构数据库的支持较弱,不具备足够的灵活性的问题。
为了达到上述目的,本发明的实施例提供了一种数据同步方法,应用于多级异构数据库,该方法包括:
获取目标数据库与所有源数据库之间的关联关系,所述关联关系至少包括所述目标数据库与所有源数据库之间的映射关系以及预设的第一数据转换公式;
在一预设的同步周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息;
在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令;
将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
优选地,获取目标数据库与所有源数据库之间的关联关系之前,该方法包括:
获取目标数据库中的每个待同步数据表与所有源数据库中的源数据表之间的映射关系以及第二数据转换公式;
对所有的第二数据转换公式进行分析计算,得到第一数据转换公式。
优选地,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
优选地,在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,具体包括:
为每个源数据库分别创建一个控制表;
在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,并将变化数据的标识信息存储在源数据库对应的控制表中。
优选地,在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令,具体包括:
在同步周期内,根据变化数据所在源数据表的表名以及关联关系中的映射关系,确定对应的目标数据库中的待同步数据表;
根据变化数据所在源数据表的主键值、变化数据的变化类型值以及第一数据转换公式,生成待同步数据表对应的数据同步指令,并将变化数据的变化时间作为数据同步指令的下达时间。
优选地,将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库之后,该方法还包括:
获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言。
优选地,获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言的步骤之后,该方法还包括:
获取目标数据库对与当前时间最接近的数据同步指令对应的结构化查询语言的执行结果:
当执行结果为已执行时,删除控制表中对应的变化数据的标识信息。
为了实现上述目的,本发明的实施例还提供了一种数据同步装置,应用于多级异构数据库,该装置包括:
获取模块,用于获取目标数据库与所有源数据库之间的关联关系,所述关联关系至少包括所述目标数据库与所有源数据库之间的映射关系以及预设的第一数据转换公式;
标识获取模块,用于在一预设的同步周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息;
生成模块,用于在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令;
发送模块,用于将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
优选地,数据同步装置包括:
映射获取模块,用于在获取模块获取目标数据库与所有源数据库之间的关联关系之前,获取目标数据库中的每个待同步数据表与所有源数据库中的源数据表之间的映射关系以及第二数据转换公式;
分析模块,用于对所有的第二数据转换公式进行分析计算,得到第一数据转换公式。
优选地,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
优选地,标识获取模块具体包括:
创建子模块,用于为每个源数据库分别创建一个控制表;
存储子模块,用于在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,并将变化数据的标识信息存储在源数据库对应的控制表中。
优选地,生成模块具体包括:
确定子模块,用于在同步周期内,根据变化数据所在源数据表的表名以及关联关系中的映射关系,确定对应的目标数据库中的待同步数据表;
指令生成子模块,用于根据变化数据所在源数据表的主键值、变化数据的变化类型值以及第一数据转换公式,生成待同步数据表对应的数据同步指令,并将变化数据的变化时间作为数据同步指令的下达时间。
优选地,该装置还包括:
执行模块,用于在发送模块将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库之后,
获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言。
优选地,该装置还包括:
删除模块,用于在执行模块获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言之后,
获取目标数据库对与当前时间最接近的数据同步指令对应的结构化查询语言的执行结果:
当执行结果为已执行时,删除控制表中对应的变化数据的标识信息。
本发明的上述方案至少包括以下有益效果:
本发明提供的数据同步方法及装置,无需改变数据库系统原有的程序逻辑,通过获取源数据库中变化数据的标识信息,再根据关联关系将变化数据的信息转换成针对目标数据库的数据同步指令,能够支持不同数据表模式的数据同步,对异构数据库的支持程度较强;本发明可独立主动设置数据同步周期,不受限于源数据库和目标数据库的同步周期,方便更改;且本发明中关联关系中的第一数据转换公式不仅可以是数据类型转换,还可以是数据值的精确值计算以及一些汇总、求和计算等,具有足够的灵活性。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
通常情况下,异构数据库之间数据同步的难题主要集中在两个方面:在数据异构性上涉及了数据类型不同和数据表模式不同两个因素;在数据传播方向上是由下级系统向上级系统进行同步,由旧系统向新系统进行同步。而在现有技术中,数据库同步的产品通常或者对于异构数据库的支持较弱,或者不具备足够的灵活性。因此,本发明的实施例提供了一种数据同步方法及装置。
第一实施例
参见图1,本发明针对现有的问题,提供了一种数据同步方法,应用于多级异构数据库,该方法包括:
步骤101,获取目标数据库与所有源数据库之间的关联关系,所述关联关系至少包括所述目标数据库与所有源数据库之间的映射关系以及预设的第一数据转换公式。
其中,映射关系即每个源数据库与目标数据库之间的对应关系;第一数据转换公式即源数据库与目标数据库之间具体的数据对应关系,可以包括数据类型的转换,数据值的精确值计算以及一些汇总、求和计算等。
步骤102,在一预设的同步周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息。
优选地,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
其中,变化类型值即预设的代表变化类型的数值,比如插入操作的变化类型值为0,删除操作的变化类型值为1,更新操作的变化类型值为2等。
步骤103,在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令。
其中,根据源数据库的变化数据的标识信息以及源数据库与目标数据库之间的关联关系,生成针对目标数据库的数据同步指令,数据同步指令用于指示目标数据库根据关联关系,同步源数据库中的数据变化。
步骤104,将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
本发明的上述实施例中,无需改变数据库系统原有的程序逻辑,通过获取源数据库中变化数据的标识信息,再根据关联关系将变化数据的信息转换成针对目标数据库的数据同步指令,能够支持不同数据表模式的数据同步,对异构数据库的支持程度较强;本发明可独立主动设置数据同步周期,不受限于源数据库和目标数据库的同步周期,方便更改;且本发明中关联关系中的第一数据转换公式不仅可以是数据类型转换,还可以是数据值的精确值计算以及一些汇总、求和计算等,具有足够的灵活性。
第二实施例
参见图2,本发明的第二实施例提供了一种数据同步方法,应用于多级异构数据库,该方法包括:
步骤201,获取目标数据库中的每个待同步数据表与所有源数据库中的源数据表之间的映射关系以及第二数据转换公式。
其中,映射关系是待同步数据表与每一个源数据表之间的映射关系,第二数据转换公式是待同步数据表与每一个源数据表之间具体的数据对应关系,可以包括数据类型的转换,数据值的精确值计算以及一些汇总、求和计算等。
步骤202,对所有的所述第二数据转换公式进行分析计算,得到第一数据转换公式。
其中,对目标数据库的所有待同步数据表的第二数据转换公式进行分析计算,得到一个总的数据转换公式,即第一数据转换公式。
步骤203,获取每个源数据库与目标数据库之间的关联关系,关联关系至少包括源数据库中的每个源数据表与目标数据库中的待同步数据表之间的映射关系以及第一数据转换公式。
步骤204,在一预设的同步周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息。
优选地,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
步骤205,在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令。
步骤206,将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
下面以一个Oracle数据库中为例,介绍一下本实施例,表1和表2为作为源数据表的人事数据表,表3为作为待同步数据表的雇员信息表:
表1:
字段名 |
数据类型 |
备注 |
ID |
varchar(30) |
主键值--员工号 |
Xingming |
varchar(30) |
姓名 |
Dianhua |
varchar(15) |
电话 |
Dizhi |
varchar(100) |
地址 |
表2:
字段名 |
数据类型 |
备注 |
ID |
varchar(30) |
主键值--员工号 |
Zhiwei |
varchar(30) |
职位 |
Xingbie |
varchar(5) |
性别 |
表3:
字段名 |
数据类型 |
备注 |
staffId |
VARchar2(30) |
主键值---员工号 |
name |
VARchar2(30) |
姓名 |
telephone |
VARchar2(15) |
电话 |
address |
VARchar2(100) |
地址 |
age |
INT |
年龄 |
position |
VARchar2(30) |
职位 |
sex |
NUMBER(1) |
性别 |
其中,表3需要同时同步表1和表2的数据。
首先获取表3与表1之间的映射关系以及第二数据转换公式(比如第二数据转换公式为:xingming=name,dianhua=telephone,dizhi=address)以及,
表3与表2之间的映射关系以及第二数据转换公式(比如第二数据转换公式为:xingming=name,当前年份shengri中的年份=age,zhiwei=position,xingbie=sex);
再对表3的两个第二数据转换公式进行分析计算,得到第一数据转换公式{比如第一数据转换公式为:xingming=name,dianhua=telephone(表1),dizhi=address(表1),当前年份shengri中的年份=age(表1),zhiwei=position(表1),xingbie=sex(表1)}。
当检测到源数据库中数据发生变化时,获取源数据库中变化数据的标识信息,再根据关联关系将变化数据的信息转换成针对目标数据库的数据同步指令即可。
本发明的上述实施例中,通过对目标数据库中的待同步数据表的与所有源数据表之间的数据转换公式(第二数据转换公式)进行分析计算,得到该待同步数据表与所有源数据库之间的一个总的数据转换公式(第一数据转换公式),使数据同步的过程条理清晰,当源数据库中数据变化时间,通过第一数据转换公式直接可同步到目标数据库中,无需再逐级更改,减小了工作量,对异构数据库的支持程度较强。
第三实施例
参见图3,本发明的第三实施例提供了一种数据同步方法,应用于多级异构数据库,该方法包括:
步骤301,获取每个源数据库与目标数据库之间的关联关系,关联关系至少包括源数据库中的每个源数据表与目标数据库中的待同步数据表之间的映射关系以及第一数据转换公式。
步骤302,为每个源数据库分别创建一个控制表。
其中,控制表用于存储源数据库中的数据变化情况;控制表可以存储在源数据库中或者存储在数据代理中。
步骤303,在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,并将变化数据的标识信息存储在源数据库对应的控制表中。
优选地,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
步骤304,在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令。
步骤305,将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
下面以关系数据库管理系统(SQL Server)为例,介绍一下本实施例。
获取每个源数据库与目标数据库之间的关联关系之后,为每个数据库创建一个控制表,控制表结构可如表4所示:
表4:
其中,tableName为源数据表的表名,dataKey为主键值,data为数据变化时间,type为数据变化类型值。
在一预设的同步周期内,当检测到源数据库中的数据发生变化时,将变化数据所在数据表的表名、主键值、变化时间以及变化类型值分别存储在上述控制表中;
具体地,以人事信息表(表名为staff)为例,当检测到源数据库中的人事信息表中,在2015-5-5,09:23:46增加了一位员工,该员工的信息如表5所示:
表5:
则控制表中记录的信息如表6所示:
表6:
tableName |
dataKey |
date |
type |
staff |
031010200764 |
2015-5-509:23:46 |
1 |
然后,在同步周期内,根据关联关系以及控制表中记录的变化数据的标识信息,生成数据同步指令并将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
本发明的上述实施例中,目标数据库可以是多个,也可以是不同的数据表模式,根据每个目标数据库与源数据库之间的关联关系,将控制表中记录的变化数据转换成该目标数据库对应的数据同步指令即可。
本发明的上述实施例中,为源数据库创建控制表,在控制表中对同一个变化数据信息始终保持一个有效记录,无需针对每一个目标数据库均保持一个单独的记录,从而节约了数据库空间;且变化数据的关键信息都会记录到控制表中,可根据控制表中的表名和数据标识可以在对应源数据表中提取完整的数据信息。
第四实施例
参见图4,本发明的第四实施例提供了一种数据同步方法,应用于多级异构数据库,该方法包括:
步骤401,获取每个源数据库与目标数据库之间的关联关系,关联关系至少包括源数据库中的每个源数据表与目标数据库中的待同步数据表之间的映射关系以及第一数据转换公式。
步骤402,为每个源数据库分别创建一个控制表。
步骤403,在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,并将变化数据的标识信息存储在源数据库对应的控制表中。
步骤404,在同步周期内,根据变化数据所在源数据表的表名以及关联关系中的映射关系,确定对应的目标数据库中的待同步数据表;
其中,通过映射关系找到源数据表的表名对应的待同步数据表。
步骤405,根据变化数据所在源数据表的主键值、变化数据的变化类型值以及第一数据转换公式,生成待同步数据表对应的数据同步指令,并将变化数据的变化时间作为数据同步指令的下达时间。
其中,根据关联关系,先从源数据库中提取出变化数据要同步的数据字段信息,然后根据关联关系中的第一数据转换公式,生成待同步数据表对应的数据同步指令,第一数据转换公式包括数据类型的转换,数据值的精确值计算以及一些汇总、求和计算等。
由于各个数据库之间的数据同步周期不一定一致,将变化数据的变化时间作为数据同步指令的下达时间,目的是使目标数据库根据数据同步指令的下达时间执行与当前时间最接近的数据同步指令。
步骤406,将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
其中,根据数据同步指令构造出对应目标数据库的结构化查询语言(SQL)并发送给目的数据库,使目标数据执行数据同步指令。
下面以一个Oracle数据库中为例,介绍一下本实施例,表7为作为源数据表的人事数据表,表7为作为待同步数据表的雇员信息表:
表7:
字段名 |
数据类型 |
备注 |
ID |
varchar(30) |
主键值--员工号 |
Xingming |
varchar(30) |
姓名 |
Dianhua |
varchar(15) |
电话 |
Dizhi |
varchar(100) |
地址 |
Shengri |
varchar(15) |
生日 |
Zhiwei |
varchar(30) |
职位 |
Xingbie |
varchar(5) |
性别 |
Xueli |
varchar(30) |
学历 |
表8:
字段名 |
数据类型 |
备注 |
staffId |
VARchar2(30) |
主键值---员工号 |
name |
VARchar2(30) |
姓名 |
telephone |
VARchar2(15) |
电话 |
address |
VARchar2(100) |
地址 |
age |
INT |
年龄 |
position |
VARchar2(30) |
职位 |
sex |
NUMBER(1) |
性别 |
employedDate |
DATE |
入职时间 |
superior |
VARchar2(30) |
外键---领导员工号 |
rank |
NUMBER(2) |
工资水平 |
根据表7和表8可知,关联关系为:xingming对应name,dianhua对应telephone,dizhi对应address,shengri对应age,zhiwei对应position,xingbie对应sex,;根据关联关系,先从源数据库中提取出变化数据要同步的数据字段信息,然后根据关联关系中的第一数据转换公式,生成待同步数据表对应的数据同步指令,其中,xingming与name,dianhua与telephone,dizhi与address,,zhiwei与position,xingbie与sex之间数据需无需转换(第一数据转换公式可以为xingming=name),直接同步即可;而shengri与age之间是需要以当前年份为基准进行计算;
将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。其中,该数据同步指令对应的可拓展标记语言文件如下所示:
其中,对于生日到年龄的转换计算,根据关联关系描述的计算方式,以当前年份为基准进行计算。
本发明的上述实施例中,无需改变数据库系统原有的程序逻辑,根据关联关系,先从源数据库中提取出变化数据要同步的数据字段信息,然后根据关联关系中的第一数据转换公式,生成待同步数据表对应的数据同步指令并封装成相应的SQL,能够支持不同数据表模式的数据同步,对异构数据库的支持程度较强,且本发明中关联关系中的第一数据转换公式不仅可以是数据类型转换,还可以是数据值的精确值计算以及一些汇总、求和计算等,具有足够的灵活性。
本发明的上述实施例中,步骤406之后,该方法还包括:
获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言。
其中,根据数据同步指令的下达时间执行相应的SQL,使数据同步不受源数据库与目标数据库各自的数据同步周期影响。
本发明的上述实施例中,获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言的步骤之后,该方法还包括:
获取目标数据库对与当前时间最接近的数据同步指令对应的结构化查询语言的执行结果:
当执行结果为已执行时,删除控制表中对应的变化数据的标识信息。
其中,删除变化数据的标识信息目的是释放内存,节省数据空间。
第五实施例
参见图5,本发明的第四实施例还提供了一种数据同步装置,应用于多级异构数据库,该装置包括:
获取模块501,用于获取每个源数据库与目标数据库之间的关联关系,关联关系至少包括源数据库中的每个源数据表与目标数据库中的待同步数据表之间的映射关系以及第一数据转换公式。
标识获取模块502,用于在一预设的同步周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息。
生成模块503,用于在同步周期内,根据关联关系以及变化数据的标识信息,生成数据同步指令。
发送模块504,用于将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库。
本发明的上述实施例中,变化数据的标识信息至少包括:变化数据所在源数据表的表名、变化数据所在源数据表的主键值、变化数据的变化类型值和变化数据的变化时间。
本发明的上述实施例中,数据同步装置包括:
映射获取模块,用于在获取模块获取目标数据库与所有源数据库之间的关联关系之前,获取目标数据库中的每个待同步数据表与所有源数据库中的源数据表之间的映射关系以及第二数据转换公式。
分析模块,用于对所有的第二数据转换公式进行分析计算,得到第一数据转换公式。
本发明的上述实施例中,标识获取模块502具体包括:
创建子模块,用于为每个源数据库分别创建一个控制表;
存储子模块,用于在一预设周期内,当检测到源数据库中的数据发生变化时,获取变化数据的标识信息,并将变化数据的标识信息存储在源数据库对应的控制表中。
本发明的上述实施例中,生成模块503具体包括:
确定子模块,用于在同步周期内,根据变化数据所在源数据表的表名以及关联关系中的映射关系,确定对应的目标数据库中的待同步数据表。
指令生成子模块,用于根据变化数据所在源数据表的主键值、变化数据的变化类型值以及第一数据转换公式,生成待同步数据表对应的数据同步指令,并将变化数据的变化时间作为数据同步指令的下达时间。
本发明的上述实施例中,该装置还包括:
执行模块,用于在发送模块将数据同步指令封装成目标数据库对应的结构化查询语言,发送给目标数据库之后,
获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言。
本发明的上述实施例中,该装置还包括:
删除模块,用于在执行模块获取数据同步指令的下达时间,使目标数据库执行与当前时间最接近的数据同步指令对应的结构化查询语言之后,
获取目标数据库对与当前时间最接近的数据同步指令对应的结构化查询语言的执行结果:
当执行结果为已执行时,删除控制表中对应的变化数据的标识信息。
需要说明的是,本发明实施例提供的数据同步装置是应用上述方法的装置,即上述方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。