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

一种基于表结构关系的数据同步方法及装置

文献发布时间:2023-06-19 12:24:27


一种基于表结构关系的数据同步方法及装置

技术领域

本发明涉及金融科技(Fintech)领域,尤其涉及一种基于表结构关系的数据同步方法及装置。

背景技术

随着计算机技术的发展,越来越多的技术(例如:区块链、云计算或大数据)应用在金融领域,传统金融业正在逐步向金融科技转变,大数据技术也不例外,但由于金融、支付行业的安全性、实时性要求,也对大数据技术中索引方法提出了更高的要求。

目前,第一系统所生成的索引与第二系统内的数据表是相对应的关系,即一个数据表对应一个索引,在第二系统对应的第二数据库中,在数据表的数据发生变化时,第二数据库会产生日志记录,如二进制日志,即binlog日志,也就是说,一个日志记录相当于一个binlog日志,为了使第一系统的第一数据库和第二系统的第二数据库的数据保持一致,第二系统会将binlog日志发送至第一系统,以使第一系统根据binlog日志,将第一数据库的数据表进行对应更改。

但是,因为一个数据表对应一个索引,所以一个binlog日志只能更改第一数据库中一个数据表,无法通过一个binlog日志将第一数据库中在结构上,与binlog日志记录的数据表存在关联关系的所有数据表进行更改,因此无法体现出数据库中表结构关系。例如,binlog日志中包括数据表信息a(如表名)、字段名b(如“用户名”)和语句指令c(将用户名“张*”修改为“李*”),若在第一系统中包括两个数据表A和B均包括字段名b,则无法通过一个binlog日志对两张表A和B中字段名b的字段值c对应更改,只能将binlog日志对应索引的表(如binlog日志对应索引的表为A)进行更改。

综上所述,现有技术未能体现出数据库中表结构关系,第一系统在索引时不够全面,需要多个binlog日志完成索引的表的更改,在保证第一系统和第二系统所对应的数据库的数据保持一致性时效率低,资源消耗大,因此,现需要一种索引方法,可以实现根据一个binlog日志,将第一数据库中与日志记录存在关联关系的数据表进行更改,提升第一系统和第二系统所对应的数据库的数据保持一致性的效率。

发明内容

本发明实施例提供一种基于表结构关系的数据同步方法及装置,用于实现根据一个日志记录,将第一数据库中与日志记录存在关联关系的数据表进行更改,体现出表结构关系,提升数据同步的效率。

第一方面,本发明实施例提供一种基于表结构关系的数据同步方法,包括:

第一系统获取第二系统针对第二数据库的日志记录;所述第一系统中的第一数据库与所述第二数据库通过索引方式关联数据表;

针对任一日志记录,所述第一系统确定关联关系配置中的存在关联关系的数据表中是否包含所述日志记录中的第一数据表;所述关联关系配置包括所述第二数据库中存在关联关系的数据表和存在关联关系的数据表中的关联字段名;

若包含,则所述第一系统根据所述关联关系配置确定所述日志记录中第一数据表为第一子表或第一父表,得到与所述第一子表或所述第一父表具有关联关系的第二数据表;

所述第一系统基于所述日志记录对所述第一数据库中的第一数据表进行数据同步;并基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步。

本发明通过包括第二数据库表结构关系的关联关系配置来确定待更改数据的第二数据表,具体的,根据关联关系配置包括的第二数据库中存在关联关系的数据表和存在关联关系的数据表中的关联字段名,其中,关联关系为父子表的关系,可以确定日志记录中第一数据表的标识(如表名)是否存在于关联关系配置中,以及第一数据表的角色(第一子表或第一父表),进而得到与第一子表或第一父表存在关联关系的待更改数据的第二数据表,然后对第二数据表进行数据同步,从而实现通过一个日志记录,在第一系数据库中,确定出待更改的一个或多个与日志记录的第一数据表存在关联关系的第二数据表,以此提升第一系统确待更改的第二数据表的全面性,体现出了表结构关系,在确定出确待更改的第二数据表之后,对第二数据表进行数据同步,提升数据同步的效率。

