数据库同步方法、装置、电子设备及存储介质转让专利

申请号 : CN202211045457.5

文献号 : CN115470294B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 崔雪征靳贞珍元红萍朱明新张金龙李娟贾小龙王成刚

申请人 : 昆仑数智科技有限责任公司中国石油天然气集团有限公司

摘要 :

本公开提供了一种数据库同步方法、装置、电子设备及存储介质,属于互联网技术领域。所述方法包括:基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定第一数据表对应的有效SQL语句,第一数据表和第二数据的表名称相同;基于有效SQL语句对应的操作类型,采用不同方式,缓存有效SQL语句的主键;当达到预设时间,基于有效SQL语句的主键,按照有效SQL语句对应的操作类型,对第二数据表中数据进行同步。本公开基于有效SQL语句的主键,对第二数据表中数据进行同步,即便有效SQL语句中的字段存在缺失,也能够实现不同数据库的数据同步。

权利要求 :

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

基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL语句,所述第一数据表和所述第二数据的表名称相同;

当所述有效SQL语句的操作类型为更新操作,将所述有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将所述有效SQL语句的主键缓存在第二数据字典中;当达到预设时间,采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新;将所述第二数据字典中有效SQL语句的主键对应的更新数据写入到所述第二数据表中;

当所述有效SQL语句的操作类型为删除操作,将所述有效SQL语句的主键缓存在第二数据字典中;当达到预设时间,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;将所述有效SQL语句的主键对应的数据从所述第二数据表中删除;

当所述有效SQL语句的操作类型为插入操作,将所述有效SQL语句的主键对应的最新数据缓存在所述第二数据表的数组中;当达到预设时间,将所述数组中的数据写入到所述第二数据表中。

2.根据权利要求1所述的方法,其特征在于,所述基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL语句,包括:从所述源数据库中第一数据表的日志中,获取所述第一数据表对应的SQL语句;

对所述SQL语句进行解析,得到所述SQL语句对应的主键;

将所述SQL语句对应的主键与所述第二数据表中各个表字段名称进行比较;

当所述SQL语句对应的主键与所述第二数据表中任一表字段名称相同,则将所述SQL语句作为所述有效SQL语句。

3.根据权利要求1所述的方法,其特征在于,所述当所述有效SQL语句的操作类型为更新操作,将所述有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将所述有效SQL语句的主键缓存在第二数据字典中,包括:当所述有效SQL语句的操作类型为更新操作,获取所述有效SQL语句的set语句部分和where语句部分;

从所述where语句部分,获取所述有效SQL语句的主键;

从所述set语句部分,获取所述有效SQL语句的主键对应的最新数据;

将所述有效SQL语句的主键对应的最新数据缓存在所述第一数据字典中,并将所述有效SQL语句的主键缓存在所述第二数据字典中。

4.根据权利要求3所述的方法,其特征在于,所述当达到预设时间,采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新,包括:当达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;

基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;

将所述有效SQL语句的主键对应的数据缓存到所述第二数据字典中;

采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新。

5.根据权利要求1所述的方法,其特征在于,所述当所述有效SQL语句的操作类型为删除操作,将所述有效SQL语句的主键缓存在第二数据字典中,包括:当所述有效SQL语句的操作类型为删除操作,获取所述有效SQL语句的where语句部分;

从所述where语句部分,获取所述有效SQL语句的主键;

将所述有效SQL语句的主键缓存在所述第二数据字典中。

6.根据权利要求5所述的方法,其特征在于,所述当达到预设时间,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据,包括:当达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;

基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据。

7.一种数据库同步装置,其特征在于,所述装置包括:

确定模块,用于基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL语句,所述第一数据表和所述第二数据的表名称相同;

缓存模块,用于当所述有效SQL语句的操作类型为更新操作,将所述有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将所述有效SQL语句的主键缓存在第二数据字典中;

同步模块,用于当达到预设时间,采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新;将所述第二数据字典中有效SQL语句的主键对应的更新数据写入到所述第二数据表中;

