异构数据库的同步方法和应用系统转让专利

申请号 : CN201310482186.4

文献号 : CN104572672B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖凌浩蒋国新

申请人 : 北大方正集团有限公司方正信息产业控股有限公司北京北大方正电子有限公司

摘要 :

本发明提供一种异构数据库的同步方法和应用系统。部署在源数据库侧的同步处理器可以周期性地轮询同步变化表中记录的变化数据,将变化数据封装成数据流发送给部署在目标数据库侧的同步解析器。同步解析器在对该数据流进行解封装之后,可以根据预设的映射文件将源数据表中的变化数据映射为目标数据库中的目标数据表的数据结构,并根据变化数据中的变化类型值进行目标数据表的数据同步,进而可以完成异构数据库之间的数据同步。本发明,无需对现有异构数据库进行改变,只需要在同步解析器上部署不同的映射文件即可实现异构数据库之间的数据同步,实现简单,且易于扩展。

权利要求 :

1.一种异构数据库的同步方法,其特征在于,包括:

同步处理器在确定源数据库的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;

同步处理器在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;

传输器采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;

所述同步解析器接收所述同步处理器通过所述传输器发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步;

所述同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,还包括:所述同步处理器按照变化时间的先后顺序,对所述当前时间之前的具有相同的主键值的标识信息进行排序;

所述同步处理器保留所述具有相同的主键值的标识信息中变化时间最晚的标识信息,并删除所述具有相同的主键值的标识信息中的其它标识信息;

其中,若所述变化类型值为插入类型值或更新类型值,则所述同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,还包括:所述同步处理器根据主键值从源数据表中查找数据是否存在;

若存在,则所述同步处理器读取数据完整信息,所述数据完整信息包括字段名、字段值和数据类型;

相应的,所述同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据,包括:所述同步处理器根据所述数据完整信息、表名、主键值和变化类型值生成变化数据;

若不存在,则所述同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据,包括:所述同步处理器将所述变化类型值修改为删除类型值;

所述同步处理器根据表名、主键值和删除类型值生成变化数据。

2.根据权利要求1所述的方法,其特征在于,所述同步处理器在确定源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中之前,还包括:数据变化触发器捕获所述源数据表中发生变化的数据,所述数据变化触发器包括插入触发器、删除触发器和更新触发器。

3.根据权利要求1所述的方法,其特征在于,所述传输器采用预设的封装格式将所述变化数据封装为数据流,包括:所述传输器采用可扩展标记语言XML将所述变化数据封装为数据流;

所述同步解析器采用所述预设的封装格式对所述数据流解封装得到所述变化数据,包括:所述同步解析器采用XML对所述数据流解封装得到所述变化数据。

4.根据权利要求1~3中任一项所述的方法,其特征在于,所述映射文件,包括:所述源数据表的表名与所述目标数据表的表名之间的第一映射关系、所述源数据表中的字段名和数据类型与所述目标数据表中的字段名和数据类型之间的第二映射关系;

所述同步解析器根据预设的映射文件将所述变化数据映射为所述目标数据库中的目标数据表的数据结构,包括:所述同步解析器采用所述第一映射关系,将所述变化数据中包括的表名映射为所述目标数据表的表名;

所述同步解析器采用所述第二映射关系,将所述变化数据中包括的字段名映射为所述目标数据表中的字段名,并将所述变化数据中包括的字段值的数据类型映射为所述目标数据表中的字段值的数据类型。

5.根据权利要求4所述的方法,其特征在于,所述同步解析器根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步,包括:所述同步解析器从所述变化数据中提取变化类型值,根据所述变化数据中包含的主键值在所述目标数据表中查找是否存在数据,并根据查找结果和所述变化类型值进行目标数据库中目标数据表的数据同步。

6.根据权利要求5所述的方法,其特征在于,所述变化类型值为删除类型值,所述同步解析器根据查找结果和所述变化类型值进行目标数据库中目标数据表的数据同步,包括:若查找结果为不存在,则所述同步解析器放弃本次数据同步;