可选的,针对任一日志记录,若包含,则所述第一系统根据所述关联关系配置确定所述日志记录中第一数据表为第一子表或第一父表,得到与所述第一子表或所述第一父表具有关联关系的第二数据表,包括:

所述第一系统若确定所述存在关联关系的数据表中包含所述日志记录中的第一数据表,则确定所述日志记录中的字段名包含在所述存在关联关系的数据表中的关联字段名中;

所述第一系统根据所述字段名和所述存在关联关系的数据表中的关联字段名确定所述第一数据表为第一子表或第一父表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定与所述第一子表或所述第一父表具有关联关系的第二数据表。

上述技术方案中,关联关系为父子表的关系,如A表为B表的子表或父表等,先确定第一数据表为第一子表或第一父表,进而根据数据表标识确定与第一子表或第一父表具有关联关系的第二数据表,也就是将第一子表的父表或第一父表的子表确定为第二数据表。以此体现出表结构关系,提升第一系统确待更改的第二数据表的全面性。

可选的,所述第一系统根据所述第二数据库中存在关联关系的数据表确定与所述第一子表或所述第一父表具有关联关系的第二数据表,包括:

基于所述日志记录中的字段名,所述第一系统在确定所述第一数据表为所述第一子表时,根据所述第二数据库中存在关联关系的数据表确定所述第一子表的第二父表,将所述第二父表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二父表具有关联关系的其他数据表,若存在,则将与所述第二父表具有关联关系的其他数据表确定为第二数据表;

所述第一系统在确定所述第一数据表为所述第一父表时,根据所述第二数据库中存在关联关系的数据表确定所述第一父表的第二子表,将所述第二子表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二子表具有关联关系的其他数据表,若存在,则将与所述第二子表具有关联关系的其他数据表确定为第二数据表。

上述技术方案中,针对任一第一数据表,存在的关联关系可能包括很多层,如第一数据表存在父表,第一数据表的父表还包括父表,即第一数据表的父表的父表,类似于祖孙三代的关系,因此,在确定第一数据表的父表或子表之后,根据其父表或子表,再确定父表或子表的父表或子表,直至确定出所有存在关联关系的第二数据表,以此提升第一系统确待更改的第二数据表的全面性。

可选的,所述关联关系配置是通过如下方式得到的,包括:

所述第一系统接收所述第二系统发送的配置文件;所述配置文件是所述第二系统根据所述第二数据库中各数据表之间的关联关系和所述第二数据库中各数据表的关联字段名确定的;其中,若所述第二数据库中的第三数据表的主键字段为所述第二数据库中的第四数据表的字段时,则确定所述第三数据表与所述第四数据表之间存在关联关系,并将所述主键字段确定为所述第四数据表的关联字段名;

所述第一系统根据所述配置文件确定所述关联关系配置。

上述技术方案中,关联关系配置是根据配置文件确定的,配置文件体现出了第二数据库的表结构关系,具体的,根据字段来确定是否存在关联关系,根据主键确定关联字段,以此体现出表结构关系。

可选的,所述配置文件是所述第二系统通过第一建模工具确定所述第二数据库中各数据表的关系图;或所述第二系统通过第二建模工具确定的所述第二数据库中各数据表的关系代码;或所述第二系统根据所述各数据表之间的关联关系、所述各数据表的关联字段名和文件生成工具确定的关系表格。

上述技术方案中,给出了三种形式的配置文件,针对关系图,形象的体现出了表结构关系,针对关系代码,便于第一系统进行分析,针对关系表格,直观的体现了表结构关系,第一系统可以针对上述任一形式的配置文件确定关联关系配置,以此增加确定关联关系配置的灵活性。

可选的,所述第一系统基于所述日志记录对所述第一数据库中的第一数据表进行数据同步之前,还包括:

将所述日志记录存储于缓存队列中;

基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步之前,还包括:

从所述缓存队列中获取预设数量的所述日志记录。

上述技术方案中,日志记录是在缓存队列中获取的,通过获取预设数量的日志记录,以避免第一系统多次向缓存队列请求日志记录,减少第一系统与缓存队列的交互次数,降低资源消耗。

可选的,第一系统若对第一数据库中的第一数据表进行数据同步失败,则将日志记录写入第三数据库;