缓存模块,还用于当所述有效SQL语句的操作类型为删除操作,将所述有效SQL语句的主键缓存在第二数据字典中;

同步模块,还用于当达到预设时间,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;将所述有效SQL语句的主键对应的数据从所述第二数据表中删除;

缓存模块,还用于当所述有效SQL语句的操作类型为插入操作,将所述有效SQL语句的主键对应的最新数据缓存在所述第二数据表的数组中;

同步模块,还用于当达到预设时间,将所述数组中的数据写入到所述第二数据表中。

8.一种电子设备,其特征在于,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现如权利要求1至6中任一项所述的数据库同步方法。

9.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现如权利要求1至6中任一项所述的数据库同步方法。

说明书 :

数据库同步方法、装置、电子设备及存储介质

技术领域

[0001] 本公开涉及互联网技术领域,特别涉及一种数据库同步方法、装置、电子设备及存储介质。

背景技术

[0002] 在互联网技术领域,因业务需求,不同的数据库间的数据需要实时同步。以将Oracle数据库中的数据同步到StarRocks数据库为例,该同步过程为:从Oracle数据库的redo日志中,获取DML(Data Manipulation Language,数据操纵语言)语句,进而基于DML语句,对StarRocks数据库进行同步。
[0003] 然而,Oralce数据库的redo日志在主键模式下,更新操作、删除操作中只记录了表更新字段及主键,而StarRocks数据库在进行同步时,需要全部的字段才能执行,导致基于DML语句无法将Oracle数据库中的数据同步到StarRocks数据库中。

发明内容