若查找结果为存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据删除同步;

或者,

所述变化类型值为插入类型值或更新类型值,所述同步解析器根据查找结果和所述变化类型值进行目标数据库中目标数据表的数据同步,包括:若查找结果为不存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据插入同步;

若查找结果为存在,则所述同步解析器将字段值组织为SQL执行数据更新同步。

7.根据权利要求6所述的方法,其特征在于,所述同步解析器根据查找结果和所述变化类型值进行目标数据库中目标数据表的数据同步之后,还包括:所述同步解析器在完成数据同步后,通过所述传输器向所述同步处理器发送同步结果通知消息;

所述同步处理器接收所述同步结果通知消息,并根据所述同步结果通知消息将同步成功的标识信息从所述同步变化表中删除。

8.一种应用系统,其特征在于,包括:依次连接的源数据库、同步处理器、传输器、同步解析器以及目标数据库;

所述同步处理器,用于在确定源数据库的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;

所述传输器,用于采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;

所述同步解析器,用于接收所述同步处理器通过所述传输器发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步;

其中,所述同步处理器,还用于在根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,按照变化时间的先后顺序,对所述当前时间之前的具有相同的主键值的标识信息进行排序;保留所述具有相同的主键值的标识信息中变化时间最晚的标识信息,并删除所述具有相同的主键值的标识信息中的其它标识信息;

其中,若所述变化类型值为插入类型值或更新类型值,则所述同步处理器用于根据主键值从源数据表中查找数据是否存在;

若存在,则所述同步处理器读取数据完整信息,所述数据完整信息包括字段名、字段值和数据类型;

根据所述数据完整信息、表名、主键值和变化类型值生成变化数据;

若不存在,所述同步处理器将所述变化类型值修改为删除类型值;

根据表名、主键值和删除类型值生成变化数据。

9.根据权利要求8所述的系统,其特征在于,还包括:

数据变化触发器,用于在所述同步处理器在确定源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中之前,捕获所述源数据表中发生变化的数据,所述数据变化触发器包括插入触发器、删除触发器和更新触发器。

10.根据权利要求8~9中任一项所述的系统,其特征在于,所述映射文件,包括:所述源数据表的表名与所述目标数据表的表名之间的第一映射关系、所述源数据表中的字段名和数据类型与所述目标数据表中的字段名和数据类型之间的第二映射关系;

所述同步解析器,具体用于采用所述第一映射关系,将所述变化数据中包括的表名映射为所述目标数据表的表名;采用所述第二映射关系,将所述变化数据中包括的字段名映射为所述目标数据表中的字段名,并将所述变化数据中包括的字段值的数据类型映射为所述目标数据表中的字段值的数据类型。

11.根据权利要求10所述的系统,其特征在于,所述同步解析器,具体用于从所述变化数据中提取变化类型值,根据所述变化数据中包含的主键值在所述目标数据表中查找是否存在数据;

若所述变化类型值为删除类型值,则若查找结果为不存在,则所述同步解析器放弃本次数据同步;若查找结果为存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据同步;

若所述变化类型值为插入类型值或更新类型值,则若查找结果为不存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据插入同步;若查找结果为存在,则所述同步解析器将字段值组织为SQL执行数据更新同步。

12.根据权利要求11所述的系统,其特征在于,所述同步解析器,还用于在完成数据同步后,通过所述传输器向所述同步处理器发送同步结果通知消息;

所述同步处理器,还用于接收所述同步结果通知消息,并根据所述同步结果通知消息将同步成功的标识信息从所述同步变化表中删除。

说明书 :

异构数据库的同步方法和应用系统

技术领域

[0001] 本发明涉及数据库技术,尤其涉及一种异构数据库的同步方法和应用系统。

背景技术