所述第一系统判断所述日志记录写入所述第三数据库是否成功,若是,则根据预设时间执行所述第三数据库中的日志记录;

若否,则所述第一系统将缓存队列中的偏移量回退至所述日志记录。

上述技术方案中,写入失败等异常情况,在将日志记录写入第一数据库失败时,将日志记录存储至第三数据库,防止日志记录丢失,然后根据预设时间重试日志记录,以增加数据同步的成功率,若将日志记录写入第三数据库失败,则证明第三数据库异常,将缓存队列中的偏移量回退至日志记录,防止日志记录丢失,数据同步出现异常。

第二方面,本发明实施例提供一种基于表结构关系的数据同步装置,包括:

获取模块,用于获取第二系统针对第二数据库的日志记录;所述第一系统中的第一数据库与所述第二数据库通过索引方式关联数据表;

处理模块,用于针对任一日志记录,确定关联关系配置中的存在关联关系的数据表中是否包含所述日志记录中的第一数据表;所述关联关系配置包括所述第二数据库中存在关联关系的数据表和存在关联关系的数据表中的关联字段名;

若包含,则根据所述关联关系配置确定所述日志记录中第一数据表为第一子表或第一父表,得到与所述第一子表或所述第一父表具有关联关系的第二数据表;

基于所述日志记录对所述第一数据库中的第一数据表进行数据同步;并基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步。

可选的,所述处理模块具体用于:

若确定所述存在关联关系的数据表中包含所述日志记录中的第一数据表,则确定所述日志记录中的字段名包含在所述存在关联关系的数据表中的关联字段名中;

根据所述字段名和所述存在关联关系的数据表中的关联字段名确定所述第一数据表为第一子表或第一父表;

根据所述第二数据库中存在关联关系的数据表确定与所述第一子表或所述第一父表具有关联关系的第二数据表。

可选的,所述处理模块具体用于:

基于所述日志记录中的字段名,所述第一系统在确定所述第一数据表为所述第一子表时,根据所述第二数据库中存在关联关系的数据表确定所述第一子表的第二父表,将所述第二父表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二父表具有关联关系的其他数据表,若存在,则将与所述第二父表具有关联关系的其他数据表确定为第二数据表;

所述第一系统在确定所述第一数据表为所述第一父表时,根据所述第二数据库中存在关联关系的数据表确定所述第一父表的第二子表,将所述第二子表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二子表具有关联关系的其他数据表,若存在,则将与所述第二子表具有关联关系的其他数据表确定为第二数据表。

可选的,所述处理模块具体用于:

接收所述第二系统发送的配置文件;所述配置文件是所述第二系统根据所述第二数据库中各数据表之间的关联关系和所述第二数据库中各数据表的关联字段名确定的;其中,若所述第二数据库中的第三数据表的主键字段为所述第二数据库中的第四数据表的字段时,则确定所述第三数据表与所述第四数据表之间存在关联关系,并将所述主键字段确定为所述第四数据表的关联字段名;

根据所述配置文件确定所述关联关系配置。

可选的,所述配置文件是所述第二系统通过第一建模工具确定所述第二数据库中各数据表的关系图;或所述第二系统通过第二建模工具确定的所述第二数据库中各数据表的关系代码;或所述第二系统根据所述各数据表之间的关联关系、所述各数据表的关联字段名和文件生成工具确定的关系表格。

可选的,所述处理模块还用于:

基于所述日志记录对所述第一数据库中的第一数据表进行数据同步之前,将所述日志记录存储于缓存队列中;

基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步之前,从所述缓存队列中获取预设数量的所述日志记录。

第三方面,本发明实施例还提供一种计算机设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述基于表结构关系的数据同步方法。

第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述基于表结构关系的数据同步方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种系统架构示意图;

图2为本发明实施例提供的一种基于表结构关系的数据同步方法的流程示意图;

图3为本发明实施例提供的一种数据表的示意图;

图4为本发明实施例提供的一种关系图的示意图;

图5为本发明实施例提供的一种关系代码的示意图;

图6为本发明实施例提供的一种关系表格的示意图;

图7为本发明实施例提供的一种关联关系配置的示意图;

图8为本发明实施例提供的一种基于表结构关系的数据同步方法的流程示意图;