[0004] 本公开实施例提供了一种数据库同步方法、装置、电子设备及存储介质,能够在源数据库的数据表中字段存在缺失的情况下,也能实现不同数据库中的数据同步。所述技术方案如下:
[0005] 第一方面,提供了一种数据库同步方法,所述方法包括:
[0006] 基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL(Structured Query Language,结构化查询语言)语句,所述第一数据表和所述第二数据的表名称相同;
[0007] 基于所述有效SQL语句对应的操作类型,采用不同方式,缓存所述有效SQL语句的主键;
[0008] 当对达到预设时间,基于所述有效SQL语句的主键,按照所述有效SQL语句对应的操作类型,对所述第二数据表中数据进行同步。
[0009] 在本公开的另一个实施例中,所述根据源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL语句,包括:
[0010] 从所述源数据库中第一数据表的日志中,获取所述第一数据表对应的SQL语句;
[0011] 对所述SQL语句进行解析,得到所述SQL语句对应的主键;
[0012] 将所述SQL语句对应的主键与所述第二数据表中各个表字段名称进行比较;
[0013] 当所述SQL语句对应的主键与所述第二数据表中任一表字段名称相同,则将所述SQL语句作为所述有效SQL语句。
[0014] 在本公开的另一个实施例中,所述基于所述有效SQL语句对应的操作类型,采用不同方式,缓存所述有效SQL语句的主键,包括:
[0015] 当所述有效SQL语句的操作类型为更新操作,获取所述有效SQL语句的set语句部分和where语句部分;
[0016] 从所述where语句部分,获取所述有效SQL语句的主键;
[0017] 从所述set语句部分,获取所述有效SQL语句的主键对应的最新数据;
[0018] 将所述有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将所述有效SQL语句的主键缓存在第二数据字典中。
[0019] 在本公开的另一个实施例中,所述当达到预设时间,基于所述有效SQL语句的主键,按照所述有效SQL语句对应的操作类型,对所述第二数据表中数据进行同步,包括:
[0020] 当对达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;
[0021] 基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;
[0022] 将所述有效SQL语句的主键对应的数据缓存到所述第二数据字典中;
[0023] 采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新;
[0024] 按照所述有效SQL语句对应的操作类型,将所述第二数据字典中有效SQL语句的主键对应的更新数据写入到所述第二数据表中。
[0025] 在本公开的另一个实施例中,所述基于所述有效SQL语句对应的操作类型,采用不同方式,缓存所述有效SQL语句的主键,包括:
[0026] 当所述有效SQL语句的操作类型为删除操作,获取所述有效SQL语句的where语句部分;
[0027] 从所述where语句部分,获取所述有效SQL语句的主键;
[0028] 将所述有效SQL语句的主键缓存在第二数据字典中。
[0029] 在本公开的另一个实施例中,所述当达到预设时间,基于所述有效SQL语句的主键,按照所述有效SQL语句对应的操作类型,对所述第二数据表中数据进行同步,包括:
[0030] 当达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;
[0031] 基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;
[0032] 按照所述有效SQL语句对应的操作类型,将所述有效SQL语句的主键对应的数据从所述第二数据表中删除。
[0033] 在本公开的另一个实施例中,所述基于所述有效SQL语句对应的操作类型,采用不同方式,缓存所述有效SQL语句的主键,包括:
[0034] 当所述有效SQL语句的操作类型为插入操作,获取所述有效SQL语句的主键及其对应的最新数据;
[0035] 将所述有效SQL语句的主键对应的最新数据缓存在所述第二数据表的数组中;
[0036] 所述当达到预设时间,基于所述有效SQL语句的主键,按照所述有效SQL语句对应的操作类型,对所述第二数据表中数据进行同步,包括:
[0037] 当达到预设时间,按照所述有效SQL语句对应的操作类型,将所述数组中的数据写入到所述第二数据表中。
[0038] 第二方面,提供了一种数据库同步装置,所述装置包括:
[0039] 确定模块,用于基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定所述第一数据表对应的有效SQL语句,所述第一数据表和所述第二数据的表名称相同;
[0040] 缓存模块,用于基于所述有效SQL语句对应的操作类型,采用不同方式,缓存所述有效SQL语句的主键;
[0041] 同步模块,用于当达到预设时间,基于所述有效SQL语句的主键,按照所述有效SQL语句对应的操作类型,对所述第二数据表中数据进行同步。
[0042] 在本公开的另一个实施例中,所述确定模块,用于从所述源数据库中第一数据表的日志中,获取所述第一数据表对应的SQL语句;对所述SQL语句进行解析,得到所述SQL语句对应的主键;将所述SQL语句对应的主键与所述第二数据表中各个表字段名称进行比较;当所述SQL语句对应的主键与所述第二数据表中任一表字段名称相同,则将所述SQL语句作为所述有效SQL语句。
[0043] 在本公开的另一个实施例中,所述缓存模块,用于当所述有效SQL语句的操作类型为更新操作,获取所述有效SQL语句的set语句部分和where语句部分;从所述where语句部分,获取所述有效SQL语句的主键;从所述set语句部分,获取所述有效SQL语句的主键对应的最新数据;将所述有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将所述有效SQL语句的主键缓存在第二数据字典中。
[0044] 在本公开的另一个实施例中,所述同步模块,用于当达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;将所述有效SQL语句的主键对应的数据缓存到所述第二数据字典中;采用所述第一数据字典中所述有效SQL语句的主键对应的最新数据,对所述第二数据字典中有效SQL语句的主键对应的数据进行更新;按照所述有效SQL语句对应的操作类型,将所述第二数据字典中有效SQL语句的主键对应的更新数据写入到所述第二数据表中。
[0045] 在本公开的另一个实施例中,所述缓存模块,用于当所述有效SQL语句的操作类型为删除操作,获取所述有效SQL语句的where语句部分;从所述where语句部分,获取所述有效SQL语句的主键;将所述有效SQL语句的主键缓存在第二数据字典中。
[0046] 在本公开的另一个实施例中,所述同步模块,用于当达到预设时间,将所述第二数据字典中缓存的所述有效SQL语句的主键拼接成SQL查询语句;基于所述SQL查询语句,从所述第二数据表中,查询所述有效SQL语句的主键对应的数据;按照所述有效SQL语句对应的操作类型,将所述有效SQL语句的主键对应的数据从所述第二数据表中删除。
[0047] 在本公开的另一个实施例中,所述缓存模块,用于当所述有效SQL语句的操作类型为插入操作,获取所述有效SQL语句的主键及其对应的最新数据;将所述有效SQL语句的主键对应的最新数据缓存在所述第二数据表的数组中;
[0048] 所述同步模块,用于当达到预设时间,按照所述有效SQL语句对应的操作类型,将所述数组中的数据写入到所述第二数据表中。
[0049] 第三方面,提供了一种电子设备,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条程序代码,所述至少一条程序代码由所述处理器加载并执行,以实现如第一方面所述的数据库同步方法。
[0050] 第四方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现如第一方面所述的数据库同步方法。
[0051] 第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序代码,所述计算机程序代码存储在计算机可读存储介质中,电子设备的处理器从所述计算机可读存储介质读取所述计算机程序代码,所述处理器执行所述计算机程序代码,使得所述电子设备执行如第一方面所述的数据库同步方法。
[0052] 本公开实施例提供的技术方案带来的有益效果是:
[0053] 通过从源数据库中第一数据表的日志中,获取第一数据表对应的SQL语句,并对该SQL语句进行解析,得到该SQL语句对应的主键,进而基于目标数据库中第二数据表中各个字段和该SQL语句对应的主键,获取主键与第二数据表中任一表字段名称相同的SQL语句作为有效SQL语句,提高了数据库同步的成功率。在此基础上,一方面,对有效SQL语句的主键进行缓存,避免频繁访问目标数据库,使得目标数据库保持较佳的性能,保证了数据库之间数据同步的成功率。另一方面,针对有效SQL语句对应的操作类型,基于有效SQL语句的主键采取不同的方式进行数据同步,进一步保证了数据库之间同步的成功率。

