在分布式数据库中同步更新元数据的方法及装置与流程

文档序号:28918338发布日期:2022-02-16 12:05阅读:237来源:国知局
在分布式数据库中同步更新元数据的方法及装置与流程

1.本说明书实施例涉及计算机技术领域,具体地,涉及在分布式数据库中同步更新元数据的方法及装置。


背景技术:

2.目前,在大规模分布式数据库(例如oceanbase等数据库)中,同步更新元数据(schema)是一个难题,因为不能保证元数据的更新数据被同时推送到分布式数据库的各个数据库节点上,进而可能导致在更新元数据的过程中出现不同的数据库节点读到不同的元数据这一问题。例如,在用户修改某个数据表的元数据后,有可能一部分数据库节点读到该数据表更新后的元数据,另一部分数据库节点读到该数据表更新前的元数据。
3.因此,迫切需要一种合理、可靠的方案,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。


技术实现要素:

4.本说明书实施例提供了在分布式数据库中同步更新元数据的方法,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。
5.第一方面,本说明书实施例提供了一种在分布式数据库中同步更新元数据的方法,所述分布式数据库包括多个数据库节点,其中的第一节点保存有目标复制表的第一主副本,其余的多个第二节点保存有所述目标复制表的第一备副本,所述第一主副本和所述第一备副本之间采用全同步协议,所述方法应用于所述第一节点,包括:接收与所述分布式数据库中第一数据表的第一元数据有关的更新请求;根据所述更新请求,将与所述第一元数据有关的更新信息写入所述第一主副本,使得所述更新信息基于所述全同步协议,被同步至所述多个第二节点各自的所述第一备副本,以供所述多个第二节点在使用所述第一元数据时,根据所述更新信息,获取所述第一元数据的更新数据。
6.在一些实施例中,所述更新请求包括所述更新数据;以及所述将与所述第一元数据有关的更新信息写入所述第一主副本,包括:将所述更新数据写入所述第一主副本。
7.在一些实施例中,所述将与所述第一元数据有关的更新信息写入所述第一主副本,包括:确定与所述第一元数据有关的目标更新标记;将所述目标更新标记写入所述第一主副本。
8.在一些实施例中,所述确定与所述第一元数据有关的目标更新标记,包括:获取目标版本号,其为所述第一元数据或所述分布式数据库的元数据的版本号,并且响应于所述更新数据对应的更新操作而生成;根据所述目标版本号生成所述目标更新标记。
9.在一些实施例中,所述根据所述目标版本号生成所述目标更新标记,包括:将所述目标版本号作为所述目标更新标记。
10.在一些实施例中,所述根据所述目标版本号生成所述目标更新标记,包括:对所述目标版本号进行哈希计算或签名,将所得的哈希值或签名作为所述目标更新标记。
11.在一些实施例中,所述确定与所述第一元数据有关的目标更新标记,包括:获取包含所述更新数据的目标元数据,其为加入所述更新数据后的所述第一元数据的至少部分内容,或者所述分布式数据库加入所述更新数据后的元数据的至少部分内容;根据所述目标元数据生成所述目标更新标记。
12.在一些实施例中,所述根据所述目标元数据生成所述目标更新标记,包括:对所述目标元数据进行哈希计算或签名,将所得的哈希值或签名作为所述目标更新标记。
13.在一些实施例中,所述更新请求包括所述更新数据;以及所述方法还包括:将所述更新数据和所述目标更新标记对应缓存到本地内存中。
14.在一些实施例中,所述第一节点还保存有元数据表的第二主副本,所述元数据表存放有所述分布式数据库的元数据;以及所述方法还包括:将缓存的所述更新数据更新到所述第二主副本中。
15.在一些实施例中,在所述目标更新标记被同步至所述多个第二节点各自的所述第一备副本之后,所述方法还包括:接收所述多个第二节点中任意的第二节点发送的对所述更新数据的获取请求,所述获取请求是所述任意的第二节点,在检测出其内存未缓存关联于所述第一元数据的所述目标更新标记而发送的;将所述更新数据返回给所述任意的第二节点。
16.第二方面,本说明书实施例提供了一种在分布式数据库中同步更新元数据的方法,所述分布式数据库包括多个数据库节点,其中的第一节点保存有目标复制表的第一主副本,其余的多个第二节点保存有所述目标复制表的第一备副本,所述第一主副本和所述第一备副本之间采用全同步协议,所述方法包括:所述第一节点接收与所述分布式数据库中第一数据表的第一元数据有关的更新请求;所述第一节点根据所述更新请求,将与所述第一元数据有关的更新信息写入所述第一主副本,使得所述更新信息基于所述全同步协议,被同步至所述多个第二节点各自的所述第一备副本;所述多个第二节点中任意的第二节点在使用所述第一元数据时,根据被同步至本地的所述第一备副本中的所述更新信息,获取所述第一元数据的更新数据。
17.在一些实施例中,所述更新请求包括所述更新数据;以及所述将与所述第一元数据有关的更新信息写入所述第一主副本,包括:将所述更新数据写入所述第一主副本;所述获取所述第一元数据的更新数据,包括:从本地的所述第一备副本中获取所述更新数据。
18.在一些实施例中,所述将与所述第一元数据有关的更新信息写入所述第一主副本,包括:确定与所述第一元数据有关的目标更新标记;将所述目标更新标记写入所述第一主副本。
19.在一些实施例中,所述更新请求包括所述更新数据;以及所述方法还包括:所述第一节点将所述更新数据和所述目标更新标记对应缓存到本地内存中。
20.在一些实施例中,所述获取所述第一元数据的更新数据,包括:从本地的所述第一备副本中读取所述目标更新标记;检测本地内存是否缓存有关联于所述第一元数据的所述目标更新标记;响应于检测结果为否,向所述第一节点发送对所述更新数据的获取请求;接收所述第一节点返回的所述更新数据;以及所述方法还包括:所述任意的第二节点将所述更新数据和所述目标更新标记对应缓存到本地内存中。
21.在一些实施例中,所述任意的第二节点的本地内存缓存有关联于所述第一元数据
的历史更新标记;以及所述检测本地内存是否缓存有关联于所述第一元数据的所述目标更新标记,包括:确定所述目标更新标记和所述历史更新标记是否相同;若确定结果为是,则确定本地内存缓存有关联于所述第一元数据的所述目标更新标记;若确定结果为否,则确定本地内存未缓存关联于所述第一元数据的所述目标更新标记。
22.在一些实施例中,在所述任意的第二节点将所述更新数据和所述目标更新标记对应缓存到本地内存中之后,还包括:再次使用所述第一元数据时,从本地的所述第一备副本中读取所述目标更新标记;检测本地内存是否缓存有关联于所述第一元数据的所述目标更新标记;响应于检测结果为是,从本地内存中获取所述更新数据。
23.第三方面,本说明书实施例提供了一种在分布式数据库中同步更新元数据的装置,所述分布式数据库包括多个数据库节点,其中的第一节点保存有目标复制表的第一主副本,其余的多个第二节点保存有所述目标复制表的第一备副本,所述第一主副本和所述第一备副本之间采用全同步协议,所述装置应用于所述第一节点,包括:接收单元,被配置成接收与所述分布式数据库中第一数据表的第一元数据有关的更新请求;更新单元,被配置成根据所述更新请求,将与所述第一元数据有关的更新信息写入所述第一主副本,使得所述更新信息基于所述全同步协议,被同步至所述多个第二节点各自的所述第一备副本,以供所述多个第二节点在使用所述第一元数据时,根据所述更新信息,获取所述第一元数据的更新数据。
24.第四方面,本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
25.第五方面,本说明书实施例提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现如第一方面中任一实现方式描述的方法。
26.第六方面,本说明书实施例提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令该计算机执行如第一方面中任一实现方式描述的方法。
27.在本说明书的上述实施例提供的方案中,分布式数据库可以包括多个数据库节点,该方案可以支持在分布式数据库中预先建立目标复制表,目标复制表的第一主副本可以保存在该多个数据库节点中的第一节点上,目标复制表的第一备副本可以保存在其余的多个第二节点上,并且第一主副本和第一备副本之间采用全同步协议。基于此,在用户修改分布式数据库中任意的第一数据表的第一元数据时,第一节点可以接收到与第一元数据有关的更新请求,并且可以根据该更新请求,将与第一元数据有关的更新信息写入第一主副本,使得该更新信息基于全同步协议,被同步至该多个第二节点各自的第一备副本,以供该多个第二节点在使用第一元数据时,根据该更新信息,获取第一元数据的更新数据。由此,通过对目标复制表的有效利用,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。
附图说明
28.为了更清楚地说明本说明书披露的多个实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书披露
的多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
29.图1是本说明书的一些实施例可以应用于其中的一个示例性系统架构图;图2是在分布式数据库中同步更新元数据的方法的一个实施例的示意图;图3是元数据同步更新过程的一个示意图;图4是元数据表的存储方式的一个示意图;图5是在分布式数据库中同步更新元数据的方法的一个实施例的示意图;图6是在分布式数据库中同步更新元数据的方法的一个实施例的示意图;图7是第二节点检测本地内存是否缓存有数据表t1的元数据的最新版本号的方法的一个示意图;图8是在分布式数据库中同步更新元数据的装置的一个结构示意图。
具体实施方式
30.下面结合附图和实施例对本说明书作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
31.需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。在不冲突的情况下,本说明书中的实施例及实施例中的特征可以相互组合。
32.如前所述,目前在大规模分布式数据库中,在用户修改某个数据表的元数据后,有可能一部分数据库节点读到该数据表更新后的元数据,另一部分数据库节点读到该数据表更新前的元数据。
33.基于此,本说明书的一些实施例提供了在分布式数据库中同步更新元数据的方法,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。具体地,图1示出了适用于这些实施例的示例性系统架构图。
34.在本说明书实施例中,分布式数据库,例如oceanbase等数据库,包括多个数据库节点,图1示出的系统架构包括该多个数据库节点,例如节点s1、s2、s3、s4、s5。其中,oceanbase数据库为分布式关系型数据库。应该理解,图1中示出的多个数据库节点只是示例性节点,实际应用中可以有更多的节点,在此不做具体限定。
35.需要说明,本说明书实施例中的分布式数据库在支持创建普通的数据表的同时,还支持创建复制表。复制表可以理解为特殊的数据表,其具有实时同步数据等特性。
36.实际上,数据表可以具有复制表属性,该属性可以对应用于表征普通表的第一值,以及用于表征复制表的第二值。在创建数据表时,可以通过将该数据表的复制表属性的属性值设置为第二值,以创建复制表。当然,对于已创建的普通的数据表,可以通过将该数据表的复制表属性的属性值从第一值修改为第二值,以将该数据表变更为复制表。
37.复制表通常会存储在上述多个数据库节点中的各个节点上。具体地,复制表的主副本存储在上述多个数据库节点中的某个节点上,复制表的备副本存储在其余的多个节点上。应该理解,该多个节点为上述多个数据库节点中除该某个节点以外的各个节点。其中,复制表的主副本和备副本之间采用全同步协议。
38.基于全同步协议,更新到复制表的主副本的数据,会被实时同步更新到复制表的备副本中。在一个例子中,具体的更新逻辑一般包括,每当在复制表的主副本上执行一项操作,可以记录与该项操作有关的redo log(重做日志),之后可以将redo log发送至上述多个节点,使得上述多个节点根据redo log,在复制表的备副本上执行相同的操作。由此,可以保证复制表的主副本和备副本保存相同的数据。
39.基于复制表所具有的能将自己的数据实时同步更新到所有数据库节点的特性,可以在分布式数据库中预先创建与元数据更新有关的目标复制表,例如图1中示出的复制表sv。复制表sv可以存储与分布式数据库的元数据有关的更新信息。该更新信息可以为具体的更新数据,或者也可以为更新标记等,在此不做具体限定。
40.复制表sv的主副本保存在上述多个数据库节点中的某个节点上,例如保存在图1中示出的节点s1上。复制表sv的备副本,可以保存在其余的多个节点上,例如保存在图1中示出的节点s2、s3、s4、s5上。进一步地,复制表sv的主副本和备副本可以具体保存在其所在的数据库节点的磁盘上。
41.另外,分布式数据库中还预先创建有普通的数据表,例如包括但不限于如图1中示出的数据表t1。其中,数据表t1例如可以是用于存储用户数据或业务数据等的数据表,在此不做具体限定。
42.数据表t1通常保存在上述多个数据库节点中的部分节点上,例如可以保存在如图1中示出的节点s3、s4、s5上。具体地,数据表t1的主副本可以保存在该部分节点中的某个节点上,数据表t1的备副本可以保存在该部分节点中的其余节点上。进一步地,数据表t1的主副本和备副本可以具体保存在其所在的数据库节点的磁盘上。
43.需要指出,由于普通的数据表的存储方式不是本方案的重点,因而在图1中未针对数据表t1区分主副本和备副本。
44.在如前所述的分布式数据库中,对一个表的读写操作,通常在该表的主副本上执行。因而,该表的主副本所在的数据库节点相对于该表来说,可以视为该表的主控节点,针对该表的处理请求可以路由到该主控节点上执行。
45.基于此,复制表sv的主副本所在的节点s1,可以视为复制表sv的主控节点,节点s1可以接收针对复制表sv的处理请求。
46.以数据表t1为例,当用户修改数据表t1的元数据时,节点s1可以接收到与数据表t1的元数据有关的更新请求。
47.之后,节点s1可以根据所接收的更新请求,将与数据表t1的元数据有关的更新信息m写入复制表sv的主副本。其中,更新信息m可以为数据表t1的元数据的更新数据,或者也可以为与数据表t1的元数据有关的目标更新标记等。之后,更新信息m可以基于如前所述的全同步协议,被自动同步至节点s2、s3、s4、s5各自保存的复制表sv的备副本中。
48.后续,节点s2、s3、s4、s5中的任意节点在使用数据表t1的元数据时,可以根据被同步至复制表sv的备副本中的更新信息m,获取数据表t1的元数据的更新数据。由此,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。
49.下面,结合具体的实施例,描述上述方法的具体实施步骤。
50.参看图2,其示出了在分布式数据库中同步更新元数据的方法的一个实施例的示
意图。其中,该分布式数据库包括多个数据库节点,其中的某个节点(下文中称为第一节点)保存有目标复制表的主副本(下文中称为第一主副本),其余的多个节点(下文中称为多个第二节点)保存有目标复制表的备副本(下文中称为第一备副本),第一主副本和第一备副本之间采用全同步协议。该方法包括以下步骤:步骤202,第一节点接收与分布式数据库中第一数据表的第一元数据有关的更新请求;步骤204,第一节点根据更新请求,将与第一元数据有关的更新信息写入第一主副本,使得更新信息基于全同步协议,被同步至多个第二节点各自的第一备副本;步骤206,多个第二节点中任意的第二节点在使用第一元数据时,根据被同步至本地的第一备副本中的更新信息,获取第一元数据的更新数据。
51.下面,对以上各步骤做进一步说明。
52.在步骤202中,第一节点可以实时地接收与分布式数据库中任意的数据表的元数据有关的更新请求。这里,为了便于描述,将该任意的数据表称为第一数据表,将第一数据表的元数据称为第一元数据。其中,该更新请求可以是用户触发的,并且可以包括第一元数据的更新数据。
53.在步骤204中,第一节点可以根据更新请求,将与第一元数据有关的更新信息写入第一主副本,使得更新信息基于全同步协议,被同步至上述多个第二节点各自的第一备副本。
54.在一个例子中,更新请求可以包括第一元数据的更新数据,在步骤204中,第一节点可以将该更新数据作为更新信息写入第一主副本。基于此,该更新数据便会基于全同步协议,被同步至上述多个第二节点各自的第一备副本。可以理解的是,基于此种实现方式,一旦更新数据被写入第一主副本,便会被立即同步至上述多个第二节点各自的第一备副本。因而,在步骤206中,上述多个第二节点中任意的第二节点在使用第一元数据时,可以直接从本地保存的第一备副本中获取第一元数据的更新数据。
55.在将更新数据作为更新信息的实现方式中,图1中示出的更新信息m可以具体为更新数据m。上述多个第二节点中任意的第二节点,例如图1中示出的节点s2,在使用数据表t1的元数据时,可以如图3所示,从本地保存的复制表sv的备副本中获取该元数据的更新数据m。其中,图3是元数据同步更新过程的一个示意图。
56.另外,在将更新数据作为更新信息时,目标复制表可以预先存储有分布式数据库的元数据,例如全量元数据,第一节点可以将更新请求中的更新数据更新至第一主副本。具体地,当该更新数据是有待插入的数据时,第一节点可以将该更新数据直接写入第一主副本。当该更新数据是用于替换第一主副本中已有的某些元数据的数据时,第一节点可以使用该更新数据替换第一主副本中的该某些元数据。
57.需要说明,当目标复制表用于存储分布式数据库的元数据时,由于目标复制表保存在分布式数据库的各个数据库节点上,因而当分布式数据库的元数据的数据量较大时,通常会占用较多的存储空间,会给分布式数据库带来一定的存储压力。
58.为了减轻分布式数据库的存储压力,节约存储空间,在另一个例子中,可以使得目标复制表用于存储与元数据有关的更新标记,而且还可以在分布式数据库中创建用于存储分布式数据库的元数据的元数据表,并将元数据表保存在分布式数据库的部分数据库节点
上。以图1中示出的各个节点为例,元数据表s可以如图4中所示,保存在分布式数据库的节点s1、s2、s3上。
59.应该理解,元数据表的主副本(下文中称为第二主副本)可以保存在上述部分数据库节点中的某个节点上,元数据表的备副本(下文中称为第二备副本)可以保存在上述部分数据库节点中的其余节点上。进一步地,元数据表的主副本和备副本可以保存在其所在的数据库节点的磁盘上。
60.需要指出,目标复制表的第一主副本和元数据表的第二主副本通常保存在同一个数据库节点上,这样可以方便、快捷地更新第一主副本和第二主副本。
61.具体地,当目标复制表用于存储与元数据有关的更新标记时,步骤204可以具体包括如图5中示出的子步骤2041和子步骤2042。在子步骤2041中,第一节点可以确定与第一元数据有关的目标更新标记。在子步骤2042中,第一节点可以将目标更新标记写入第一主副本。
62.需要说明,在子步骤2041中,第一节点可以采用各种确定方法,确定与第一元数据有关的目标更新标记。
63.作为一个示例,在子步骤2041中,第一节点可以获取目标版本号,其为第一元数据或分布式数据库的元数据的版本号,并且响应于更新数据对应的更新操作而生成。之后,第一节点可以根据目标版本号生成目标更新标记。
64.应该理解,目标版本号具体为第一元数据或分布式数据库的元数据的最新版本号。实际上,任意数据表的元数据的更新,会同时影响该数据表的元数据的版本号和分布式数据库的元数据的版本号。其中,分布式数据库的元数据的版本号可称为全局版本号。换而言之,全局版本号会随着分布式数据库中任意数据表的元数据的更新而更新,任意数据表的元数据的版本号会随着该元数据的更新而更新。
65.实践中,第一节点上可以部署有与目标版本号有关的版本号生成算法,第一节点可以利用该版本号生成算法生成目标版本号。
66.在获取到目标版本号后,第一节点例如可以直接将目标版本号作为目标更新标记,或者,第一节点可以对目标版本号进行哈希计算或签名,将所得的哈希值或签名作为目标更新标记。
67.作为另一个示例,在子步骤2041中,第一节点可以获取包含更新数据的目标元数据,其为加入更新数据后的第一元数据的至少部分内容,或者分布式数据库加入更新数据后的元数据的至少部分内容。之后,第一节点可以根据目标元数据生成目标更新标记。
68.具体地,更新请求可以包括第一元数据的更新数据,第一节点可以获取本地保存的第一元数据或分布式数据库的元数据的至少部分内容,例如,从本地内存和/或保存的第二主副本中获取。之后,第一节点可以对该更新数据和所获取的该至少部分内容进行合并,从而得到目标元数据。在获取到目标元数据后,第一节点例如可以对目标元数据进行哈希计算或签名,将所得的哈希值或签名作为目标更新标记。
69.在执行完子步骤2042之后,目标更新标记会基于全同步协议,被同步至上述多个第二节点各自的第一备副本。之后,如图5所示,在步骤206中,上述多个第二节点中任意的第二节点在使用第一元数据时,可以根据被同步至本地的第一备副本中的目标更新标记,获取第一元数据的更新数据。
70.在一些实施例中,在图5对应的实施例中,更新请求还可以包括第一元数据的更新数据,在步骤2041之后,第一节点还可以如图6所示,通过执行步骤205将更新数据和目标更新标记对应缓存到本地内存中。进一步地,当第一节点保存有第二主副本时,第一节点还可以将缓存的该更新数据更新到第二主副本中。例如,可以在新的更新周期到来时,将该更新数据更新到第二主副本中。
71.基于此,后续,任意的第二节点在需要使用第一元数据时,若基于被同步至本地的第一备副本中的目标更新标记,获知本地内存未缓存第一元数据最新的更新数据,便可以从第一节点获取该更新数据。
72.具体地,步骤206可以进一步包括如图6示出的子步骤2061-2064。在子步骤2061中,上述多个第二节点中任意的第二节点在使用第一元数据时,可以从本地的第一备副本中读取目标更新标记。
73.接着,在子步骤2062中,任意的第二节点可以检测本地内存是否缓存有关联于第一元数据的目标更新标记。例如,该任意的第二节点可以在本地内存中查找关联于第一元数据的历史更新标记。若未查找到,便可以确定本地内存未缓存关联于第一元数据的目标更新标记。在查找到该历史更新标记时,可以接着确定目标更新标记和该历史更新标记是否相同。若确定结果为是,则可以确定本地内存缓存有关联于第一元数据的目标更新标记,进而可以获知本地内存已缓存第一元数据最新的更新数据。若确定结果为否,则可以确定本地内存未缓存关联于第一元数据的目标更新标记,进而可以获知本地内存未缓存第一元数据最新的更新数据。
74.以第一数据表为数据表t1,目标更新标记为数据表t1的元数据的最新版本号为例,参看图7,其示出了任意的第二节点的磁盘上保存的第一备副本中,数据表t1的元数据的版本号由4变更为最新版本号5。另外,该任意的第二节点的本地内存缓存有数据表t1的元数据的历史版本号4,以及对应于历史版本号4的历史更新数据“***”。该任意的第二节点通过比较历史版本号4和最新版本号5,可以确定二者不相同,进而可以获知本地内存缓存的历史更新数据“***”,并不是第一元数据最新的更新数据。
75.当子步骤2062的检测结果为否时,该任意的第二节点可以通过执行子步骤2063,向第一节点发送对第一元数据的更新数据的获取请求。其中,该获取请求可以包括第一数据表的表标识等信息。之后,第一节点在接收到该获取请求后,可以返回该更新数据,例如,可以将缓存的该更新数据返回给该任意的第二节点。由此,该任意的第二节点可以通过执行子步骤2064,接收第一节点返回的该更新数据。
76.显然,通过对子步骤2061-2064的执行,可以确保任意的第二节点在使用第一元数据时,一定能获得第一元数据最新的更新数据,不会出现一部分第二节点读取到第一数据表更新后的元数据,另一部分第二节点读取到第一数据表更新前的元数据的情况。
77.另外,在子步骤2064之后,该任意的第二节点可以通过执行步骤208,将所接收的更新数据和目标更新标记对应缓存到本地内存中。这样,该任意的第二节点再次使用第一元数据时,可以从本地内存中获取该更新数据。
78.具体地,在步骤208之后,当该任意的第二节点再次使用第一元数据时,其可以执行步骤210,从本地的第一备副本中读取目标更新标记,而后执行步骤212,检测本地内存中是否缓存有关联于第一元数据的目标更新标记。由于在步骤212之前,该任意的第二节点已
通过执行步骤208将更新数据和目标更新标记对应缓存到本地内存中,因而步骤212的检测结果必定为是,因此,该任意的第二节点可以响应于该检测结果为是,通过执行步骤214从本地内存中获取第一元数据的更新数据。
79.本说明书的上述实施例描述的在分布式数据库中同步更新元数据的方法,通过对目标复制表的有效利用,可以实现元数据的同步更新,确保在用户修改元数据后,各个数据库节点一定能读到更新后的元数据。
80.需要说明,在目标版本号为最新全局版本号的情况下,在将最新全局版本号同步至上述多个第二节点各自的第一备副本后,该最新全局版本号会影响上述多个第二节点对分布式数据库中各个数据表的元数据的缓存更新。具体地,即便有些数据表的元数据未发生变更,在将该最新全局版本号同步至上述多个第二节点各自的第一备副本后,上述多个第二节点中任意的第二节点在首次使用这些数据表的元数据时,也会基于被同步至本地的第一备副本中的该最新全局版本号,对这些数据表的元数据进行缓存更新。显然,采用将最新全局版本号作为目标版本号的实现方式,会致使第二节点执行一些冗余操作。
81.另外,在目标版本号为单个数据表的元数据的最新版本号的情况下,在将该最新版本号同步至上述多个第二节点各自的第一备副本后,该最新版本号只会影响上述多个第二节点对该单个数据表的元数据的缓存更新。相较于将最新全局版本号作为目标版本号的实现方式,能有效避免第二节点执行冗余操作。
82.进一步参考图8,本说明书提供了一种在分布式数据库中同步更新元数据的装置的一个实施例。该分布式数据库包括多个数据库节点,其中的第一节点保存有目标复制表的第一主副本,其余的多个第二节点保存有目标复制表的第一备副本,第一主副本和第一备副本之间采用全同步协议。该装置可以应用于第一节点。
83.如图8所示,本实施例的在分布式数据库中同步更新元数据的装置800包括:接收单元801和更新单元802。其中,接收单元801被配置成接收与分布式数据库中第一数据表的第一元数据有关的更新请求;更新单元802被配置成根据更新请求,将与第一元数据有关的更新信息写入第一主副本,使得更新信息基于全同步协议,被同步至上述多个第二节点各自的第一备副本,以供上述多个第二节点在使用第一元数据时,根据更新信息,获取第一元数据的更新数据。
84.在一些实施例中,更新请求包括上述更新数据;以及更新单元802可以进一步被配置成:将上述更新数据写入第一主副本。
85.在一些实施例中,更新单元802可以包括:确定子单元(图中未示出),被配置成确定与第一元数据有关的目标更新标记;更新子单元(图中未示出),被配置成将目标更新标记写入第一主副本。
86.在一些实施例中,确定子单元可以进一步被配置成:获取目标版本号,其为第一元数据或分布式数据库的元数据的版本号,并且响应于上述更新数据对应的更新操作而生成;根据目标版本号生成目标更新标记。
87.在一些实施例中,确定子单元可以进一步被配置成:将目标版本号作为目标更新标记。
88.在一些实施例中,确定子单元可以进一步被配置成:对目标版本号进行哈希计算或签名,将所得的哈希值或签名作为目标更新标记。
89.在一些实施例中,确定子单元可以进一步被配置成:获取包含上述更新数据的目标元数据,其为加入上述更新数据后的第一元数据的至少部分内容,或者分布式数据库加入上述更新数据后的元数据的至少部分内容;根据目标元数据生成目标更新标记。
90.在一些实施例中,确定子单元可以进一步被配置成:对目标元数据进行哈希计算或签名,将所得的哈希值或签名作为目标更新标记。
91.在一些实施例中,更新请求包括上述更新数据;以及上述装置800还可以包括:存储单元(图中未示出),被配置成将上述更新数据和目标更新标记对应缓存到本地内存中。
92.在一些实施例中,第一节点还保存有元数据表的第二主副本,元数据表存放有分布式数据库的元数据;以及存储单元还可以被配置成:将缓存的更新数据更新到第二主副本中。
93.在一些实施例中,接收单元801还可以被配置成:在目标更新标记被同步至上述多个第二节点各自的第一备副本之后,接收上述多个第二节点中任意的第二节点发送的对上述更新数据的获取请求,获取请求是该任意的第二节点,在检测出其内存未缓存关联于第一元数据的目标更新标记而发送的;上述装置800还可以包括:发送单元(图中未示出),被配置成将上述更新数据返回给该任意的第二节点。
94.在图8对应的装置实施例中,各单元的具体处理及其带来的技术效果可参考前文中方法实施例的相关说明,在此不再赘述。
95.本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的在分布式数据库中同步更新元数据的方法。
96.本说明书实施例还提供了一种计算设备,包括存储器和处理器,其中,该存储器中存储有可执行代码,该处理器执行该可执行代码时,实现以上各方法实施例分别描述的在分布式数据库中同步更新元数据的方法。
97.本说明书实施例还提供了一种计算机程序,其中,当该计算机程序在计算机中执行时,令计算机执行以上各方法实施例分别描述的在分布式数据库中同步更新元数据的方法。
98.本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
99.在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
100.以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1