图9为本发明实施例提供的一种基于表结构关系的数据同步装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在分布式系统架构中,各系统对应的数据库中数据表的数据是一致的,当某一数据库的数据表发生变化时,会产生日志记录,用于指示其他数据库中的数据表对应更改,各数据库中的数据表通过索引建立对应关系。其中,日志记录包括二进制日志,即binlog日志。

举例来说,日志记录中包括数据发生变化的表名,字段名、键名和新数据,其中,表名用于定位发生数据变化的数据表,字段名和键名用于定位数据表中发生数据变化的单元格位置,例如,表名为A,字段名为a1,键名为a`1,则单元格位置在A数据表中,字段名为a1的列,键名为a`1的行。

在现有数据中,一个日志记录中的表名只能索引到一个对应的表,例如,第一数据库甲和第二数据库乙,当第二数据库乙中A数据表发生变化时,则通过索引更改第一数据库甲中的A数据表,无法更改其他数据表,如A数据表存在具有关联关系的B表,即A数据表和B数据表中包括同样的字段名,则根据日志记录只更改A数据表,并不会更改B数据表,既无法体现出数据表的结构关系,也无法全面的索引到与日志记录中数据表存在关联关系的其他数据表。

因此,现需要一种数据同步的方法,来体现出表结构关系,实现根据一个日志记录,将第一数据库中与日志记录存在关联关系的数据表进行更改,提升数据同步的效率。

其中,索引可以通过ES(Elasticsearch,搜索与数据分析引擎)来实现,即第一数据库可以为Elasticsearch数据库,本发明实施例仅给出一种可实施的方法,不对此进行具体限定。

图1示例性的示出了本发明实施例所适用的一种系统架构,该系统架构包括服务器100,该服务器100可以包括处理器110、通信接口120和存储器130。

其中,通信接口120用于使各系统进行日志记录传输。

处理器110是服务器100的控制中心,利用各种接口和路线连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。

存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。

基于上述描述,图2示例性的示出了本发明实施例提供的一种基于表结构关系的数据同步方法的流程示意图,该流程可由基于表结构关系的数据同步装置执行。

如图2所示,该流程具体包括:

步骤210,第一系统获取第二系统针对第二数据库的日志记录。

本发明实施例中,第一系统中的第一数据库与第二数据库通过索引方式关联数据表,第一系统可以先将第二系统发送的日志记录存储在缓存队列中,然后第一系统在缓存队列中进行加载。

步骤220,针对任一日志记录,所述第一系统确定关联关系配置中的存在关联关系的数据表中是否包含所述日志记录中的第一数据表。

本发明实施例中,关联关系配置包括所述第二数据库中存在关联关系的数据表和存在关联关系的数据表中的关联字段名。关联关系配置是第一系统根据第二系统发送的配置文件确定的,配置文件中包括第二数据库中表结构关系。

步骤230,若包含,则所述第一系统根据所述关联关系配置确定所述日志记录中第一数据表为第一子表或第一父表,得到与所述第一子表或所述第一父表具有关联关系的第二数据表。

本发明实施例中,存在关联关系的数据表中,关联关系指的是父表与对应子表的关系,以此,若确定第一数据表为第一子表,则确定第一子表的父表为第二数据表,若确定第一数据表为第一父表,则确定第一父表的子表为第二数据表。

步骤240,所述第一系统基于所述日志记录对所述第一数据库中的第一数据表进行数据同步;并基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步。

本发明实施例中,第一系统在确定出第二数据表之后,基于日志记录的内容,对第二数据表进行数据同步,保证第一数据库和第二数据库的数据一致性。

在步骤210中,对于获取日志记录,一种可实施的方式,第一系统逐一向第二系统请求日志记录日志,例如,请求第一个日志记录,在第一个日志记录处理完成后,向第二系统请求第二个日志记录。

另一种可实施的方式,将第二系统发送的日志记录日志存储至缓存日志记录,然后第一系统逐一向缓存日志记录请求日志记录,例如,第二系统生成两个日志记录,并向第一系统进行发送,第一系统将两个日志记录存储至缓存日志记录,然后逐一向缓存日志记录请求日志记录。