附图说明

[0054] 为了更清楚地说明本公开实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0055] 图1是本公开实施例提供的一种数据库同步方法的流程图;
[0056] 图2是本公开实施例提供的另一种数据库同步方法的方法流程图;
[0057] 图3是本公开实施例提供的另一种数据库同步方法的方法流程图;
[0058] 图4是本公开实施例提供的一种数据库同步装置的结构示意图;
[0059] 图5示出了本公开一个示例性实施例提供的一种电子设备的结构框图。

具体实施方式

[0060] 为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
[0061] 可以理解,本公开实施例所使用的术语“每个”、“多个”及“任一”等,多个包括两个或两个以上,每个是指对应的多个中的每一个,任一是指对应的多个中的任意一个。举例来说,多个词语包括10个词语,而每个词语是指这10个词语中的每一个词语,任一词语是指10个词语中的任意一个词语。
[0062] 本公开所涉及的信息(包括但不限于用户设备信息、用户个人信息等)、数据(包括但不限于用于分析的数据、存储的数据、展示的数据等)以及信号,均为经用户授权或者经过各方充分授权的,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
[0063] 本公开实施例提供了一种数据库同步方法,以电子设备执行本公开实施例为例,该电子设备具有较强的计算能力。参见图1,本公开实施例提供的方法流程包括:
[0064] 101.基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定第一数据表对应的有效SQL语句。
[0065] 其中,源数据库和目标数据库为进行数据库同步的两个数据库,在进行数据库同步时需要将源数据库中各个数据表中的数据同步到目标数据库中相应数据表中。第一数据表为源数据库中任一个数据库,该第一数据表和第二数据的表名称相同。
[0066] 通常不同数据表的同步只能发生在相同的表字段之间,不同的表字段无法实现同步。考虑到不同数据表中的表字段可能被更改,导致两个表名称相同的两个数据表中的表字段可能会不同,而由于SQL语句中记录着对数据库中数据表执行的所有操作,为使源数据库中第一数据表的数据能够同步到目标数据库的第二数据中,本公开实施例在实现不同数据库的数据表同步之前,还将根据源数据库中第一数据表的日志和目标数据库中第二数据表,确定第一数据表对应的有效SQL语句。具体地,采用如下方法:
[0067] 1011.从源数据库中第一数据表的日志中,获取第一数据表对应的SQL语句。
[0068] 电子设备获取第一数据表的表标识,进而基于该表标识,从源数据库中不同数据表的日志中,获取第一数据表的日志,进而从该第一数据表的日志中,获取该第一数据表对应的SQL语句。
[0069] 1012.对SQL语句进行解析,得到SQL语句对应的主键。
[0070] 电子设备对SQL语句解析成key、value的形式,并获取解析得到的key作为SQL语句的主键。例如,SQL语句为insert into city(id,name)values(1,‘beijing’),将SQL语句解析成key、value的形式为{id:1,name:”beijing”},基于解析得到的key、value数据对,可获取该SQL语句对应的主键为id:1。
[0071] 进一步,对于解析得到的key、value数据对,电子设备还将该SQL语句对应的key、value数据对存储在第一数据表对应的数据字典中,从而便于后续进行查询。
[0072] 1013.将SQL语句对应的主键与第二数据表中各个表字段名称进行比较。
[0073] 电子设备获取第二数据表中各个表字段名称,并将SQL语句对应的主键与第二数据表中各个表字段名称进行比较。
[0074] 1014.当SQL语句对应的主键与第二数据表中任一表字段名称相同,则将SQL语句作为有效SQL语句。
[0075] 当SQL语句对应的主键与第二数据表中各个表字段名称均不相同,则将SQL语句作为无效SQL语句,进而将该SQL语句丢弃。
[0076] 102.基于有效SQL语句对应的操作类型,采用不同方式,缓存有效SQL语句的主键。
[0077] 其中,有效SQL语句对应的操作类型包括插入操作(Insert)、更新操作(Update)及删除操作(Delete)等。针对不同操作类型的有效SQL语句,电子设备在缓存有效SQL语句的主键的方式也是不同的,下面将分别进行说明。
[0078] 第一种情况、有效SQL语句的操作类型为更新操作
[0079] 针对第一种情况,当有效SQL语句的操作类型为更新操作,电子设备获取有效SQL语句的set语句部分和where语句部分,并从where语句部分,获取有效SQL语句的主键,从set语句部分,获取有效SQL语句的主键对应的最新数据,进而将有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将有效SQL语句的主键缓存在第二数据字典中。
[0080] 例如,有效SQL语句为update city set name=’shenzhen’where id=4,电子设备从该有效SQL语句中获取set语句部分为“set name=’shenzhen’”,进而从该set语句部分获取有效SQL语句的主键对应的最新数据为{name:shenzhen},然后将该最新数据{name:shenzhen}缓存在第一数据字典中。电子设备从该有效SQL语句中获取where语句部分为“where id=4”,进而从该where语句部分获取有效SQL语句的主键{id:4},然后将该有效SQL语句的主键{id:4}缓存在第二数据字典中。
[0081] 第二种情况、有效SQL语句的操作类型为删除操作
[0082] 针对第二种情况,当有效SQL语句的操作类型为删除操作,电子设备获取有效SQL语句的where语句部分,并从where语句部分,获取有效SQL语句的主键,进而将有效SQL语句的主键缓存在第二数据字典中。
[0083] 例如,有效SQL语句为delete from city where id=3,电子设备从该有效SQL语句中获取where语句部分“where id=3”,进而从该where语句部分获取有效SQL语句的主键{id:3},然后将该有效SQL语句的主键{id:3}缓存在第二数据字典中。
[0084] 第三种情况、有效SQL语句的操作类型为插入操作
[0085] 针对第三种情况,当有效SQL语句的操作类型为插入操作,电子设备获取有效SQL语句的主键及其对应的最新数据,进而将有效SQL语句的主键对应的最新数据缓存在第二数据表的数组中,该数组用于按照第二数据表中表字段顺序存储待写入第二数据表中的数据。
[0086] 例如,有效SQL语句为insert into city(id,name)values(2,‘shanghai’),电子设备获取有效SQL语句对应的主键为{id:2}、最新数据为‘shanghai’,然后将有效SQL语句对应的主键和最新数据缓存到第二数据表的数组中。
[0087] 电子设备通过有效SQL语句的主键进行缓存,避免频繁访问目标数据库,提升了目标数据库的性能。
[0088] 103.当达到预设时间,基于有效SQL语句的主键,按照有效SQL语句对应的操作类型,对第二数据表中数据进行同步。
[0089] 其中,预设时间可以为1分钟、2分钟等,本公开实施例不对预设时间作具体的限定。针对不同操作类型的有效SQL语句,电子设备在对第二数据表中数据进行同步方式也是不同的,下面将分别进行说明。
[0090] 第一种情况、有效SQL语句的操作类型为更新操作
[0091] 针对第一种情况、当达到预设时间,电子设备将第二数据字典中缓存的有效SQL语句的主键拼接成SQL查询语句,并基于SQL查询语句,从第二数据表中,查询有效SQL语句的主键对应的数据,进而将有效SQL语句的主键对应的数据缓存到第二数据字典中,然后采用第一数据字典中有效SQL语句的主键对应的最新数据,对第二数据字典中有效SQL语句的主键对应的数据进行更新,然后将第二数据字典中有效SQL语句的主键对应的更新数据写入到第二数据表中,以实现对第二数据表中该有效SQL语句的主键对应的数据的更新。
[0092] 需要说明的是,当达到预设时间,如果第二数据字典中缓存的有效SQL语句的主键数量为多个,则可将多个主键拼接成一个SQL查询语句,然后基于该SQL查询语句,从第二数据表中进行查询,得到查询结果,该查询结果为多个主键对应的数据,然后电子设备将该查询结果拆分成不同主键与对应的数据的形式,进而将不同主键与对应的数据缓存到第二数据字典中。
[0093] 第二种情况、有效SQL语句的操作类型为删除操作
[0094] 针对第二种情况,当达到预设时间,电子设备将第二数据字典中缓存的有效SQL语句的主键拼接成SQL查询语句,进而基于SQL查询语句,从第二数据表中,查询有效SQL语句的主键对应的数据,然后将有效SQL语句的主键对应的数据从第二数据表中删除。
[0095] 第三种情况、有效SQL语句的操作类型为插入操作
[0096] 针对第三种情况、当达到预设时间,电子设备按照第二数据表中各个表字段的顺序,将数组中的数据写入到第二数据表中。
[0097] 需要说明的,为了提高同一数据表中数据的同步速度及准确性,电子设备在将源数据库中第一数据表中的数据更新到目标数据库中第二数据表时,采用一个线程对第一数据表中的数据进行处理。这样,不同线程处理不同数据表的数据,多个数据表中的数据可以采用多个线程并行进行处理,大大提高了数据表的同步速度,缩短了数据表的同步时间。例如,将Oracle数据库中数据同步到StarRocks数据库时,Oracle数据库中20多张表近一天积累的数据几分钟即可同步到StarRocks数据库中。另外,由于在数据库间进行同步时,缓存的时长可由技术人员设置,这样可根据需求控制数据同步时间。
[0098] 进一步地,上述以将源数据库中第一数据表中数据同步到目标数据库中第二数据表为例进行说明,对于源数据库中其他数据表的同步过程,可参见上述对第一数据表的同步过程,此处不再赘述。另外,在完成第一数据表中数据的同步之后,电子设备将清空所缓存的数据。为了保证数据的一致性,在执行数据写入和清空操作时需要加锁。
[0099] 以源数据库为Oracle数据库、目标数据库为StarRocks数据库为例,对于上述数据库中数据的同步过程,下面将结合图2和图3进行详细说明。
[0100] 参见图3,其示出了从Oracle数据库到StarRocks数据库的同步过程,该同步过程包括如下步骤:
[0101] 第一步、获取Oracle的redo日志SQL语句,SQL语句都是简单的增删改查,方便在另一个数据库重现。
[0102] 第二步,将SQL语句中的数据解析成key、value的格式,并存入数据字典。
[0103] 第三步,为保证Oracle中数据表变更对StarRocks中数据表没有影响,需要比对Oracle中数据表的字段与StarRocks中数据表的表字段名称,保留两个数据库中都有的字段的SQL语句。
[0104] 第四步,根据SQL语句的不同操作类型,采用不同方式进行同步。
[0105] 第五步,将处理结果写入缓存。由于采用StarRocks load方式,可以写入很多的数据。在写入时采用定时方式,该时间可以为1分钟,也即是每隔一分钟将Insert、Update、Delete的处理结果从缓存写入同一个文件。
[0106] 第六步,将有效字段按顺序传入StarRocks load接口,调用StarRocks的stream load接口,将数据文件load入库。基于Stream load的内部实现机制完成Insert、Update、Delete操作。
[0107] 第七步,清空缓存,执行下一批。为保证一致性,写入和清空缓存时,都需要加锁。
[0108] 图3示出了上述针对不同的Insert、Update、Delete,采用不同的数据处理方式,参见图3,包括以下几种方式:
[0109] 第一种情况、针对Insert操作,只需要按照表字段顺序写入数组。
[0110] 第二种情况、针对Delete操作,从where语句中获取数据存入字典2中。
[0111] 第三种情况、针对Update操作,将SQL语句拆分成set和where两部分,set数据放入字典1,where数据放入字典2。当达到设定时间,用字典2数据拼接查询语句,进而基于该查询语句,从StarRocks查询数据,如:select*fromcity where id in(3,4)。按照对应的key,将查询到的数据,拆分成key value形式存入字典2中。然后用字典1的数据更新字典2的数据,进而将数据写入文件
[0112] 本公开实施例提供的方法,通过从源数据库中第一数据表的日志中,获取第一数据表对应的SQL语句,并对该SQL语句进行解析,得到该SQL语句对应的主键,进而基于目标数据库中第二数据表中各个字段和该SQL语句对应的主键,获取主键与第二数据表中任一表字段名称相同的SQL语句作为有效SQL语句,提高了数据库同步的成功率。在此基础上,一方面,对有效SQL语句的主键进行缓存,避免频繁访问目标数据库,使得目标数据库保持较佳的性能,保证了数据库之间数据同步的成功率。另一方面,针对有效SQL语句对应的操作类型,基于有效SQL语句的主键采取不同的方式进行数据同步,进一步保证了数据库之间同步的成功率。
[0113] 参见图4,本公开实施例提供了一种数据库同步装置,该装置包括:
[0114] 确定模块401,用于基于源数据库中第一数据表的日志和目标数据库中第二数据表,确定第一数据表对应的有效SQL语句,该第一数据表和第二数据的表名称相同;
[0115] 缓存模块402,用于基于有效SQL语句对应的操作类型,采用不同方式,缓存有效SQL语句的主键;
[0116] 同步模块403,用于当达到预设时间,基于有效SQL语句的主键,按照有效SQL语句对应的操作类型,对第二数据表中数据进行同步。
[0117] 在本公开的另一个实施例中,确定模块401,用于从源数据库中第一数据表的日志中,获取第一数据表对应的SQL语句;对SQL语句进行解析,得到SQL语句对应的主键;将SQL语句对应的主键与第二数据表中各个表字段名称进行比较;当SQL语句对应的主键与第二数据表中任一表字段名称相同,则将SQL语句作为有效SQL语句。
[0118] 在本公开的另一个实施例中,缓存模块402,用于当有效SQL语句的操作类型为更新操作,获取有效SQL语句的set语句部分和where语句部分;从where语句部分,获取有效SQL语句的主键;从set语句部分,获取有效SQL语句的主键对应的最新数据;将有效SQL语句的主键对应的最新数据缓存在第一数据字典中,并将有效SQL语句的主键缓存在第二数据字典中。
[0119] 在本公开的另一个实施例中,同步模块403,用于当达到预设时间,将第二数据字典中缓存的有效SQL语句的主键拼接成SQL查询语句;基于SQL查询语句,从第二数据表中,查询有效SQL语句的主键对应的数据;将有效SQL语句的主键对应的数据缓存到第二数据字典中;采用第一数据字典中有效SQL语句的主键对应的最新数据,对第二数据字典中有效SQL语句的主键对应的数据进行更新;按照有效SQL语句对应的操作类型,将第二数据字典中有效SQL语句的主键对应的更新数据写入到第二数据表中。
[0120] 在本公开的另一个实施例中,缓存模块402,用于当有效SQL语句的操作类型为删除操作,获取有效SQL语句的where语句部分;从where语句部分,获取有效SQL语句的主键;将有效SQL语句的主键缓存在第二数据字典中。
[0121] 在本公开的另一个实施例中,同步模块403,用于当达到预设时间,将第二数据字典中缓存的有效SQL语句的主键拼接成SQL查询语句;基于SQL查询语句,从第二数据表中,查询有效SQL语句的主键对应的数据;按照有效SQL语句对应的操作类型,将有效SQL语句的主键对应的数据从第二数据表中删除。
[0122] 在本公开的另一个实施例中,缓存模块402,用于当有效SQL语句的操作类型为插入操作,获取有效SQL语句的主键及其对应的最新数据;将有效SQL语句的主键对应的最新数据缓存在第二数据表的数组中;
[0123] 同步模块403,用于当达到预设时间,按照有效SQL语句对应的操作类型,将数组中的数据写入到第二数据表中。
[0124] 综上所述,本公开实施例提供的装置,通过从源数据库中第一数据表的日志中,获取第一数据表对应的SQL语句,并对该SQL语句进行解析,得到该SQL语句对应的主键,进而基于目标数据库中第二数据表中各个字段和该SQL语句对应的主键,获取主键与第二数据表中任一表字段名称相同的SQL语句作为有效SQL语句,提高了数据库同步的成功率。在此基础上,一方面,对有效SQL语句的主键进行缓存,避免频繁访问目标数据库,使得目标数据库保持较佳的性能,保证了数据库之间数据同步的成功率。另一方面,针对有效SQL语句对应的操作类型,基于有效SQL语句的主键采取不同的方式进行数据同步,进一步保证了数据库之间同步的成功率。
[0125] 图5示出了本公开一个示例性实施例提供的一种电子设备500的结构框图。通常,电子设备500包括有:处理器501和存储器502。
[0126] 处理器501可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器501可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器501也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central Processing Unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器501可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器501还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
[0127] 存储器502可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器502还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器502中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器501所执行以实现本公开中方法实施例提供的数据库同步方法。
[0128] 在一些实施例中,电子设备500还可选包括有:外围设备接口503和至少一个外围设备。处理器501、存储器502和外围设备接口503之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口503相连。具体地,外围设备包括:电源504。
[0129] 外围设备接口503可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器501和存储器502。在一些实施例中,处理器501、存储器502和外围设备接口503被集成在同一芯片或电路板上;在一些其他实施例中,处理器501、存储器502和外围设备接口503中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
[0130] 电源504用于为电子设备500中的各个组件进行供电。电源504可以是交流电、直流电、一次性电池或可充电电池。当电源504包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
[0131] 本领域技术人员可以理解,图5中示出的结构并不构成对电子设备500的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
[0132] 在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器,上述指令可由电子设备500的处理器执行以完成上述数据库同步方法。可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是CD‑ROM(Compact Disc Read‑Only Memory,只读光盘)、ROM、RAM(Random Access Memory,随机存取存储器)、磁带、软盘和光数据存储设备等。
[0133] 本公开实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行,以实现数据库同步方法。
[0134] 本公开实施例提供了一种计算机程序产品,所述计算机程序产品包括计算机程序代码,所述计算机程序代码存储在计算机可读存储介质中,电子设备的处理器从所述计算机可读存储介质读取所述计算机程序代码,所述处理器执行所述计算机程序代码,使得所述电子设备执行数据库同步方法。
[0135] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0136] 以上所述仅为本公开的可选实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。