数据库表结构同步方法及装置与流程
未命名
08-02
阅读:93
评论:0

1.本说明书一个或多个实施例涉及数据库技术领域,尤其涉及一种数据库表结构同步方法及装置。
背景技术:
2.数据库往往以表的形式存储数据,在一些应用场景中,尽管不同表中存储的数据不同,但要求不同表的表结构相同。相关技术往往通过在数据字典中直接查询表的元数据,以便同步表的结构。当查询到的元数据存在异常时,该方式显然无法完成表结构的同步。
技术实现要素:
3.有鉴于此,本说明书一个或多个实施例提供一种数据库表结构同步方法及装置。
4.为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
5.根据本说明书一个或多个实施例的第一方面,提出了一种数据库表结构同步方法,包括:
6.分别构建源表的表对象和目标表的表对象;
7.对比源表的表对象和目标表的表对象,得到差异信息;
8.根据差异信息,将目标表的表结构同步至源表。
9.根据本说明书一个或多个实施例的第二方面,提出了一种数据库表结构同步装置,包括:
10.获取模块,用于分别构建源表的表对象和目标表的表对象;
11.对比模块,用于对比源表的表对象和目标表的表对象,得到差异信息;
12.同步模块,用于根据差异信息,将目标表的表结构同步至源表。
13.根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
14.处理器;
15.用于存储处理器可执行指令的存储器;
16.其中,处理器通过运行可执行指令以实现如第一方面的方法。
17.根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面方法的步骤。
18.本说明书提供的数据库表结构同步方法,通过对比源表的表对象和目标表的表对象,得到差异信息,根据差异信息,即可将目标表的表结构同步至源表。本说明书提供的方案,不局限于通过数据字典中记录的元数据进行表结构对比,而是通过构建源表的表对象和目标表的表对象,并对其进行对比,从而提升了表结构对比的准确率。
附图说明
19.图1是一示例性实施例提供的一种数据库表结构同步方法的应用场景示意图。
20.图2是一示例性实施例提供的一种数据库表结构同步方法的流程示意图。
21.图3是一示例性实施例提供的一种表对象构建方法的流程示意图。
22.图4是一示例性实施例提供的一种设备的结构示意图。
23.图5是一示例性实施例提供的一种数据库表结构同步装置的结构示意图。
具体实施方式
24.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
25.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
26.数据库往往以表的形式存储数据,在一些应用场景中,尽管不同表中存储的数据不同,但要求不同表的表结构相同。例如,在企业的软件开发涉及的数据存储中,需要保证数据库的表结构在软件的开发环境、测试环境、预发环境和生产环境之间具有一致性。然而,在软件的开发过程中,这些环境之间的数据库表结构可能发生改变,此时需要将表结构的改变改变分别同步到与各个环境相应的数据表中。
27.相关技术中对于表结构的同步往往是利用数据字典。具体地,通过在数据字典中直接查询表的元数据进行差异对比,并生成相应的结构查询语言(structured query language,sql)。比如源表比目标表少一列,则生成一个用于加列的sql;如果列类型不一致,则生成一个用于修改列类型的sql。然而,对于某些数据库来说,数据字典里的信息可能存在不全、不准或是用户无权访问的情况,此时表结构将无法进行同步。
28.有鉴于此,本说明书提供的方案,通过对比源表的表对象和目标表的表对象,得到差异信息,根据差异信息,即可将目标表的表结构同步至源表。本说明书提供的方案,不局限于通过数据字典中记录的元数据进行表结构对比,而是通过构建源表的表对象和目标表的表对象,并对其进行对比,从而提升了表结构对比的准确率。
29.图1是一示例性实施例提供的一种数据库表结构同步方法的应用场景示意图。请参照图1,在压测场景中,为了不影响线上业务系统的运行,可以通过创建影子表来承载压测请求产生的流量,从而实现压测数据和真实数据完全物理隔离。
30.具体地,业务系统在接收到压测请求或真实请求时,会将该请求作为数据请求发送至中间件。由于压测请求中预先写入有特定标识,中间件可以根据是否存在特定标识来判断该数据请求是否为压测请求。若该数据请求为压测请求,则将其写入影子表。若该数据请求为真实请求,则将其写入真实表。
31.为了尽量模拟跟线上业务系统一致的场景,影子表的表结构要求与真实表的表结构一致。因此,可以将影子表作为源表,将真实表作为目标表,并利用本说明书提供的表结构同步方法对其进行处理,从而在真实表的表结构发生变更的情况下,保持影子表的表结
构与真实表的表结构一致。
32.下面将结合附图及实施例对本示例实施方式进行详细说明。
33.首先,本说明书实施例提供了一种数据库表结构同步方法,该方法可以由任意电子设备执行。
34.图2是一示例性实施例提供的一种数据库表结构同步方法的流程示意图,如图2所示,本说明书实施例提供的数据库表结构同步方法包括如下步骤。
35.s201,分别构建源表的表对象和目标表的表对象。
36.需要说明的是,本说明书中的源表是需要进行表结构同步的表,目标表是表结构同步过程中的参考对象。也就是说,本说明提供的方法可以使源表获得与目标表相同的表结构。
37.示例性地,源表和目标表可以是同一数据库中的不同表,也可以是不同数据库中不同表。在数据库初始化过程中,源表和目标表还可以是同一数据库中的同一张表。在分布式数据库中,源表和目标表可以是同一节点上的表,也可以是不同节点上的表。本公开实施例对此不做限定。
38.需要说明的是,表对象可以包含表的属性、列、索引、约束和分区中的至少一种。
39.在一些实施例中,表对象可以基于表的元数据构建。其中,表的元数据指的是用于描述表对象的信息,这些信息描述了表对象的结构和属性。
40.在一些实施例中,元数据可以通过直接查询数据字典获得,也可以通过解析表对应的数据定义语言(data definition language,ddl)获得。当然,为了保证元数据的准确性,本说明书还可以同时结合以上两种方式获得元数据。
41.s202,对比源表的表对象和目标表的表对象,得到差异信息。
42.需要说明的是,通过对源表和目标表之间相同类型的表对象进行对比,可以得到差异信息。
43.例如,通过将源表的索引和目标表的索引进行对比,可以得到源表和目标表索引字段的差异、索引属性的差异(局部索引或全局索引)等。本公开实施例对此不做限定。
44.s203,根据差异信息,将目标表的表结构同步至源表。
45.在一些实施例中,可以构建与差异信息对应的结构化查询语言sql,通过针对源表执行sql,从而将目标表的表结构同步至源表。
46.示例性地,可以预先配置差异信息与sql之间的映射关系,即为每种差异信息预先配置sql模板。
47.例如,在目标表存在源表中不存在的特定索引时,可以映射到“create index”的sql中,并参照目标表中的索引范围及属性等补全该sql中的参数信息。随后针对源表该sql,即可在源表中创建与目标表中相同的特定索引。
48.以上介绍了本说明书提供的数据库表结构同步方法,为便于理解,下面将针对其中涉及的表对象构建方式进行详细介绍。
49.图3是一示例性实施例提供的一种表对象构建方法的流程示意图,如图3所示,本说明书实施例提供的表对象构建方法包括如下步骤。
50.s301,通过数据字典获取数据表的第一元数据。
51.需要说明的是,数据字典是一种用户可以访问的记录数据库中元数据的目录。在
形式上,数据字典可以是数据字典表,也有可以是数据字典视图等。在内容上,数据字典是有关数据库系统中各种数据的描述信息和控制信息的集合。
52.在一些实施例中,第一元数据为通过数据字典直接查询获得的数据表的元数据。
53.s302,在第一元数据存在异常的情况下,获取数据表对应的数据定义语言ddl。
54.需要说明的是,第一元数据的异常包括如下至少之一:第一元数据存在缺失(例如,数据字典中的元数据缺失)、第一元数据与数据表不匹配(例如,由于数据库运行错误引起的多个元数据之间存在冲突)、第一元数据无法访问(例如,用户访问权限不足)。
55.需要说明的是,ddl是数据库中用于定义数据库的特性及属性,尤其是行布局、列定义、键列(有时是选键方法)、文件位置和存储策略等的语言。
56.由于数据库中的存在的数据表通过ddl创建,且ddl在创建数据表的过程中被数据库系统记录于相关系统表中。因此,通过查询数据库中的相关系统表可以得到与每个数据表唯一对应的ddl。
57.s303,解析ddl,得到数据表的第二元数据。
58.需要说明的是,第二元数据是通过解析ddl的方式获得的元数据。
59.在一些实施例中,可以通过sql解析器对ddl进行解析,可以生成该ddl对应的抽象语法树(abstract syntax tree,ast)。通过遍历该抽象语法树中的各个节点,即可得到数据表对应的第二元数据。
60.s304,根据第二元数据,构建数据表的表对象。
61.在一些实施例中,在第一元数据存在异常的情况下,可以直接利用第二元数据构建数据表的表对象,从而保证表对象的准确性。
62.在一些应用场景下,受sql解析器的影响,根据第二元数据进行表对象的构建可能出现不准确的情况。例如,异构数据库的语法文件是完全不一样的,同构数据库不同版本之间的语法也是有差异的。因此,通过sql解析器解析ddl,很难保证在所有场景都能正确地得到元信息。
63.对此,本说明书实施例提供的方案,可以结合第一元数据和第二元数据,共同构建数据表的表对象。
64.示例性地,可以利用第二元数据对第一元数据中存在的异常进行补充,从而得到用于构建表对象的完整元数据。
65.例如,在第一元数据中存在部分元数据与数据表不匹配的情况下,可以利用第二元数据针对不匹配之处进行更正,从而得到正确的元数据。
66.在一些实施例中,在第一元数据不存在异常的情况下,可以根据第一元数据,构建数据表的表对象,从而兼顾表对象的构建效率。
67.需要说明的是,本说明书提供的表对象构建方法,可以应用上述s201中。
68.示例性地,在s201中,可以分别将源表和目标表作为数据表,并利用该表对象构建方法构建其表对象。
69.由此,在本说明书实施例中,当数据字典中获取到的第一元数据存在异常时,可以通过sql解析器解析相应的ddl,进而从抽象语法树中获取第二元信息。通过结合第二元信息和第一元信息,即可构建出完整的表对象。本说明书实施例在表结构同步的过程中,扩展了获取表对象元数据的方式,从只从数据字典中获取表对象元信息扩展为数据字典和ddl
解析相结合的方式,提高了表结构对比的准确率。
70.本说明书提供的方案在保证了效率的同时,大大提高了表对象对比的准确率,从而能够保证源表和目标表之间的表结构同步。
71.图4是一示例性实施例提供的一种设备的结构示意图。请参考图4,在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
72.请参考图5,图5提供了一种数据库表结构同步装置500,可以应用于如图4所示的设备中,以实现本说明书的技术方案。其中,数据库表结构同步装置500可以包括:
73.获取模块501,用于分别构建源表的表对象和目标表的表对象。
74.对比模块502,用于对比源表的表对象和目标表的表对象,得到差异信息。
75.同步模块503,用于根据差异信息,将目标表的表结构同步至源表。
76.在一些实施例中,获取模块501具体用于:分别将源表和目标表作为数据表并进行如下处理:通过数据字典获取数据表的第一元数据;在第一元数据存在异常的情况下,获取数据表对应的数据定义语言ddl;解析ddl,得到数据表的第二元数据;根据第二元数据,构建数据表的表对象。
77.在一些实施例中,获取模块501还用于:结合第一元数据和第二元数据,构建数据表的表对象。
78.在一些实施例中,获取模块501还用于:在第一元数据不存在异常的情况下,根据第一元数据,构建数据表的表对象。
79.在一些实施例中,第一元数据的异常包括如下至少之一:第一元数据存在缺失、第一元数据与数据表不匹配、第一元数据无法访问。
80.在一些实施例中,同步模块503具体用于:构建与差异信息对应的结构化查询语言sql;针对源表执行sql,以将目标表的表结构同步至源表。
81.在一些实施例中,表对象包括如下至少之一:属性、列、索引、约束、分区。
82.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
83.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
84.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
85.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法
或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
86.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
87.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
88.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
89.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
90.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
技术特征:
1.一种数据库表结构同步方法,包括:分别构建源表的表对象和目标表的表对象;对比所述源表的表对象和所述目标表的表对象,得到差异信息;根据所述差异信息,将所述目标表的表结构同步至所述源表。2.根据权利要求1所述的方法,所述分别获取源表的表对象和目标表的表对象,包括:分别将所述源表和所述目标表作为数据表并进行如下处理:通过数据字典获取所述数据表的第一元数据;在所述第一元数据存在异常的情况下,获取所述数据表对应的数据定义语言ddl;解析所述ddl,得到所述数据表的第二元数据;根据所述第二元数据,构建所述数据表的表对象。3.根据权利要求2所述的方法,所述根据所述第二元数据,构建所述数据表的表对象,包括:结合所述第一元数据和所述第二元数据,构建所述数据表的表对象。4.根据权利要求2所述的方法,所述方法还包括:在所述第一元数据不存在异常的情况下,根据所述第一元数据,构建所述数据表的表对象。5.根据权利要求2所述的方法,所述第一元数据的异常包括如下至少之一:所述第一元数据存在缺失、所述第一元数据与所述数据表不匹配、所述第一元数据无法访问。6.根据权利要求1所述的方法,所述根据所述差异信息,将所述目标表的表结构同步至所述源表,包括:构建与所述差异信息对应的结构化查询语言sql;针对所述源表执行所述sql,以将所述目标表的表结构同步至所述源表。7.根据权利要求1所述的方法,所述表对象包括如下至少之一:属性、列、索引、约束、分区。8.一种数据库表结构同步装置,包括:获取模块,用于分别构建源表的表对象和目标表的表对象;对比模块,用于对比所述源表的表对象和所述目标表的表对象,得到差异信息;同步模块,用于根据所述差异信息,将所述目标表的表结构同步至所述源表。9.一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如权利要求1至7中任一项所述的方法。10.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1至7中任一项所述方法的步骤。
技术总结
本说明书一个或多个实施例提供一种数据库表结构同步方法及装置,涉及数据库技术领域。该方法包括分别构建源表的表对象和目标表的表对象;对比源表的表对象和目标表的表对象,得到差异信息;根据差异信息,将目标表的表结构同步至源表。本说明书通过构建源表的表对象和目标表的表对象,并对其进行对比,从而提升了表结构对比的准确率。升了表结构对比的准确率。升了表结构对比的准确率。
技术研发人员:彭一诺
受保护的技术使用者:北京奥星贝斯科技有限公司
技术研发日:2023.04.28
技术公布日:2023/8/1
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/