在本发明实施例中,第一系统基于日志记录对第一数据库中的第一数据表进行数据同步之前,将日志记录存储于缓存队列中,相当于在获取日志记录之前,将日志记录存储至缓存队列,然后从缓存队列中获取预设数量的所述日志记录。以减少向缓存队列请求日志记录的请求次数,降低资源消耗。

在步骤220中,关联关系配置是根据配置文件确定的,配置文件是第二系统确定。具体的,第一系统接收第二系统发送的配置文件,然后第一系统根据配置文件确定关联关系配置。其中,配置文件是第二系统根据第二数据库中各数据表之间的关联关系和第二数据库中各数据表的关联字段名确定的。

进一步地,若第二数据库中的第三数据表的主键字段为第二数据库中的第四数据表的字段时,则确定第三数据表与第四数据表之间存在关联关系,并将主键字段确定为所述第四数据表的关联字段名。

举例来说,图3示例性的示出了一种数据表的示意图,如图3所示,第二数据库中包括3个数据表,分别为作者表、书籍表和章节表,其中,书籍表(相当于第四数据表)中的字段名(作者编码)是作者表(相当于第三数据表)的主键字段(作者编码),则书籍表和作者表存在关联关系,且针对于书籍表,其字段名“作者编码”为关联字段名。

又如,针对作者表,作者表(相当于第四数据表)中的字段名(书籍编码)是书籍表(相当于第三数据表)的主键字段(书籍编码),则书籍表和作者表存在关联关系,且针对于作者表,其字段名“书籍编码”为关联字段名。

再如,针对章节表,章节表(相当于第四数据表)中的字段名(书籍编码)是书籍表(相当于第三数据表)的主键字段(书籍编码),则书籍表和章节表存在关联关系,且针对于章节表,其字段名“书籍编码”为关联字段名。

在一种可实施的方式中,若第二数据库中的第三数据表的字段与第二数据库中的第四数据表的字段相同时,则确定第三数据表与第四数据表之间存在关联关系,并将相同字段确定为数据表的关联字段名。

针对配置文件,可以为不同的形式的文件,如图、表格和代码等形式。

进一步地,配置文件是第二系统通过第一建模工具确定所述第二数据库中各数据表的关系图;或第二系统通过第二建模工具确定的第二数据库中各数据表的关系代码;或第二系统根据各数据表之间的关联关系、各数据表的关联字段名和文件生成工具确定的关系表格。

其中,第一建模工具可以为PowerDesigner(数据建模),图4示例性的示出了一种关系图的示意图,如图4所示,作者表与书籍表存在关联关系,书籍表和章节表存在关联关系。

第二建模工具可以为Enterprise Architect(建模软件),图5示例性的示出了一种关系代码的示意图,如图5所示,章节表中包括非关联字段名章节编码、章节名称,关联字段名为书籍编码,章节表与数据表存在关联关系。书籍表中包括非关联字段名书籍编码、书籍名称,关联字段名为作者编码,书籍表与作者表存在关联关系。作者表中包括非关联字段名作者编码、作者名称,关联字段名为书籍编码,作者表与书籍表存在关联关系。

图6示例性的示出了一种关系表格的示意图,如图6所示,包括作者表格、书籍表格和章节表格,其中,作者表与书籍表存在关联关系,作者表的关联字段名为书籍编码。书籍表与作者表存在关联关系,书籍表的关联字段名为作者编码。章节表与书籍表存在关联关系,章节表的关联字段名为书籍编码。

本发明实施例中,第一系统通过对配置文件进行预处理后,确定关联关系配置,具体的,第一系统在接收到配置文件之后,对其进行程序识别、读取、加工、提炼关联关系、提炼关联字段名等预处理方式确定关联关系配置,其中,预处理的方式与配置文件的形式而定的。

例如,若配置文件为关系图,则可以通过提炼关联关系、提炼关联字段名确定关联关系和关联字段名。若配置文件为关系代码,则可以通过程序识别确定关联关系和关联字段名。若配置文件为关系表格,则可以通过读取、加工、表格分割、提炼关联关系、提炼关联字段名确定关联关系和关联字段名。