[0002] 随着计算机技术和网络技术的不断发展,数据库也由集中式向分布式演变。
[0003] 在分布式环境下,数据库同步技术作为维护各个数据库节点之间数据一致性的方法,成为保证系统性能和提高系统可靠性的关键技术。在现有技术中,针对同构数据库来说,源数据库可以检测其存储的数据是否发生变化,例如是否有数据更新,是否有数据删除,或者是否有数据增加。一旦发生变化,则源数据库可以将发生变化部分同步到目标数据库中。
[0004] 但是,在现有分布式环境下,还存在异构数据库之间需要进行数据同步的需求。因此,如何实现异构数据库之间的数据同步,成为亟待解决的问题。

发明内容

[0005] 本发明提供一种异构数据库的同步方法和应用系统,以实现异构数据库之间的数据同步。
[0006] 本发明提供一种异构数据库的同步方法,包括:
[0007] 同步处理器在确定源数据库的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;
[0008] 同步处理器在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;
[0009] 传输器采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;
[0010] 所述同步解析器接收所述同步处理器通过所述传输器发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步。
[0011] 相应的,本发明提供一种应用系统,包括:
[0012] 依次连接的源数据库、同步处理器、传输器、同步解析器以及目标数据库;
[0013] 所述同步处理器,用于在确定源数据库的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;
[0014] 所述传输器,用于采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;
[0015] 所述同步解析器,用于接收所述同步处理器通过所述传输器发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步。
[0016] 本发明异构数据库的同步方法和应用系统,无需对异构的源数据库和目标数据库进行任何改变,而只需要在源数据库和目标数据库之间部署同步处理器、传输器以及同步解析器。部署在源数据库侧的同步处理器可以周期性地轮询同步变化表中记录的变化数据,且该变化数据中包含有异构的目标数据库在进行数据同步时所需的表名、主键值和变化类型值,然后,同步处理器可以将变化数据封装成数据流发送给部署在目标数据库侧的同步解析器。同步解析器可以预存一映射文件,该映射文件可以描述源数据表和目标数据表之间数据结构差异的对应关系,因此,该同步解析器在对该数据流进行解封装之后,可以根据预设的映射文件将源数据表中的变化数据映射为目标数据库中的目标数据表的数据结构,并根据变化数据中的变化类型值进行目标数据表的数据同步,进而可以完成异构数据库之间的数据同步。本发明无需对现有异构数据库进行改变,只需要在同步解析器上部署不同的映射文件即可实现异构数据库之间的数据同步,实现简单,且易于扩展。

附图说明

[0017] 图1为本发明异构数据库的同步方法实施例一的流程图;
[0018] 图2为本发明异构数据库的同步方法实施例二的流程图;
[0019] 图3为本发明应用系统实施例的结构示意图。

具体实施方式

