分布式数据库日志处理方法和装置、电子设备和存储介质与流程
未命名
09-11
阅读:77
评论:0

1.本技术涉及分布式数据库技术领域,尤其涉及一种分布式数据库日志处理方法和装置、电子设备和存储介质。
背景技术:
2.传统数据库系统中,都会对外提供cdc(change data capture)接口。cdc 即变化数据捕捉。是数据库进行备份的一种方式,常用于大量数据的备份工作。分为入侵式的和非入侵式的备份方法,入侵式的备份方法包括:基于触发器备份、基于时间戳备份、基于快照备份,非入侵式的备份方法是基于日志的备份。例如mysql 基于日志的cdc就是非入侵式的备份方法,即开启mysql binary log。
3.而目前主流的分布式数据库因为其自身的分布式特性,数据分布存储在若干个数据分片中,导致其对外没有统一的cdc(change data capture)接口。对于很多需要消费分布式数据库备份数据的第三方工具来说如果没有统一的cdc接口的话,其对每一个分片(即,数据节点,一个分布式数据库包括多个数据节点)都需要部署一个队列,这样不仅需要大量的人力保障运维,还需要额外增加大量中间机资源,费效比非常低下。因此,提供一种面向分布式数据库的cdc数据备份方法和系统对分布式数据库兼容性的完善与对外服务功能的加强有着重要的意义。
4.由此可见,相关技术中的消费分布式数据库备份数据的第三方工具存在对每一个数据节点都需要部署一个队列,不仅需要大量的人力保障运维,还需要额外增加大量中间机资源,费效比非常低下的技术问题。
技术实现要素:
5.本技术提供了一种分布式数据库日志处理方法和装置、电子设备和存储介质,以至少解决相关技术中存在的至少一个技术的问题。
6.根据本技术实施例的一个方面,提供了一种分布式数据库日志处理方法,包括:获取所述分布式数据库下多个数据节点中每个数据节点的日志文件;根据所述日志文件中每个节点事务的事务提交信息 ,确定出与每个分布式事务对应的所述节点事务,其中,所述每个节点事务的事务提交信息用于指示所述每个节点事务开始写操作的次序以及所述每个节点事务所属的分布式事务提交时的全局顺序;按照所述与每个分布式事务对应的所述节点事务,对各个所述节点事务进行组合,得到用于指示每个分布式事务的全局日志。
7.可选地,如前述的方法,所述获取所述分布式数据库下多个数据节点中每个数据节点的日志文件,包括:获取分布式数据库下多个数据节点中的每个数据节点的二进制日志;将所有所述二进制日志复制至目标备机,得到所述每个数据节点的日志文件。
8.可选地,如前述的方法,所述根据所述日志文件中每个节点事务的事务提交信息,
确定出与每个分布式事务对应的所述节点事务,包括:将每个日志文件中的节点事务,读取至所述每个日志文件对应的事务队列中;按照所述每个节点事务的事务提交信息,并通过对各个所述事务队列中的节点事务进行读取,得到所述每个分布式事务对应的所述节点事务。
9.可选地,如前述的方法,所述将每个日志文件中的节点事务,读取至所述每个日志文件对应的事务队列中,包括:启动与所述数据节点对应的fetch线程,并创建与每个fetch线程对应的所述事务队列;按照与所述每个数据节点对应的fetch线程,通过所述每个fetch线程对所述目标备机中的每个日志文件进行读取,得到与所述每个数据节点对应的中继日志;将所述中继日志中的所述节点事务读取至所述事务队列中。
10.可选地,如前述的方法,所述按照所述每个节点事务的事务提交信息,并通过对各个所述事务队列中的节点事务进行读取,得到所述每个分布式事务对应的所述节点事务,包括:启动一个目标线程,打开用于存储所述分布式数据库的全局日志信息的全局日志文件,并创建所述目标线程对应的完整队列;通过所述目标线程读取得到每个fetch线程对应的事务队列中位于第一的首位事务;通过解析每个首位事务的事务提交信息中的首位分布式事务id以及首位分片信息后,在所有首位事务中确定出指定分布式节点事务,其中,分布式事务id用于指示唯一的分布式事务,分片信息用于指示所对应的分布式事务中的每个节点事务所分布于的数据节点,分布式节点事务所对应的分片信息涉及多个数据节点,对于任一个所述指定分布式节点事务,所述指定分布式节点事务的首位分片信息指示包含所述指定分布式节点事务的指定分布式事务分布于多个数据节点;按照每个指定分布式节点事务的首位分布式事务id,依次确定出与每个首位分布式事务id对应的节点事务组,并将所述节点事务组放入所述完整队列中,其中,与每个首位分布式事务id对应的节点事务组中包括:所有指定分布式节点事务中与所述每个首位分布式事务id对应的第一目标分布式节点事务,以及通过所述第一目标分布式节点事务的所述首位分片信息指示的目标数据节点,在所述目标数据节点对应的所述事务队列中,查询到的第二目标分布式节点事务,所述目标数据节点异于所述指定分布式节点事务对应的指定数据节点,所述第二目标分布式节点事务的分布式事务id与所述第一目标分布式节点事务的所述首位分布式事务id相同;基于所述与每个首位分布式事务id对应的节点事务组,得到所述每个分布式事务对应的所述节点事务。
11.可选地,如前述的方法,在所述通过所述目标线程读取得到每个fetch线程中位于第一的首位事务之后,所述方法还包括:对于任一个所述首位事务,在解析所述首位事务的事务提交信息中的首位分布式事务id以及首位指定分片信息后,确定所述首位事务为单机事务的情况下,将所述首位事务写入所述全局日志文件中。
12.可选地,如前任一项所述的方法,在所述获取所述分布式数据库下多个数据节点中的日志信息之前,所述方法还包括:计算节点在确定指定事务开始写操作时,向全局管理组件申请得到与所述指定事务对应的指定全局事务id;计算节点接收到指定commit(即,提交)请求时,向全局管理组件申请得到与所述指定commit请求所提交的指定分布式事务对应的指定分布式事务id,确定出所述分布式数据库全局已提交的指定最小全局事务id,并基于出所述分布式事务涉及的数据单元确定出指定分片信息,其中,所述指定分布式事务包括所述指定事务;所述计算节点将包括所述指定全局事务id、所述指定分布式事务id、所述指定最小全局事务id以及所述指定分片信息的指定事务提交信息作为指定commit请求中的hint信息发送给所述指定事务对应的指定数据节点;所述指定数据节点将作为所述hint信息的所述指定事务提交信息与所述指定事务绑定写入所述指定数据节点的指定日志文件中。
13.根据本技术实施例的另一个方面,还提供了一种分布式数据库日志处理装置,包括:获取模块,用于获取所述分布式数据库下多个数据节点中每个数据节点的日志文件;确定模块,用于根据所述日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的所述节点事务,其中,所述每个节点事务的事务提交信息用于指示所述每个节点事务开始写操作的次序以及所述每个节点事务所属的分布式事务提交时的全局顺序;全局日志模块,用于按照所述与每个分布式事务对应的所述节点事务,对各个所述节点事务进行组合,得到用于指示每个分布式事务的全局日志。
14.根据本技术实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
15.根据本技术实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
16.在本技术实施例中,通过根据日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的节点事务;以及按照与每个分布式事务对应的节点事务,对各个节点事务进行组合,得到用于指示每个分布式事务的全局日志;从而可以合并各个数据节点的节点事务,并构建得到分布式数据库级别的全局逻辑日志,以便于其他第三方工具可以通过消费该全局日志即可消费得到完整的分布式事务,而无需去每个分布式事务对应的节点事务所分布于的各个数据节点进行消费,从而可以避免因为需要对每一个数据节点都部署一个队列,导致的不仅需要大量的人力保障运维,还需要额外增加大量中间机资源,费效比非常低下的技术问题。
附图说明
17.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
18.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
19.图1是根据本技术实施例的一种可选的分布式数据库日志处理方法的流程示意图;图2是根据本技术实施例的一种可选的ctid的结构示意图;图3是根据本技术实施例的一种可选的ctid生成方法的流程示意图;图4是根据本技术实施例的一种可选的分布式数据库日志处理装置的结构框图;图5是根据本技术实施例的一种可选的电子设备的结构框图。
具体实施方式
20.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
21.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
22.根据本技术实施例的一个方面,提供了一种分布式数据块日志处理方法。可选地,在本实施例中,上述分布式数据块日志处理方法可以应用于由终端和服务器所构成的硬件环境中。服务器通过网络与终端进行连接,可用于为终端或终端上安装的客户端提供服务(如广告推送服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器提供数据存储服务。
23.上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:wifi(wireless fidelity,无线保真),蓝牙。终端可以并不限定于为pc、手机、平板电脑等。
24.本技术实施例的分布式数据块日志处理方法可以由服务器来执行,也可以由终端来执行,还可以是由服务器和终端共同执行。其中,终端执行本技术实施例的分布式数据块日志处理方法也可以是由安装在其上的客户端来执行。
25.以由服务器来执行本实施例中的分布式数据块日志处理方法为例,图1为本技术
实施例提供的一种分布式数据库日志处理方法,包括如下所述步骤:步骤s101,获取分布式数据库下多个数据节点中每个数据节点的日志文件。
26.本实施例中的分布式数据块日志处理方法可以应用于需要消费分布式数据库备份数据的场景,例如:分布式数据库的下游第三方工具消费分布式数据库中的备份数据的场景。
27.数据库的事务是一种机制,一个操作序列,包含了一组对数据库的操作命令。事务把这个一组命令作为一个整体执行,即这一组作为一个不可分割的整体,要么全部执行,要么不执行,事务由事务开始到事务结束之间的全部数据操作组成。
28.数据库的事务一般具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 acid 特性。
29.原子性(atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
30.一致性(consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
31.隔离性(isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
32.持久性(durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。分布式数据库中设有多个数据节点,并且一个分布式事务可能包括对多个数据节点进行操作的子事务(即,节点事务)。每个数据节点的日志文件中记录有该数据节点的各个节点事务。
33.可选地,可以通过对每个数据节点的日志文件进行读取,以得到每个数据节点的日志文件。
34.步骤s102,根据日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的节点事务,其中,每个节点事务的事务提交信息用于指示每个节点事务开始写操作的次序以及每个节点事务所属的分布式事务提交时的全局顺序。
35.在得到每个节点事务的日志文件之后,即可基于该日志文件,确定出日志文件中的每个节点事务;并确定出每个节点事务的事务提交信息。
36.事务提交信息可以是用于唯一指示每个节点事务的用于指示各个节点事务提交时的全局顺序的逻辑信息。
37.在确定出每个节点事务的事务提交信息之后,可以基于该事务提交信息确定出与每个分布式事务对应的节点事务,也就是说,基于事务提交信息,确定出对应于同一个分布式事务的各个节点事务。
38.每个节点事务所属的分布式事务提交时的全局顺序即为全局事务commit提交的顺序,commit命令用于把事务所做的修改保存到数据库,它把上一个commit或rollback命令之后的全部事务都保存到数据库。
39.例如,对应于同一个分布式事务的每个节点事务可以具有相同的用于指示每个节点事务所属的分布式事务提交时的全局顺序的分布式事务id。例如,当某一分布式事务i的分布式事务id为a时,可以在所有日志文件中确定出分布式事务id为a的所有节点事务a,然后将所有节点事务a确定为与该分布式事务i对应的节点事务。
40.步骤s103,按照与每个分布式事务对应的节点事务,对各个节点事务进行组合,得到用于指示每个分布式事务的全局日志。
41.在确定出与每个分布式事务对应的节点事务之后,可以将与一个分布式事务对应的各个节点事务进行组合,进而可以整合得到用于指示每个分布式事务,且对应于分布式数据库全局的全局日志。
42.进一步的,全局日志可以通过统一对外的cdc(change data capture)接口,供第三方工具进行消费。
43.本实施例中的方法,通过根据日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的节点事务;以及按照与每个分布式事务对应的节点事务,对各个节点事务进行组合,得到用于指示每个分布式事务的全局日志;从而可以合并各个数据节点的节点事务,并构建得到分布式数据库级别的全局逻辑日志,以便于其他第三方工具可以通过消费该全局日志即可消费得到完整的分布式事务,而无需去每个分布式事务对应的节点事务所分布于的各个数据节点进行消费,从而可以避免因为需要对每一个数据节点都部署一个队列,导致的不仅需要大量的人力保障运维,还需要额外增加大量中间机资源,费效比非常低下的技术问题。
44.作为一种可选的实施例,如前述的方法,所述步骤s101获取分布式数据库下多个数据节点中每个数据节点的日志文件,包括如下所述步骤:步骤s201,获取分布式数据库下多个数据节点中的每个数据节点的二进制日志;步骤s202,将所有二进制日志复制至目标备机,得到每个数据节点的日志文件。
45.也就是说,在对于每个数据节点来说,直接读取得到的是二进制日志,即,binlog文件。
46.在本实施例中,可以通过多源复制的方式,将所有二进制日志复制至目标备机中,以得到每个数据节点的日志文件。其中,目标备机可以是用于存储上述的全局日志的备机。
47.通过本实施例中的方法,可以统一得到与所有二进制日志对应的日志文件,便于后期的处理效率的提升。
48.作为一种可选的实施例,如前述的方法,所述步骤s102根据日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的节点事务,包括如下所述步骤:步骤s301,将每个日志文件中的节点事务,读取至每个日志文件对应的事务队列中。
49.作为一种可选的实施例,如前述的方法,所述步骤s301将每个日志文件中的节点事务,读取至每个日志文件对应的事务队列中,包括如下所述步骤:步骤s401,启动与数据节点对应的fetch线程,并创建与每个fetch线程对应的事务队列;步骤s402,按照与每个数据节点对应的fetch线程,通过每个fetch线程对目标备机中的每个日志文件进行读取,得到与每个数据节点对应的中继日志;步骤s403,将中继日志中的节点事务读取至事务队列中。
50.在本实施例中,假设有n个数据节点;启动n个fetch线程,每个fetch线程对一个数据节点的日志文件进行读取,得到对应的relaylog(即,中继日志);
每个fetch线程都有一个事务队列tq(transaction queue),事务队列的队列大小(即为队列可用于存储的节点事务的数量)可设,例如,队列大小的初始值可以设为32;fetch线程将日志文件中节点事务读到tq里,如果tq已满,则等待tq中的节点事务被消费之后,再从日志文件中读取新的节点事务至tq中。
51.步骤s302,按照每个节点事务的事务提交信息,并通过对各个事务队列中的节点事务进行读取,得到每个分布式事务对应的节点事务。
52.作为一种可选的实施例,如前述的方法,按照每个节点事务的事务提交信息,并通过对各个事务队列中的节点事务进行读取,得到每个分布式事务对应的节点事务,包括如下所述步骤:步骤s501,启动一个目标线程,打开用于存储分布式数据库的全局日志信息的全局日志文件,并创建目标线程对应的完整队列。
53.在本实施例中,可以通过启动一个compose线程作为目标线程,打开位于目标备机中的二进制日志文件(即,全局日志文件),创建一个完整分布式事务队列fdtq(即,完整队列)。
54.步骤s502,通过目标线程读取得到每个fetch线程对应的事务队列中位于第一的首位事务。
55.在启动目标线程之后,可以通过该目标线程(即, compose线程)读取每个fetch线程的tq里的第一个事务(即,首位事务),进一步的,目标线程还可以通知对应的fetch线程,让其再读一个节点事务并放入该fetch线程对应的tq中。
56.步骤s503,通过解析每个首位事务的事务提交信息中的首位分布式事务id以及首位分片信息后,在所有首位事务中确定出指定分布式节点事务,其中,分布式事务id用于指示唯一的分布式事务,分片信息用于指示所对应的分布式事务中的每个节点事务所分布于的数据节点,分布式节点事务所对应的分片信息涉及多个数据节点,对于任一个指定分布式节点事务,指定分布式节点事务的首位分片信息指示包含指定分布式节点事务的指定分布式事务分布于多个数据节点。
57.对于任一个首位事务,在对该首位事务的事务提交信息进行解析,可以得到该首位事务的首位分布式事务id以及首位分片信息。
58.首位分布式事务id即为首位事务的分布式事务id,分布式事务id用于指示唯一的分布式事务,可以是根据各个分布式事务的commit请求的时间确定得到。
59.首位分片信息即为首位事务的分片信息,分片信息用于指示所对应的分布式事务中的每个节点事务所分布于的数据节点,即,分片信息用于标记所对应的分布式事务所涉及的数据节点。
60.例如,在确定出首位事务的首位分布式事务id以及首位分片信息之后,基于首位分片信息中指示的包含该首位事务的分布式事务所涉及的各个数据节点,当该分布式事务所涉及的数据节点包含多个时,可将该首位事务确定为指定分布式节点事务。
61.作为一种可选的实施例,如前述的方法,在通过目标线程读取得到每个fetch线程中位于第一的首位事务之后,方法还包括:对于任一个首位事务,在解析首位事务的事务提交信息中的首位分布式事务id以及首位指定分片信息后,确定首位事务为单机事务的情况下,将首位事务写入全局日志文
件中。
62.也就是说,在确定出首位事务的首位分布式事务id以及首位分片信息之后,基于首位分片信息中指示的包含该首位事务的分布式事务所涉及的所有数据节点,当该分布式事务所涉及的数据节点只包含一个时,意味着该首位事务即为单机事务,进而该首位事务无需与其他节点事务进行整合,直接将首位事务写入全局日志文件中。
63.例如,在前述示例的基础上,compose线程通过解析每个首位事务的ctid(即,分布式事务id)和gmap(即,分片信息),如果基于gmap确定出首位事务ii是单机事务,则将该首位事务ii直接写入全局日志文件中,然后再从对应的tq中读一个事务,并通知fetch线程,让其再读一个事务放入tq中。
64.步骤s504,按照每个指定分布式节点事务的首位分布式事务id,依次确定出与每个首位分布式事务id对应的节点事务组,并将节点事务组放入完整队列中,其中,与每个首位分布式事务id对应的节点事务组中包括:所有指定分布式节点事务中与每个首位分布式事务id对应的第一目标分布式节点事务,以及通过第一目标分布式节点事务的首位分片信息指示的目标数据节点,在目标数据节点对应的事务队列中,查询到的第二目标分布式节点事务,目标数据节点异于指定分布式节点事务对应的指定数据节点,第二目标分布式节点事务的分布式事务id与第一目标分布式节点事务的首位分布式事务id相同。
65.可选的,在得到各个指定分布式节点事务之后,可以根据每个指定分布式节点事务的首位分布式事务id的值给各个指定分布式节点事务排序;然后遍历排序好的各个指定分布式节点事务,依次确定出与每个首位分布式事务id对应的节点事务组。
66.例如,可以通过如下方式实现上述步骤s504:遍历排序好的各个指定分布式节点事务,并将排序位于第一的指定分布式节点事务作为第一目标分布式节点事务放入fdtq(即,完整队列)中,根据第一目标分布式节点事务的gmap信息(即,首位分片信息)去gmap信息所对应的fetch线路的事务队列中取出包含该第一目标分布式节点事务的分布式事务的其它部分(即,第二目标分布式节点事务),并将第二目标分布式节点事务也放入fdtq中,当在gmap信息所对应的每个fetch线路的事务队列中都找到对应的节点事务之后,即得到与排序位于第一的指定分布式节点事务对应的节点事务组,之后,即可将该节点事务组作为一个分布式事务写入全局日志文件中。
67.进一步的,在每个tq中寻找分布式节点事务的其它部分事务逻辑:当compose线程在gmap信息指示的fetch线程的tq中,寻找到与gmap信息对应的第一目标分布式节点事务对应于同一个分布式事务的第二目标分布式节点事务时,则取出该第二目标分布式节点事务,同时通知该fetch线程;反之,如果没找到,则通知fetch线程去所对应的中继日志中找,compose线程等待。
68.进一步的,还可以获取第一目标分布式节点事务的最小全局事务id(也即,gmingtid)以及全局事务id(也即,gtid)。
69.具体的,全局事务id ,为一个16字节整形,节点事务开始写操作时由代理节点向全局管理组件申请。
70.每个节点事务的最小全局事务id是该节点事务申请ctid时的分布式数据库全局活跃的所有节点事务所对应的gtid中的最小的gtid,是一个8字节的整形数值。
71.当compose线程未在gmap信息指示的fetch线程的tq中,寻找到与gmap信息对应的
第一目标分布式节点事务对应于同一个分布式事务的第二目标分布式节点事务时,令该fetch线程扩大tq队列,以将中继日志中更多的节点事务读取到tq队列中,直到找到对应的第二目标分布式节点事务为止,或者直到fetch线程中的存在某一个节点事务的最小全局事务id大于该第一目标分布式节点事务的全局事务id为止,然后通知compose线程;并且,当fetch线程读取到该中继日志的文件结尾时,则等待生成新的中继日志或切换至下一个未进行处理的中继日志。
72.fetch线程中的存在某一个节点事务的最小全局事务id大于该第一目标分布式节点事务的全局事务id也就是说:由于fetch线程中节点事务是从对应的中继日志中按序获取的,且中继日志中的事务是按照时序排列的,因此,当fetch线程中的存在某一个节点事务的最小全局事务id大于该第一目标分布式节点事务的全局事务id时,该fetch线程中仍然未找到对应的第二目标分布式节点事务,则说明该最小全局事务id对应的节点事务在申请ctid时,如果该第一目标分布式节点事务存在,其也不在活跃状态,因此,没有必要令该fetch线程继续从中继日志中获取节点事务。
73.此外,如果compose线程从某一fetch线程的tq队列中读取得到一个第二目标分布式节点事务,但是该第二目标分布式节点事务的gmingtid大于第一目标分布式节点事务的gtid时,则抛弃这个第一目标分布式节点事务对应的分布式事务。
74.步骤s505,基于与每个首位分布式事务id对应的节点事务组,得到每个分布式事务对应的节点事务。
75.在得到与每个首位分布式事务id对应的节点事务组之后,即相当于得到该节点事务组对应的首位分布式事务id指示的分布式事务的各个节点事务,进而可以得到每个分布式事务对应的节点事务。
76.作为一种可选的实施例,如前任一项的方法,在获取分布式数据库下多个数据节点中的日志信息之前,方法还包括如下所述步骤:步骤s601,计算节点在确定指定事务开始写操作时,向全局管理组件申请得到与指定事务对应的指定全局事务id;计算节点接收到指定commit请求时,向全局管理组件申请得到与指定commit请求所提交的指定分布式事务对应的指定分布式事务id,确定出分布式数据库全局已提交的指定最小全局事务id,并基于出分布式事务涉及的数据单元确定出指定分片信息,其中,指定分布式事务包括指定事务。
77.步骤s602,计算节点将包括指定全局事务id、指定分布式事务id、指定最小全局事务id以及指定分片信息的指定事务提交信息作为指定commit请求中的hint信息发送给指定事务对应的指定数据节点;步骤s603,指定数据节点将作为hint信息的指定事务提交信息与指定事务绑定写入指定数据节点的指定日志文件中。
78.具体的,采用基于事务提交序的逻辑进行分布式全局逻辑二进制日志设计,最终需要在分布式数据库各节点的二进制日志中记录分布式事务提交时的全局顺序的逻辑信息(gtid(即,全局事务id)、ctid(即,分布式事务id)、gmingtid(即,最小全局事务id)、gmap(即,分片信息));设计一个cdc合并装置(用于实现前述任一实施例方法的装置),根据记录的逻辑信息将分布式数据库各个数据节点的二进制日志重新合并为一个全局的逻辑二进制日志,供下游第三方工具使用。
79.节点事务的事务提交信息,即包含gtid、ctid、gmingtid、gmap等的二进制日志信息记录。
80.gtid为一个16字节整形,事务开始写操作时由计算节点向全局管理组件申请。
81.ctid即分布式事务id(commit trx id),ctid在分布式事务进行提交时由计算节点(即图示的代理计算节点)向全局管理组件申请得到。具体申请流程如图3所示。ctid为一个8字节整形,存储在二进制日志中为十六进制,占用8字节。其内部是由ctid前缀部分以及ctid后缀部分两部分组成,ctid结构如图2所示。
82.所述的ctid前缀部分,即ctid高48位是从全局管理组件申请到的同一批组提交的ctid前缀部分,同一个时刻申请到的ctid前缀部分是相同的,ctid前缀部分的序号从1开始递增,但是由于全局管理组件阶段性持久化的特性,实际高48位是递增的,但不是连续的。ctid前缀部分支持以每秒申请10万次,连续申请82年,足够使用。
83.所述的ctid后缀部分,即ctid低16位是表示同一个组提交事务的后缀部分,通过ctid的后缀部分保证同一批组提交的所有事务的ctid是全局唯一的。16位最多支持同一个组提交commit请求申请65535个id。
84.所述的gmingtid是当前事务申请ctid时的全局已提交的最小的gtid值,是一个8字节的整形数值。
85.优选地,为了快速找到一个事务对应的所有分片,需要使用bitmap标记该事务涉及哪些分片,即gmap。bitmap以8字节为单位进行自动扩展,如64分片及以内使用1个8字节,65-128分片使用2个8字节,129-192分片使用3个8字节。gmap最大支持1024个分片,即最多需要128个字节的存储空间。
86.在得到指定事务的指定全局事务id、指定分布式事务id、指定最小全局事务id以及指定分片信息之后,即可将指定全局事务id、指定分布式事务id、指定最小全局事务id以及指定分片信息作为指定事务提交信息,然后将指定事务提交信息作为指定commit请求中的hint信息发送给指定事务对应的指定数据节点。
87.指定数据节点在接收到指定commit请求后,即可将作为hint信息的指定事务提交信息与指定事务绑定写入指定数据节点的指定日志文件中。
88.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。
89.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom(read-only memory,只读存储器)/ram(random access memory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
90.根据本技术实施例的另一个方面,还提供了一种用于实施上述分布式数据库日志
unit,中央处理器)、np(network processor,网络处理器)等;还可以是dsp (digital signal processor,数字信号处理器)、asic (application specific integrated circuit,专用集成电路)、fpga (field-programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
102.本技术实施例还提供一种计算机可读存储介质,存储介质包括存储的程序,其中,程序运行时执行上述方法实施例的方法步骤。
103.可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、rom、ram、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
104.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
105.上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。
106.在本技术的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
107.在本技术所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
108.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
109.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
110.以上所述仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
技术特征:
1.一种分布式数据库日志处理方法,其特征在于,包括:获取所述分布式数据库下多个数据节点中每个数据节点的日志文件;根据所述日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的所述节点事务,其中,所述每个节点事务的事务提交信息用于指示所述每个节点事务开始写操作的次序以及所述每个节点事务所属的分布式事务提交时的全局顺序;按照所述与每个分布式事务对应的所述节点事务,对各个所述节点事务进行组合,得到用于指示每个分布式事务的全局日志。2.根据权利要求1所述的方法,其特征在于,所述获取所述分布式数据库下多个数据节点中每个数据节点的日志文件,包括:获取分布式数据库下多个数据节点中的每个数据节点的二进制日志;将所有所述二进制日志复制至目标备机,得到所述每个数据节点的日志文件。3.根据权利要求2所述的方法,其特征在于,所述根据所述日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的所述节点事务,包括:将每个日志文件中的节点事务,读取至所述每个日志文件对应的事务队列中;按照所述每个节点事务的事务提交信息,并通过对各个所述事务队列中的节点事务进行读取,得到所述每个分布式事务对应的所述节点事务。4.根据权利要求3所述的方法,其特征在于,所述将每个日志文件中的节点事务,读取至所述每个日志文件对应的事务队列中,包括:启动与所述数据节点对应的fetch线程,并创建与每个fetch线程对应的所述事务队列;按照与所述每个数据节点对应的fetch线程,通过所述每个fetch线程对所述目标备机中的每个日志文件进行读取,得到与所述每个数据节点对应的中继日志;将所述中继日志中的所述节点事务读取至所述事务队列中。5.根据权利要求4所述的方法,其特征在于,所述按照所述每个节点事务的事务提交信息,并通过对各个所述事务队列中的节点事务进行读取,得到所述每个分布式事务对应的所述节点事务,包括:启动一个目标线程,打开用于存储所述分布式数据库的全局日志信息的全局日志文件,并创建所述目标线程对应的完整队列;通过所述目标线程读取得到每个fetch线程对应的事务队列中位于第一的首位事务;通过解析每个首位事务的事务提交信息中的首位分布式事务id以及首位分片信息后,在所有首位事务中确定出指定分布式节点事务,其中,分布式事务id用于指示唯一的分布式事务,分片信息用于指示所对应的分布式事务中的每个节点事务所分布于的数据节点,分布式节点事务所对应的分片信息涉及多个数据节点,对于任一个所述指定分布式节点事务,所述指定分布式节点事务的首位分片信息指示包含所述指定分布式节点事务的指定分布式事务分布于多个数据节点;按照每个指定分布式节点事务的首位分布式事务id,依次确定出与每个首位分布式事务id对应的节点事务组,并将所述节点事务组放入所述完整队列中,其中,与每个首位分布式事务id对应的节点事务组中包括:所有指定分布式节点事务中与所述每个首位分布式事务id对应的第一目标分布式节点事务,以及通过所述第一目标分布式节点事务的所述首位
分片信息指示的目标数据节点,在所述目标数据节点对应的所述事务队列中,查询到的第二目标分布式节点事务,所述目标数据节点异于所述指定分布式节点事务对应的指定数据节点,所述第二目标分布式节点事务的分布式事务id与所述第一目标分布式节点事务的所述首位分布式事务id相同;基于所述与每个首位分布式事务id对应的节点事务组,得到所述每个分布式事务对应的所述节点事务。6.根据权利要求5所述的方法,其特征在于,在所述通过所述目标线程读取得到每个fetch线程中位于第一的首位事务之后,所述方法还包括:对于任一个所述首位事务,在解析所述首位事务的事务提交信息中的首位分布式事务id以及首位指定分片信息后,确定所述首位事务为单机事务的情况下,将所述首位事务写入所述全局日志文件中。7.根据权利要求1至6中任一项所述的方法,其特征在于,在所述获取所述分布式数据库下多个数据节点中的日志信息之前,所述方法还包括:计算节点在确定指定事务开始写操作时,向全局管理组件申请得到与所述指定事务对应的指定全局事务id;计算节点接收到指定commit请求时,向全局管理组件申请得到与所述指定commit请求所提交的指定分布式事务对应的指定分布式事务id,确定出所述分布式数据库全局已提交的指定最小全局事务id,并基于出所述分布式事务涉及的数据单元确定出指定分片信息,其中,所述指定分布式事务包括所述指定事务;所述计算节点将包括所述指定全局事务id、所述指定分布式事务id、所述指定最小全局事务id以及所述指定分片信息的指定事务提交信息作为指定commit请求中的hint信息发送给所述指定事务对应的指定数据节点;所述指定数据节点将作为所述hint信息的所述指定事务提交信息与所述指定事务绑定写入所述指定数据节点的指定日志文件中。8.一种分布式数据库日志处理装置,其特征在于,包括:获取模块,用于获取所述分布式数据库下多个数据节点中每个数据节点的日志文件;确定模块,用于根据所述日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的所述节点事务,其中,所述每个节点事务的事务提交信息用于指示所述每个节点事务开始写操作的次序以及所述每个节点事务所属的分布式事务提交时的全局顺序;全局日志模块,用于按照所述与每个分布式事务对应的所述节点事务,对各个所述节点事务进行组合,得到用于指示每个分布式事务的全局日志。9.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,其特征在于,所述存储器,用于存储计算机程序;所述处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行权利要求1至7中任一项所述的方法步骤。10.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7中任一项中所述的方法步骤。
技术总结
本申请提供了一种分布式数据库日志处理方法和装置、电子设备和存储介质。其中,方法包括:获取分布式数据库下多个数据节点中每个数据节点的日志文件;根据日志文件中每个节点事务的事务提交信息,确定出与每个分布式事务对应的节点事务,其中,每个节点事务的事务提交信息用于指示每个节点事务在开始写操作的次序以及每个节点事务所属的分布式事务提交时的全局顺序;按照与每个分布式事务对应的节点事务,对各个节点事务进行组合,得到用于指示每个分布式事务的全局日志。通过本申请,解决了相关技术中存在的因为需要对每一个数据节点都部署一个队列,导致的不仅需要大量的人力保障运维,还需要额外增加大量中间机资源,费效比非常低下的问题。效比非常低下的问题。效比非常低下的问题。
技术研发人员:吴沛霆 付裕 马玉伟 周亚运 岳新新
受保护的技术使用者:金篆信科有限责任公司
技术研发日:2023.08.07
技术公布日:2023/9/9
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:故障分析方法、装置、设备及存储介质与流程 下一篇:输尿管支架拔除装置