对于关联关系配置,本发明实施例中将关联关系确定为父子表的关系,根据上述图4至图6进行举例,图7示例性的示出了一种关联关系配置的示意图,如图7所示,针对书籍表,在书籍表与章节表之间的关联关系中,书籍表为父表,章节表为子表,关联字段名为“书籍编码”,在书籍表与作者表之间的关联关系中,书籍表为父表,作者表为子表,关联字段名为“书籍编码”。

针对作者表,在作者表与书籍表之间的关联关系中,作者表为父表,书籍表为子表,关联字段名为“作者编码”。

在一种可实施的方式中,关联关系配置也可以为数据表对应的索引,例如,在作者表与书籍表之间的关联关系中,将作者表的索引作为父表,书籍表的索引为子表,关联字段名为“作者编码”,在此不再做其他表格的赘述,且不作具体限定。

在一种可实施的方式中,对任一数据表的关联字段名,可以由编程人员自定义备注说明。根据上述图5进行举例,根据第二数据库中的表结构关系代码,编程人员在作者表代码“COMMENT”中进行备注描述“$$BOOK;BOOK_CODE”,以指示作者表与书籍表存在关联关系,关联字段名为“书籍编码”。

根据上述图6进行举例,根据第二数据库中的表结构生成表格后,编程人员在章节表的行列中进行备注描述“书籍表:书籍编码”,以指示章节表与书籍表存在关联关系,关联字段名为“书籍编码”。

在本发明实施例中,给出了通过主键确定关联关系和关联字段名的技术方案,在另一种可实施的方式中,也可以根据外键和其他关联键确定关联关系和关联字段名,在此不作具体限定。

第一系统在确定关联关系配置后,可以直接根据第一数据表的标识(如表名)确定关联关系配置中的存在关联关系的数据表中是否包含日志记录中的第一数据表。

本发明实施例中,由图7可知,关联关系配置中包括存在关联关系的数据表和关联字段名,因此,可以根据第一数据表的表名确定日志的字段名包含在关联关系配置中,在一种可实施的方式中,也可以直接根据字段名来确定第一数据表是否包含在关联关系配置中。

在步骤230中,若确定存在关联关系的数据表中包含第一数据表,则确定日志记录中的字段名包含在存在关联关系的数据表中的关联字段名中,进而根据字段名确定出第一数据表在关联关系中的具体角色,然后确定出与之具有关联关系的其他数据表。

进一步地,第一系统根据字段名和存在关联关系的数据表中的关联字段名确定第一数据表为第一子表或第一父表,根据第二数据库中存在关联关系的数据表确定与第一子表或第一父表具有关联关系的第二数据表。

根据上述图7进行举例,若日志记录为:“书籍表,书籍编码,编码号3,xx”,其含义为第二数据库中,书籍表的书籍编码的列,编码号3的行对应的单元格信息更改为“xx”。

根据表名“书籍表”可以确定出“书籍表”在关联关系配置中既为父表也为子表,然后确定出与“书籍表”具有关联关系的“作者表”和“章节表”。

对于表结构,可能包括很多层关联关系,如A数据表是B数据表的父表,B数据表是C数据表的父表,C数据表是D数据表的父表,以此类推,可以包括很多层关联关系,因此,在本发明实施例中,基于日志记录的字段名,需要通过确定出的子表或父表再次确定,直至确定出所有具有关联关系的数据表。

具体的,基于日志记录中的字段名,第一系统在确定第一数据表为第一子表时,根据第二数据库中存在关联关系的数据表确定第一子表的第二父表,将第二父表确定为第二数据表,再根据第二数据库中存在关联关系的数据表确定是否存在与第二父表具有关联关系的其他数据表,若存在,则将与第二父表具有关联关系的其他数据表确定为第二数据表;

所述第一系统在确定第一数据表为第一父表时,根据第二数据库中存在关联关系的数据表确定第一父表的第二子表,将第二子表确定为第二数据表,再根据第二数据库中存在关联关系的数据表确定是否存在与第二子表具有关联关系的其他数据表,若存在,则将与第二子表具有关联关系的其他数据表确定为第二数据表。

