本技术涉及分布式数据库,尤其涉及一种分布式数据库的并发控制方法和装置。
背景技术:
1、在数据库的相关技术中,常常面临如何对数据库进行并发控制的问题。其中,数据库并发控制是为了保证在相近时间对数据库进行操作时,能够正确地协调这些操作,避免出现数据不一致。在非分布式数据库的并发控制方案中,可以通过时间戳机制、乐观并发控制等方案,实现其并发控制。
2、然而,上述并发控制方案中,无法解决分布式数据库的分片间的数据表的元数据不一致的问题。
3、可见,如何减少甚至避免分布式数据库的分片间的数据表的元数据不一致的情况发生概率,是一个值得关注的技术问题。
技术实现思路
1、鉴于此,为解决上述部分或全部技术问题,本技术实施例提供一种分布式数据库的并发控制方法和装置。
2、第一方面,本技术实施例提供一种分布式数据库的并发控制方法,所述方法应用于所述分布式数据库所在的数据库系统中的第一计算节点,所述方法包括:
3、接收数据定义语言语句,其中,所述数据定义语言语句用于定义所述分布式数据库中的数据表的结构和模式,所述数据定义语言语句包括所述数据表的表名;
4、解析所述数据定义语言语句,以确定所述数据定义语言语句中的所述表名;
5、确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象;其中,在当前存在所述持有对象的情况下,所述持有对象的数量为1;
6、在当前不存在所述持有对象的情况下,向所述数据库系统中的存储节点发送所述数据定义语言语句,以使所述存储节点执行所述数据定义语言语句。
7、在一个可能的实施方式中,在所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象之后,所述方法还包括:
8、在当前存在所述持有对象的情况下,执行针对所述元数据锁的锁等待操作;
9、确定所述元数据锁是否被释放;
10、基于所述元数据锁是否被释放,确定是否向所述数据库系统中的存储节点发送所述数据定义语言语句。
11、在一个可能的实施方式中,所述确定所述元数据锁是否被释放,包括:
12、确定所述元数据锁是否在目标时间段内被释放;以及
13、所述基于所述元数据锁是否被释放,确定是否向所述数据库系统中的存储节点发送所述数据定义语言语句,包括以下之一:
14、在所述元数据锁在所述目标时间段内被释放的情况下,在所述元数据锁被释放后,向所述数据库系统中的存储节点发送所述数据定义语言语句;
15、在所述元数据锁在所述目标时间段内未被释放的情况下,无需向所述数据库系统中的存储节点发送所述数据定义语言语句,以及取消执行所述锁等待操作。
16、在一个可能的实施方式中,所述接收数据定义语言语句,包括:
17、接收应用端发送的数据定义语言语句;以及
18、在所述元数据锁在所述目标时间段内未被释放的情况下,所述方法还包括:
19、向所述应用端发送第一响应信息,其中,所述第一响应信息表示针对所述元数据锁的等待时长超过所述目标时间段表示的时长。
20、在一个可能的实施方式中,所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象,包括:
21、基于所述表名,生成第一请求,其中,所述第一请求包括所述表名;
22、向所述数据库系统中的管理节点发送所述第一请求,以使所述管理节点确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象;
23、在接收到所述管理节点发送的第二响应信息的情况下,确定当前存在针对所述表名表示的所述数据表的元数据锁的持有对象,其中,所述第二响应信息表示所述管理节点确定当前存在所述持有对象。
24、在一个可能的实施方式中,所述方法还包括:
25、在接收到所述管理节点发送的第三响应信息的情况下,确定当前不存在所述持有对象,其中,第三响应信息用于指示计算节点继续数据定义语言语句的执行;以及
26、在当前不存在所述持有对象的情况下,所述数据库系统中的管理节点用于执行以下步骤:
27、将所述第一请求存储至预设队列的队尾,以阻塞所述第一请求的执行,其中,所述预设队列用于存储所述数据表对应的第一请求;
28、确定所述数据表的元数据锁是否被释放;
29、在所述数据表的元数据锁被释放的情况下,确定存储于所述预设队列的队首的第一请求;
30、确定第二计算节点,其中,所述第二计算节点为发送存储于所述队首的第一请求的计算节点;
31、向所述第二计算节点发送第三响应信息。
32、在一个可能的实施方式中,在当前不存在所述持有对象的情况下,所述管理节点还用于将所述第一计算节点作为所述数据表的元数据锁的持有对象;以及
33、在所述存储节点执行完成所述数据定义语言语句的情况下,所述方法还包括:
34、向所述管理节点发送第二请求,以使所述管理节点取消将所述第一计算节点作为所述数据表的元数据锁的持有对象。
35、在一个可能的实施方式中,在所述存储节点执行完成所述数据定义语言语句的情况下,所述方法还包括:
36、确定所述存储节点执行完成所述数据定义语言语句后的目标元数据;
37、向所述数据库系统中除所述第一计算节点之外的其他计算节点广播所述目标元数据。
38、第二方面,本技术实施例提供一种分布式数据库的并发控制装置,所述装置设置于所述分布式数据库所在的数据库系统中的第一计算节点,所述装置包括:
39、接收单元,用于接收数据定义语言语句,其中,所述数据定义语言语句用于定义所述分布式数据库中的数据表的结构和模式,所述数据定义语言语句包括所述数据表的表名;
40、解析单元,用于解析所述数据定义语言语句,以确定所述数据定义语言语句中的所述表名;
41、第一确定单元,用于确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象;其中,在当前存在所述持有对象的情况下,所述持有对象的数量为1;
42、第一发送单元,用于在当前不存在所述持有对象的情况下,向所述数据库系统中的存储节点发送所述数据定义语言语句,以使所述存储节点执行所述数据定义语言语句。
43、在一个可能的实施方式中,在所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象之后,所述装置还包括:
44、执行单元,用于在当前存在所述持有对象的情况下,执行针对所述元数据锁的锁等待操作;
45、第二确定单元,用于确定所述元数据锁是否被释放;
46、第三确定单元,用于基于所述元数据锁是否被释放,确定是否向所述数据库系统中的存储节点发送所述数据定义语言语句。
47、在一个可能的实施方式中,所述确定所述元数据锁是否被释放,包括:
48、确定所述元数据锁是否在目标时间段内被释放;以及
49、所述基于所述元数据锁是否被释放,确定是否向所述数据库系统中的存储节点发送所述数据定义语言语句,包括以下之一:
50、在所述元数据锁在所述目标时间段内被释放的情况下,在所述元数据锁被释放后,向所述数据库系统中的存储节点发送所述数据定义语言语句;
51、在所述元数据锁在所述目标时间段内未被释放的情况下,无需向所述数据库系统中的存储节点发送所述数据定义语言语句,以及取消执行所述锁等待操作。
52、在一个可能的实施方式中,所述接收数据定义语言语句,包括:
53、接收应用端发送的数据定义语言语句;以及
54、在所述元数据锁在所述目标时间段内未被释放的情况下,所述装置还包括:
55、第二发送单元,用于向所述应用端发送第一响应信息,其中,所述第一响应信息表示针对所述元数据锁的等待时长超过所述目标时间段表示的时长。
56、在一个可能的实施方式中,所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象,包括:
57、基于所述表名,生成第一请求,其中,所述第一请求包括所述表名;
58、向所述数据库系统中的管理节点发送所述第一请求,以使所述管理节点确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象;
59、在接收到所述管理节点发送的第二响应信息的情况下,确定当前存在针对所述表名表示的所述数据表的元数据锁的持有对象,其中,所述第二响应信息表示所述管理节点确定当前存在所述持有对象。
60、在一个可能的实施方式中,所述装置还包括:
61、第四确定单元,用于在接收到所述管理节点发送的第三响应信息的情况下,确定当前不存在所述持有对象,其中,第三响应信息用于指示计算节点继续数据定义语言语句的执行;以及
62、在当前不存在所述持有对象的情况下,所述数据库系统中的管理节点用于执行以下步骤:
63、将所述第一请求存储至预设队列的队尾,以阻塞所述第一请求的执行,其中,所述预设队列用于存储所述数据表对应的第一请求;
64、确定所述数据表的元数据锁是否被释放;
65、在所述数据表的元数据锁被释放的情况下,确定存储于所述预设队列的队首的第一请求;
66、确定第二计算节点,其中,所述第二计算节点为发送存储于所述队首的第一请求的计算节点;
67、向所述第二计算节点发送第三响应信息。
68、在一个可能的实施方式中,在当前不存在所述持有对象的情况下,所述管理节点还用于将所述第一计算节点作为所述数据表的元数据锁的持有对象;以及
69、在所述存储节点执行完成所述数据定义语言语句的情况下,所述装置还包括:
70、第三发送单元,用于向所述管理节点发送第二请求,以使所述管理节点取消将所述第一计算节点作为所述数据表的元数据锁的持有对象。
71、在一个可能的实施方式中,在所述存储节点执行完成所述数据定义语言语句的情况下,所述装置还包括:
72、第五确定单元,用于确定所述存储节点执行完成所述数据定义语言语句后的目标元数据;
73、广播单元,用于向所述数据库系统中除所述第一计算节点之外的其他计算节点广播所述目标元数据。
74、第三方面,本技术实施例提供一种电子设备,包括:
75、存储器,用于存储计算机程序;
76、处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本技术上述第一方面的分布式数据库的并发控制方法中任一实施例的方法。
77、第四方面,本技术实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述第一方面的分布式数据库的并发控制方法中任一实施例的方法。
78、第五方面,本技术实施例提供一种计算机程序产品,所述计算机程序产品包括计算机可读代码,当所述计算机可读代码在设备上运行时,使得该设备中的处理器实现如上述第一方面的分布式数据库的并发控制方法中任一实施例的方法。
79、本技术实施例提供的分布式数据库的并发控制方法,可以应用于所述分布式数据库所在的数据库系统中的第一计算节点,其可以接收数据定义语言语句,其中,所述数据定义语言语句用于定义所述分布式数据库中的数据表的结构和模式,所述数据定义语言语句包括所述数据表的表名,之后,解析所述数据定义语言语句,以确定所述数据定义语言语句中的所述表名,然后,确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象;其中,在当前存在所述持有对象的情况下,所述持有对象的数量为1,随后,在当前不存在所述持有对象的情况下,向所述数据库系统中的存储节点发送所述数据定义语言语句,以使所述存储节点执行所述数据定义语言语句。由此,可以通过限制数据表的元数据锁的持有对象小于或等于1,减少甚至避免了分布式数据库的分片间的数据表的元数据不一致的情况发生概率。此外,在相近时间访问同一数据表的情况下,只需确保当前不存在该数据表的持有对象,即可执行该数据表对应的数据定义语言语句,这样,可以提高分布式数据库的并发控制效率。
1.一种分布式数据库的并发控制方法,其特征在于,所述方法应用于所述分布式数据库所在的数据库系统中的第一计算节点,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,在所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象之后,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述确定所述元数据锁是否被释放,包括:
4.根据权利要求3所述的方法,其特征在于,所述接收数据定义语言语句,包括:
5.根据权利要求1所述的方法,其特征在于,所述确定当前是否存在针对所述表名表示的所述数据表的元数据锁的持有对象,包括:
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,在当前不存在所述持有对象的情况下,所述管理节点还用于将所述第一计算节点作为所述数据表的元数据锁的持有对象;以及
8.根据权利要求1-7之一所述的方法,其特征在于,在所述存储节点执行完成所述数据定义语言语句的情况下,所述方法还包括:
9.一种分布式数据库的并发控制装置,其特征在于,所述装置设置于所述分布式数据库所在的数据库系统中的第一计算节点,所述装置包括:
10.一种电子设备,其特征在于,包括:
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现上述权利要求1-8任一项的所述分布式数据库的并发控制方法。