[0020] 图1为本发明异构数据库的同步方法实施例一的流程图,如图1所示,本实施例的方法,可以包括:
[0021] 步骤101、同步处理器在确定源数据库的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;
[0022] 步骤102、同步处理器在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;
[0023] 步骤103、传输器采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;
[0024] 步骤104、同步解析器接收所述同步处理器通过所述传输器发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库中目标数据表的数据同步。
[0025] 具体来说,本实施例在源数据库和目标数据库之间部署了同步处理器、传输器以及同步解析器,其中,同步处理器部署在源数据库一侧,同步解析器部署在目标数据库一侧,传输器则用于传输同步处理器和同步解析器之间的数据。
[0026] 同步处理器可以实时或者定时检测源数据库的源数据表中是否发生数据变化,所述的数据变化,例如可以是数据删除、数据更新、数据增加等。本实施例并不限定具体的检测方法。
[0027] 举例来说,本实施例可以采用数据变化触发器,来捕获源数据表中发生变化的数据,该数据变化触发器可以包括插入触发器、删除触发器和更新触发器。
[0028] 可以理解的,根据不同的需要,本领域技术人员还可以只部署其中的不同的触发器,或者扩展出其它类型的触发器以捕获其它类型的数据变化。
[0029] 该同步处理器既可以单独部署,也可以与源数据库一同部署。
[0030] 当同步处理器确定源数据表中发生数据变化时,则可以将源数据表中发生变化的数据的标识信息存储在同步变化表中。本实施例中,该同步变化表用于存储源数据表中发生变化的数据的标识信息。该标识信息至少可以包括源数据表的表名、变化数据在源数据表中的主键值、变化类型值、变化时间。该标识信息可以用于后续的异构数据库的同步。
[0031] 同步处理器可以以一定的轮询周期来定期地查看该同步变化表,该轮询周期例如可以采用一个定时器来实现。即,源数据库在轮询周期到达时,可以根据同步变化表中的变化时间从同步变化表中获取当前时间之前的标识信息,该当前时间即为系统时间。
[0032] 同步处理器在获取到变化时间在当前时间之前的标识信息之后,同步处理器即可根据获取的标识信息中的表名、主键值和变化类型值生成变化数据。
[0033] 可选的,在轮询周期内,对于具有相同主键值的数据,可能发生多次数据变化,例如先增加、再更新,或者先增加再删除。
[0034] 因此,为了更加准确地定位到该轮询周期内最终的数据变化状态,以便将数据的准确状态更新到目标数据库中,在同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,可以按照变化时间的先后顺序,对当前时间之前的具有相同的主键值的标识信息进行排序;保留具有相同的主键值的标识信息中变化时间最晚的标识信息,并删除该具有相同的主键值的标识信息中的其它标识信息,也即只保留该主键值的数据的最终变化状态。该操作还可以简化向同步解析器发送的变化数据。
[0035] 可选的,针对变化类型值为插入类型值或更新类型值的数据来说,有可能其已经被删除。
[0036] 因此,同步处理器在生成变化数据之前,还可以根据同步变化表中的主键值去源数据表中再次确认一下,以保证数据处理的准确性。
[0037] 具体地,同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,还可以包括:
[0038] 同步处理器根据主键值从源数据表中查找数据是否存在;
[0039] 若存在,则同步处理器读取数据完整信息,所述数据完整信息包括字段名、字段值和数据类型;
[0040] 相应的,同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据,可以具体为:
[0041] 同步处理器根据数据完整信息、表名、主键值和变化类型值生成变化数据;
[0042] 若再次确认发现,变化类型值为插入类型值或更新类型值的数据并不存在于源数据表中,则同步处理器根据获取的标识信息中的表名、主键值和变化类型值生成变化数据,可以具体为:
[0043] 同步处理器将变化类型值修改为删除类型值;
[0044] 同步处理器根据表名、主键值和删除类型值生成变化数据。
[0045] 经过上述过程得到变化数据后,同步处理器即可采用预设的封装格式将该变化数据封装为数据流,并通过传输器发送给同步解析器。举例来说,同步处理器可以采用可扩展标记语言(Extensible Markup Language,以下简称:XML)将变化数据封装为数据流。
[0046] 同步解析器接收同步处理器发送的数据流,采用与同步解析器所采用的相同的预设的封装格式对该数据流解封装得到变化数据。例如同样采用XML对所述数据流解封装得到所述变化数据。
[0047] 然后,同步解析器可以根据预设的映射文件将变化数据映射为该目标数据库中的目标数据表的数据结构,并根据变化数据中的变化类型值进行目标数据库中目标数据表的数据同步。
[0048] 一般来说,异构数据库之间的不同之处在于表名、字段名和数据类型不一致,因此,本实施例中的预设的映射文件中可以包括:源数据表与目标数据表之间的表名、字段名和数据类型之间的对应关系,从而可以将源数据库中的数据格式映射为目标数据库中的数据格式以进行数据同步。
[0049] 具体来说,该映射文件,例如可以采用初始化(以下简称:INI)文件,该映射文件可以包括:源数据表的表名与目标数据表的表名之间的第一映射关系、源数据表中的字段名和数据类型与目标数据表中的字段名和数据类型之间的第二映射关系;
[0050] 相应的,同步解析器根据预设的映射文件将所述变化数据映射为所述目标数据库中的目标数据表的数据结构,可以具体为:
[0051] 同步解析器采用所述第一映射关系,将变化数据中包括的表名映射为目标数据表的表名;
[0052] 同步解析器采用第二映射关系,将变化数据中包括的字段名映射为目标数据表中的字段名,并将变化数据中包括的字段值的数据类型映射为目标数据表中的字段值的数据类型。
[0053] 进而,同步解析器根据变化数据中的变化类型值进行目标数据库中目标数据表的数据同步,可以具体为:
[0054] 同步解析器从变化数据中提取变化类型值,根据变化数据中包含的主键值在目标数据表中查找是否存在数据,并根据查找结果和变化类型值进行数据同步。
[0055] 可选的,针对变化类型值为删除类型值的数据来说,由于需要对目标数据库中的已有数据进行操作。
[0056] 因此,若目标数据库中并不存在对应的数据,则进行删除操作将出现操作错误的问题,因此,针对变化类型值为删除类型值的数据,所述同步解析器根据查找结果和所述变化类型值进行数据同步,可以具体为:
[0057] 若查找结果为不存在,则同步解析器放弃本次数据同步;
[0058] 若查找结果为存在,则同步解析器将字段值组织为结构化查询语言(Structured Query Language,以下简称:SQL)执行数据同步;
[0059] 针对变化类型值为插入类型值或更新类型值的数据来说,如果目标数据库中对应位置已经存在数据,则无法进行数据插入,否则会出现操作错误的问题,因此,若变化类型值为插入类型值或更新类型值,则所述同步解析器根据查找结果和所述变化类型值进行数据同步,可以具体为:
[0060] 若查找结果为不存在,则同步解析器将字段值组织为SQL执行数据插入同步;
[0061] 若查找结果为存在,则同步解析器将字段值组织为SQL执行数据更新同步。
[0062] 在完成上述的数据同步之后,同步解析器可以通过传输器向同步处理器发送同步结果通知消息;
[0063] 相应的,同步处理器接收所述同步结果通知消息,并根据该同步结果通知消息将同步成功的标识信息从同步变化表中删除,而未同步成功的标识信息则可以得以保留,在下一个轮询周期可以再次被处理,以保证数据同步的准确性。
[0064] 本实施例,无需对异构的源数据库和目标数据库进行任何改变,而只需要在源数据库和目标数据库之间部署同步处理器、传输器以及同步解析器。部署在源数据库侧的同步处理器可以周期性地轮询同步变化表中记录的变化数据,且该变化数据中包含有异构的目标数据库在进行数据同步时所需的表名、主键值和变化类型值,然后,同步处理器可以将变化数据封装成数据流发送给部署在目标数据库侧的同步解析器。同步解析器可以预存一映射文件,该映射文件可以描述源数据表和目标数据表之间数据结构差异的对应关系,因此,该同步解析器在对该数据流进行解封装之后,可以根据预设的映射文件将源数据表中的变化数据映射为目标数据库中的目标数据表的数据结构,并根据变化数据中的变化类型值进行目标数据表的数据同步,进而可以完成异构数据库之间的数据同步。本实施例,无需对现有异构数据库进行改变,只需要在同步解析器上部署不同的映射文件即可实现异构数据库之间的数据同步,实现简单,且易于扩展。
[0065] 图2为本发明异构数据库的同步方法实施例二的流程图,如图2所示,本实施例采用一个具体的实施例进行技术方案的描述。
[0066] 假设源数据库类型是SQL SERVER,源数据表为用户表userInfo,该userInfo表结构如表1所示:
[0067] 表1
[0068]字段 类型 备注
id varchar(50) 用户标识
name varchar(50) 用户名
password varchar(50) 用户姓名
age int 用户年龄
[0069] 假设目标数据库类型是ORACLE,目标数据表为账户表account,该account表结构如表2所示:
[0070] 表2
[0071]字段 类型 备注
accountId VARCHAR2(50) 账户标识
accountName VARCHAR2(50) 账户名
password VARCHAR2(50) 账户姓名
age NUMBER(100) 账户年龄
[0072] 具体的,本实施例的方法可以包括:
[0073] 步骤201、在源数据库中添加同步变化表changeInfo。
[0074] 该同步变化表changeInfo如表3所示:
[0075] 表3
[0076]
[0077] 步骤202、为源数据表userInfo添加插入触发器。
[0078] 该插入触发器的一种可能的实现方式如下:
[0079]
[0080] 步骤203、为源数据表userInfo添加删除触发器。
[0081] 该删除触发器的一种可能的实现方式如下:
[0082]
[0083]
[0084] 步骤204、为源数据表表userInfo添加更新触发器。
[0085] 该更新触发器的一种可能的实现方式如下:
[0086]
[0087] 当对源数据表进行若干操作后,上述三种触发器即可自动将变化的数据信息记录到同步变化表changeInfo中。
[0088] 步骤205、连接源数据库和目标数据库。
[0089] 本实施例可以通过系统提供的可视化界面,例如选用Java数据库连接(Java DataBase Connectivity,以下简称:JDBC)作为数据库连接技术,连接源数据库和目标数据库。
[0090] 步骤206、设置源数据表和目标数据表的映射关系。
[0091] 本实施例可以通过系统提供的可视化界面,设置源数据表与目标数据表的映射关系信息,并保存在INI格式的映射文件中,该映射文件,例如可以为:
[0092] [userInfo]
[0093] tableName=account
[0094] id=#accountID@String
[0095] name=accountName@String
[0096] password=password@String
[0097] age=age@Integer
[0098] 源数据表userInfo对应目标数据表的表名account,源数据表userInfo中的字段id对应目标数据表account中的字段accountID,且数据类型为字符串,源数据表userInfo中的字段name对应目标数据表account中的字段accountName,且数据类型为字符串,源数据表userInfo中的字段password对应目标数据表account中的字段password,且数据类型为字符串,源数据表userInfo中的字段age对应目标数据表account中的字段age,且数据类型为整型。
[0099] 步骤207、同步处理器轮询同步变化表,获取当前查询时刻之前的变化数据的标识信息集合。所获取的标识信息例如下表4所示:
[0100] 表4
[0101]
[0102] 步骤208、同步处理器对获取的标识信息进行分析处理,以获得同一数据的最后状态,并更新同步变化表。
[0103] 表4所示的同步变化表经过步骤208处理之后,得到如下所示的表5,如表5所示,例如针对主键值为200701031的数据,保留15:09:50的最新状态,而将15:09:36的老状态置位已更新的状态,即不再进行同步处理,或者也可以直接删除。
[0104] 表5
[0105]
[0106] 步骤209、同步处理器对于非删除变化类型且源数据表中存在的数据,获取数据完整信息。
[0107] 例如,针对表5中,变化类型为0的增加数据和变化类型为2的增加数据,获取完整数据完整信息如下表6所示:
[0108] 表6
[0109]id name password age
200701030 Lily 111111 22
200701032 Tom 222222 23
[0110] 步骤210、传输器将变化数据封装为XML数据流。
[0111] 封装后的数据流例如下述所示:
[0112]
[0113]
[0114] 步骤211、同步解析器将接收的XML数据流进行解封装,并利用映射关系进行数据结构的映射。
[0115] 步骤212、同步解析器从变化数据中提取出属性action的值得知变化类型,根据主键值和数据表名从目标数据库的目标数据表中查找数据是否存在,根据查找结果将字段值组织为对应的SQL语句执行。
[0116] 步骤213、同步解析器通过传输器向同步处理器反馈同步结果通知消息。
[0117] 步骤214、同步处理器在同步变化表中将同步成功的数据的同步状态更新为已同步或者删除。
[0118] 本实施例,可以实现对支持不同数据变化类型的关系数据库以及同构或者异构数据表之间的数据同步。通过采用数据变化触发器和同步变化表的机制,可以避免修改原应用系统的表结构;通过采用XML和INI两种文件将异构数据的差异性描述在配置文件中,再采用标准的解析逻辑实现这种差异的转换,实现了数据同步的通用性。同时,同步变化表中记录的数据集合在每次轮询阶段会被删除一部分,最大程度的减少了资源占用。
[0119] 图3为本发明应用系统实施例的结构示意图,如图3所示,本实施例的应用系统可以包括:依次连接的源数据库11、同步处理器12、传输器13、同步解析器14以及目标数据库15;
[0120] 所述同步处理器12,用于在确定源数据库11的源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中,所述标识信息至少包括所述源数据表的表名、变化数据在所述源数据表中的主键值、变化类型值、变化时间;在轮询周期到达时,根据所述同步变化表中的变化时间从所述同步变化表中获取当前时间之前的标识信息,并根据获取的标识信息中的表名、主键值和变化类型值生成变化数据;
[0121] 所述传输器13,用于采用预设的封装格式将所述变化数据封装为数据流,并发送给同步解析器;
[0122] 所述同步解析器14,用于接收所述同步处理器12通过所述传输器13发送的数据流,采用所述预设的封装格式对所述数据流解封装得到所述变化数据,根据预设的映射文件将所述变化数据映射为目标数据库15中的目标数据表的数据结构,并根据所述变化数据中的变化类型值进行目标数据库15中目标数据表的数据同步。
[0123] 进一步的,该应用系统,还可以包括:
[0124] 数据变化触发器16,用于在所述同步处理器12在确定源数据表中发生数据变化时,将所述源数据表中发生变化的数据的标识信息存储在同步变化表中之前,捕获所述源数据表中发生变化的数据,所述数据变化触发器包括插入触发器、删除触发器和更新触发器。
[0125] 进一步的,同步处理器12,还用于在根据获取的标识信息中的表名、主键值和变化类型值生成变化数据之前,按照变化时间的先后顺序,对所述当前时间之前的具有相同的主键值的标识信息进行排序;保留所述具有相同的主键值的标识信息中变化时间最晚的标识信息,并删除所述具有相同的主键值的标识信息中的其它标识信息。
[0126] 进一步的,映射文件,可以包括:所述源数据表的表名与所述目标数据表的表名之间的第一映射关系、所述源数据表中的字段名和数据类型与所述目标数据表中的字段名和数据类型之间的第二映射关系;
[0127] 相应的,同步解析器14,具体用于采用所述第一映射关系,将所述变化数据中包括的表名映射为所述目标数据表的表名;采用所述第二映射关系,将所述变化数据中包括的字段名映射为所述目标数据表中的字段名,并将所述变化数据中包括的字段值的数据类型映射为所述目标数据表中的字段值的数据类型。
[0128] 进一步的,同步解析器14,具体用于从所述变化数据中提取变化类型值,根据所述变化数据中包含的主键值在所述目标数据表中查找是否存在数据;若所述变化类型值为删除类型值,则若查找结果为不存在,则所述同步解析器放弃本次数据同步;若查找结果为存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据同步;若所述变化类型值为插入类型值或更新类型值,则若查找结果为不存在,则所述同步解析器将字段值组织为结构化查询语言SQL执行数据插入同步;若查找结果为存在,则所述同步解析器将字段值组织为SQL执行数据更新同步。
[0129] 进一步的,同步解析器14,还用于在完成数据同步后,通过传输器13向同步处理器12发送同步结果通知消息;相应的,同步处理器12,还用于接收所述同步结果通知消息,并根据所述同步结果通知消息将同步成功的标识信息从所述同步变化表中删除。
[0130] 本实施例的应用系统,用于执行图1或者图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0131] 本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0132] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。