举例来说,日志记录的字段名为s,若确定日志记录的第一数据表x为父表,则在关联关系配置中确定第一数据表x的子表y,然后再根据表y在关联关系配置中确定表y的子表为表z,需要说明的是,表x、表y和表z的关联字段名均为s,由此基于日志的字段名,确定出与字段名对应数据表具有关联关系的所有数据表。

在步骤240中,第一系统在确定出一个或多个第二数据表之后,根据日志记录中的内容对第二数据表进行数据同步。

若数据同步,则需要对日志记录进行异常处理,具体的,第一系统若对第一数据库中的第一数据表进行数据同步失败,则将日志记录写入第三数据库,判断所述日志记录写入所述第三数据库是否成功,若是,则根据预设时间执行所述第三数据库中的日志记录;若否,则将缓存队列中的偏移量回退至所述日志记录。

本发明实施例中,第三数据库可以为任何一个具有存储功能的数据库,如TiDB数据库,用于防止日志记录丢失。

举例来说,缓存队列中包括a1、a2、……a10,共十个日志记录,若在执行a7日志记录时,因ES宕机等情况导致数据同步失败,即将日志记录写入第一数据库失败,此时,第一系统将日志记录a7存储至第三数据库,然后执行下一日志记录(a8),并在10分钟(预设时间)后,将第三数据库中的日志记录(a7等)重新尝试数据同步,即再次将日志记录a7写入第一数据库。

结合上述示例再次举例,因第三数据库宕机等情况导致将日志记录a7存储至第三数据库失败时,将缓存队列的偏移量回退至日志记录a7(在确定a7数据同步失败时,偏移量为下一日志记录a8),以此防止日志记录丢失。

在一种可能会出现的情况中,若因缓存队列宕机等情况导致偏移量回退失败时,则发出告警信息,以便工作人员知悉,防止日志记录丢失。其中,告警信息可以为文字、语音等形式,在此不做具体限定。

为了更好的解释上述技术方案,图8示例性的示出了一种基于表结构关系的数据同步方法的流程示意图,如图8所示,流程包括:

步骤810,获取配置文件,确定关联关系配置。

接收第二系统发送的配置文件,如关系图、关系代码或关系表格,对配置文件进行预处理,得到关联关系配置。

步骤820,获取日志记录的第一数据表。

在获取日志记录之前,日志记录存储于kafka(缓存队列)中,第一系统向kafka发送请求,获取预设数量的日志记录,并存储在存储单元,然后逐条日志记录进行处理。

步骤830,确定是否存在关联关系,若是则执行步骤840,否则执行步骤850。

逐条日志记录进行处理,针对任一日志记录,第一系统通过日志记录中的关联字段名,确定关联字段名是否在关联关系配置中,若在,则确定存在与日志记录的第一数据表具有关联关系的其他数据表,否则确定不存在与日志记录的第一数据表具有关联关系的其他数据表。

步骤840,同步第一数据表。

第一系统根据日志记录的表名索引到第一数据表,基于日志记录中的内容,对第一数据表进行数据同步。

步骤850,同步第一数据表。

步骤860,确定是否存在与第一数据表具有关联关系的其他数据表,若是,则执行步骤870和/或步骤880,否则执行步骤830,处理下一条日志记录。

步骤870,确定第二数据表的父表,并进行数据同步。

第一系统根据第一数据表的表名和关联字段名,在关联关系中确定出第一数据表的父表x1,基于第一数据表的关联字段名,确定父表x1的子表y1,直至确定出不存在与第一数据表基于第一数据表的关联字段名具有关联关系的数据表,然后对父表x1、y1等数据表进行数据同步。

步骤880,确定第二数据表的子表,并进行数据同步。

第一系统根据第一数据表的表名和关联字段名,在关联关系中确定出第一数据表的子表x2,基于第一数据表的关联字段名,确定子表x2的子表y2,直至确定出不存在与第一数据表基于第一数据表的关联字段名具有关联关系的数据表,然后对子表x2、y2等数据表进行数据同步。

本发明实施例中,若第一系统确定待更改的第二数据表中的内容与日志记录内容一致,则不对第二数据表进行更改,以为日志记录针对任一数据表的数据发生变化时,都会产生日志记录,以上述图3的数据表为例,作者表中的书籍编码数据发生变化会产生针对作者表的日志记录,书籍表中的书籍编码数据发生变化会产生针对书籍表的日志记录,但第一系统针对任一日志记录都会作者表、书籍表和章节表的字段“书籍编码”数据进行同步更改,导致针对先处理的日志记录已经对所有存在关联关系的数据表进行数据同步,针对后处理的日志记录,不再重复数据同步,但后处理的日志记录起到了校验的作用,防止第一系统针对先处理的日志记录,为对存在关联关系的数据表进行全部数据同步。

基于相同的技术构思,图9示例性的示出了本发明实施例提供的一种基于表结构关系的数据同步装置的结构示意图,该装置可以执行上述基于表结构关系的数据同步装方法。

如图9所示,该装置具体包括:

获取模块910,用于获取第二系统针对第二数据库的日志记录;所述第一系统中的第一数据库与所述第二数据库通过索引方式关联数据表;

处理模块920,用于针对所述日志记录中的任一日志记录,根据关联关系配置,确定与所述日志记录中的第一数据表具有关联关系的第二数据表;所述关联关系配置包括所述第二数据库中存在关联关系的数据表和存在关联关系的数据表中的关联字段名;

基于所述日志记录对所述第一数据库中的第一数据表进行数据同步;并基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步。

可选的,所述处理模块920具体用于:

确定所述关联关系配置中的存在关联关系的数据表中是否包含所述日志记录中的第一数据表;

若包含,则确定所述日志记录中的字段名包含在存在关联关系的数据表中的关联字段名中。

可选的,所述处理模块920具体用于:

根据所述字段名和所述存在关联关系的数据表中的关联字段名确定所述第一数据表为第一子表或第一父表;

根据所述第二数据库中存在关联关系的数据表确定与所述第一子表或所述第一父表具有关联关系的第二数据表。

可选的,所述处理模块920具体用于:

基于所述日志记录中的字段名,所述第一系统在确定所述第一数据表为所述第一子表时,根据所述第二数据库中存在关联关系的数据表确定所述第一子表的第二父表,将所述第二父表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二父表具有关联关系的其他数据表,若存在,则将与所述第二父表具有关联关系的其他数据表确定为第二数据表;

所述第一系统在确定所述第一数据表为所述第一父表时,根据所述第二数据库中存在关联关系的数据表确定所述第一父表的第二子表,将所述第二子表确定为第二数据表;

所述第一系统根据所述第二数据库中存在关联关系的数据表确定是否存在与所述第二子表具有关联关系的其他数据表,若存在,则将与所述第二子表具有关联关系的其他数据表确定为第二数据表。

可选的,所述处理模块920具体用于:

接收所述第二系统发送的配置文件;所述配置文件是所述第二系统根据所述第二数据库中各数据表之间的关联关系和所述第二数据库中各数据表的关联字段名确定的;其中,若所述第二数据库中的第三数据表的主键字段为所述第二数据库中的第四数据表的字段时,则确定所述第三数据表与所述第四数据表之间存在关联关系,并将所述主键字段确定为所述第四数据表的关联字段名;

根据所述配置文件确定所述关联关系配置。

可选的,所述配置文件是所述第二系统通过第一建模工具确定所述第二数据库中各数据表的关系图;或所述第二系统通过第二建模工具确定的所述第二数据库中各数据表的关系代码;或所述第二系统根据所述各数据表之间的关联关系、所述各数据表的关联字段名和文件生成工具确定的关系表格。

可选的,所述处理模块920还用于:

基于所述日志记录对所述第一数据库中的第一数据表进行数据同步之前,将所述日志记录存储于缓存队列中;

基于所述日志记录中的关联字段名的信息,对所述第一数据库中的第二数据表进行数据同步之前,从所述缓存队列中获取预设数量的所述日志记录。

基于相同的技术构思,本发明实施例还提供一种计算机设备,包括:

存储器,用于存储程序指令;

处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述基于表结构关系的数据同步方法。

基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述基于表结构关系的数据同步方法。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

相关技术
  • 一种基于表结构关系的数据同步方法及装置
  • 一种基于OLTP-OLAP混合关系型数据库系统内部的数据实时同步方法
技术分类

06120113284124