请求的处理方法和装置、电子设备和存储介质转让专利

申请号 : CN202110619528.7

文献号 : CN113254483B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邱海港

申请人 : 北京金山云网络技术有限公司

摘要 :

本申请提供了一种请求的处理方法和装置、电子设备和存储介质,其中,该方法包括:接收第一协调节点发送的第一读请求,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;响应第一读请求,按照目标查询条件进行业务数据查询,得到第一业务数据,第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据;在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,向第一协调节点发送第一业务数据,第一事务表中的一个数据元素用于记录一个全局事务标识所标识的全局事务在第一数据节点上的两阶段提交状态。通过本申请,解决了相关技术中的事务读方式存在由于需要等待行锁释放导致的数据读效率低的问题。

权利要求 :

1.一种请求的处理方法,其特征在于,包括:接收第一协调节点发送的第一读请求,其中,所述第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;

响应所述第一读请求,按照所述目标查询条件进行业务数据查询,得到第一业务数据,其中,所述第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据;

使用所述目标事务标识查询第一事务表中的至少一个数据元素;

在所述第一业务数据处于可见性待定状态的情况下,将目标事务信息发送给第一协调节点,以由所述第一协调节点根据所述目标事务信息和第二事务表确定所述第一业务数据的可见性,其中,所述目标事务信息包含所述目标事务标识,所述第二事务表为处理所述目标全局事务的第二协调节点的全局事务表;

确定与目标节点标识所标识的所述第二协调节点所对应的所述第二事务表;在所述第二事务表中查找到与所述目标事务标识对应的第二数据元素;在所述第二数据元素所记录的所述目标全局事务在对应的各个数据节点上的预提交状态为全部完成预提交的情况下,确定所述第一业务数据可见;在所述第二数据元素所记录的所述目标全局事务在对应的各个数据节点上的预提交状态为未全部完成预提交的情况下,确定所述第一业务数据不可见,其中,所述目标事务信息还包括用于标识所述第二协调节点的所述目标节点标识;

在根据所述目标事务标识和第一事务表确定出所述第一业务数据可见的情况下,向所述第一协调节点发送所述第一业务数据,其中,所述第一事务表中的一个数据元素用于记录一个全局事务标识所标识的全局事务在所述第一数据节点上的两阶段提交状态。

2.根据权利要求1所述的方法,其特征在于,在使用所述目标事务标识查询所述第一事务表中的至少一个数据元素之后,所述方法还包括:在所述目标事务标识满足第一目标条件的情况下,确定所述第一业务数据可见;

其中,所述第一目标条件为以下之一:所述目标事务标识小于所述第一事务表中最小的全局事务标识;所述目标事务标识为所述第一事务表中的第一数据元素的全局事务标识,且所述第一数据元素所记录的所述目标全局事务在所述第一数据节点上的两阶段提交状态为两阶段均已提交。

3.根据权利要求2所述的方法,其特征在于,在使用所述目标事务标识查询所述第一事务表中的至少一个数据元素之后,所述方法还包括:在所述目标事务标识满足第二目标条件的情况下,确定所述第一业务数据不可见;

其中,所述第二目标条件为以下之一:所述目标事务标识大于所述第一事务表中最大的全局事务标识;所述目标事务标识为所述第一事务表中的第一数据元素的全局事务标识,且所述第一数据元素所记录的所述目标全局事务在所述第一数据节点上的两阶段提交状态为预提交未完成。

4.根据权利要求2所述的方法,其特征在于,所述第一协调节点所属的分布式系统中的每个协调节点具有一个全局事务表,所述每个协调节点的全局事务表用于记录所述每个协调节点所处理的全局事务的全局事务标识、及所述每个协调节点所处理的全局事务在对应的各个数据节点上的预提交状态;

在使用所述目标事务标识查询所述第一事务表中的至少一个数据元素之后,所述方法还包括:

在所述目标事务标识满足第三目标条件的情况下,确定所述第一业务数据处于可见性待定状态,其中,所述第三目标条件为所述目标事务标识为所述第一事务表中的第一数据元素的全局事务标识,且所述第一数据元素所记录的所述目标全局事务在所述第一数据节点上的两阶段提交状态为预提交已完成、而二阶段提交未完成。

5.根据权利要求4所述的方法,其特征在于,在接收所述第一协调节点发送的所述第一读请求之前,所述方法还包括:

通过所述第一协调节点接收到第二读请求,其中,所述第二读请求用于请求读取满足所述目标查询条件的业务数据;

响应所述第二读请求,向所述第一数据节点发送所述第一读请求;

通过所述第一协调节点向所述分布式系统中除了所述第一协调节点以外的其他协调节点发送目标获取请求,其中,所述目标获取请求用于请求获取所述其他协调节点的全局事务表;

接收所述其他协调节点响应所述目标获取请求返回的所述其他协调节点的全局事务表,其中,所述其他协调节点的全局事务表包括所述第二事务表。

6.根据权利要求4所述的方法,其特征在于,在接收所述第一协调节点发送的所述第一读请求之前,所述方法还包括:

通过所述第二协调节点确定待执行的所述目标全局事务,其中,所述目标全局事务为跨多个第二数据节点的数据更新事务,所述多个第二数据节点包括所述第一数据节点;

执行所述目标全局事务,以通过多个分支事务在所述多个第二数据节点中上执行与所述目标全局事务对应的数据更新操作,其中,所述多个分支事务与所述多个第二数据节点一一对应;

通过所述第二事务表中的第二数据元素记录所述目标全局事务在所述多个第二数据节点中的每个第二数据节点上的预提交状态。

7.根据权利要求6所述的方法,其特征在于,通过所述第二事务表中的所述第二数据元素记录所述目标全局事务在所述多个第二数据节点中的每个第二数据节点上的预提交状态包括:

从全局事务管理器获取第二事务标识,其中,所述第二事务标识为与所述目标全局事务对应的预提交事务的事务标识;

将所述第二数据元素的预提交事务字段的字段信息更新为所述第二事务标识,其中,所述第二数据元素的全局事务标识字段的字段信息为所述目标事务标识;

将所述第二数据元素的操作节点字段中与所述每个第二数据节点对应的标志位设置为第一目标值,其中,所述操作节点字段用于指示所述多个第二数据节点;

将所述第二数据元素的预提交完成节点字段中与预提交完成的所述第二数据节点对应的标志位设置为第二目标值,其中,所述预提交完成节点字段用于指示所述目标全局事务在所述每个第二数据节点上的预提交状态。

8.根据权利要求6所述的方法,其特征在于,在执行所述目标全局事务之后,所述方法还包括:

通过所述第一数据节点接收所述第二协调节点发送的第一提交指令,其中,所述第一提交指令用于指示对所述目标全局事务的目标分支事务进行预提交,所述第一提交指令中携带有第二事务标识,所述第二事务标识为与所述目标全局事务对应的预提交事务的事务标识,所述目标分支事务用于将所述第一数据节点上与所述目标全局事务关联的业务数据更新为所述第一业务数据;

响应所述第一提交指令,对所述目标分支事务进行预提交,并向所述第二协调节点发送第一指示信息,其中,所述第一指示信息用于指示完成对所述目标分支事务的预提交;

将所述第一事务表中的第三数据元素的预提交事务标识字段的字段信息更新为所述第二事务标识,其中,所述第三数据元素的全局事务标识字段的字段信息为所述目标事务标识;

接收所述第二协调节点发送的第二提交指令,其中,所述第二提交指令用于指示对所述目标分支事务进行二阶段提交,所述第二提交指令中携带有第三事务标识,所述第三事务标识为与所述目标全局事务对应的二阶段提交事务的事务标识;

响应所述第二提交指令,对所述目标分支事务进行二阶段提交,并向所述第二协调节点发送第二指示信息,其中,所述第二指示信息用于指示完成所述目标分支事务的二阶段提交;

将所述第三数据元素的二阶段提交事务标识字段的字段信息更新为所述第三事务标识。

9.根据权利要求1至8中任一项所述的方法,其特征在于,在按照所述目标查询条件进行业务数据查询,得到所述第一业务数据之后,所述方法还包括:在根据所述目标事务标识和所述第一事务表确定出所述第一业务数据不可见的情况下,向所述第一协调节点发送第二业务数据,其中,所述第二业务数据为所述第一业务数据的上一个版本的业务数据。

10.一种请求的处理装置,其特征在于,包括:第一接收单元,用于接收第一协调节点发送的第一读请求,其中,所述第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;

第一查询单元,用于响应所述第一读请求,按照所述目标查询条件进行业务数据查询,得到第一业务数据,其中,所述第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据;

第二查询单元,用于使用所述目标事务标识查询第一事务表中的至少一个数据元素;

第二发送单元,用于在所述第一业务数据处于可见性待定状态的情况下,将目标事务信息发送给第一协调节点,以由所述第一协调节点根据所述目标事务信息和第二事务表确定所述第一业务数据的可见性,其中,所述目标事务信息包含所述目标事务标识,所述第二事务表为处理所述目标全局事务的第二协调节点的全局事务表;

第四确定单元,用于确定与目标节点标识所标识的所述第二协调节点所对应的所述第二事务表;

查找单元,用于在所述第二事务表中查找到与所述目标事务标识对应的第二数据元素;

第五确定单元,用于在所述第二数据元素所记录的所述目标全局事务在对应的各个数据节点上的预提交状态为全部完成预提交的情况下,确定所述第一业务数据可见;

第六确定单元,用于在所述第二数据元素所记录的所述目标全局事务在对应的各个数据节点上的预提交状态为未全部完成预提交的情况下,确定所述第一业务数据不可见,其中,所述目标事务信息还包括用于标识所述第二协调节点的所述目标节点标识;

第一发送单元,用于在根据所述目标事务标识和第一事务表确定出所述第一业务数据可见的情况下,向所述第一协调节点发送所述第一业务数据,其中,所述第一事务表中的一个数据元素用于记录一个全局事务标识所标识的全局事务在所述第一数据节点上的两阶段提交状态。

11.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器通过所述通信总线完成相互间的通信,其特征在于,所述存储器,用于存储计算机程序;

所述处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行权利要求1至9中任一项所述的方法。

12.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至9中任一项所述的方法。

说明书 :

请求的处理方法和装置、电子设备和存储介质

技术领域

[0001] 本申请涉及数据处理领域,尤其涉及一种请求的处理方法和装置、电子设备和存储介质。

背景技术

[0002] 分布式数据库包括以下三大组件:协调节点(Coordinator Node,简称为CN),数据节点(Data Node,简称为DN),全局事务管理器(Global Transaction Manager,简称为
GTM)。对于SQL(Structured Query Language,结构化查询语言)数据库,协调节点负责SQL
的解析和转发,数据节点负责计算和数据存储,而全局事务管理器负责保证全局事务的读
一致性。
[0003] 对于同一个服务器(server)的分布式事务读,可以取publish_id(即,事务id)作为版本号,如果目标行(即,待读取的业务数据所在的行)上有行锁,且行锁相关的版本号是
小于publish_id的,则阻塞等待行锁释放,否则直接读取。
[0004] 由此可见,当行锁相关的版本号小于publish_id时,则需要阻塞等待,影响整体的性能。

发明内容

[0005] 本申请提供了一种请求的处理方法和装置、电子设备和存储介质,以至少解决相关技术中的事务读方式存在由于需要等待行锁释放导致的数据读效率低的问题。
[0006] 根据本申请实施例的一个方面,提供了一种请求的处理方法,包括:接收第一协调节点发送的第一读请求,其中,所述第一读请求用于请求读取第一数据节点上满足目标查
询条件的业务数据;响应所述第一读请求,按照所述目标查询条件进行业务数据查询,得到
第一业务数据,其中,所述第一业务数据为与目标事务标识所标识的目标全局事务所对应
的业务数据;在根据所述目标事务标识和第一事务表确定出所述第一业务数据可见的情况
下,向所述第一协调节点发送所述第一业务数据,其中,所述第一事务表中的一个数据元素
用于记录一个全局事务标识所标识的全局事务在所述第一数据节点上的两阶段提交状态。
[0007] 根据本申请实施例的另一个方面,还提供了一种请求的处理装置,包括:第一接收单元,用于接收第一协调节点发送的第一读请求,其中,所述第一读请求用于请求读取第一
数据节点上满足目标查询条件的业务数据;第一查询单元,用于响应所述第一读请求,按照
所述目标查询条件进行业务数据查询,得到第一业务数据,其中,所述第一业务数据为与目
标事务标识所标识的目标全局事务所对应的业务数据;第一发送单元,用于在根据所述目
标事务标识和第一事务表确定出所述第一业务数据可见的情况下,向所述第一协调节点发
送所述第一业务数据,其中,所述第一事务表中的一个数据元素用于记录一个全局事务标
识所标识的全局事务在所述第一数据节点上的两阶段提交状态。
[0008] 根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;
其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计
算机程序来执行上述任一实施例中的方法步骤。
[0009] 根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的
方法步骤。
[0010] 在本申请实施例中,采用事务表记录全局事务在数据节点上的两阶段提交状态的方式,通过接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据
节点上满足目标查询条件的业务数据;响应第一读请求,按照目标查询条件进行业务数据
查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识的目标全局事务所
对应的业务数据;在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,
向第一协调节点发送第一业务数据,其中,第一事务表中的一个数据元素用于记录一个全
局事务标识所标识的全局事务在第一数据节点上的两阶段提交状态,由于事务表记录了全
局事务在数据节点上的两阶段提交状态,基于事务表可以实时判断数据的可见性,而无需
等待行锁释放,可以实现快速响应读请求的目的,达到了提高数据读取效率的技术效果,进
而解决了相关技术中的事务读方式存在由于需要等待行锁释放导致的数据读效率低的问
题。

附图说明

[0011] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
[0012] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而
言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0013] 图1是根据本申请实施例的一种可选的请求的处理方法的硬件环境的示意图;
[0014] 图2是根据本申请实施例的一种可选的请求的处理方法的流程示意图;
[0015] 图3是根据本申请实施例的一种可选的分布式系统的架构图;
[0016] 图4是根据本申请实施例的一种可选的协调节点的事务链表的示意图;
[0017] 图5是根据本申请实施例的一种可选的数据节点的事务链表的示意图;
[0018] 图6是根据本申请实施例的一种可选的分布式系统中的事务链表的示意图;
[0019] 图7是根据本申请实施例的另一种可选的请求的处理方法的流程示意图;
[0020] 图8是根据本申请实施例的又一种可选的请求的处理方法的流程示意图;
[0021] 图9是根据本申请实施例的一种可选的请求的处理装置的结构框图;
[0022] 图10是根据本申请实施例的一种可选的电子设备的结构框图。

具体实施方式

[0023] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是
本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范
围。
[0024] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用
的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆
盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于
清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品
或设备固有的其它步骤或单元。
[0025] 根据本申请实施例的一个方面,提供了一种请求的处理方法。可选地,在本实施例中,上述请求的处理方法可以应用于如图1所示的由终端102和服务器104所构成的硬件环
境中。如图1所示,服务器104通过网络与终端102进行连接,可用于为终端或终端上安装的
客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用
于为服务器104提供数据存储服务。
[0026] 上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于
以下至少之一:WIFI(Wireless Fidelity,无线保真),蓝牙。终端102可以并不限定于为PC、
手机、平板电脑等。
[0027] 本申请实施例的请求的处理方法可以由服务器104来执行,也可以由终端102来执行,还可以是由服务器104和终端102共同执行。其中,终端102执行本申请实施例的请求的
处理方法也可以是由安装在其上的客户端来执行。
[0028] 以由服务器104来执行本实施例中的请求的处理方法为例,图2是根据本申请实施例的一种可选的请求的处理方法的流程示意图,如图2所示,该方法的流程可以包括以下步
骤:
[0029] 步骤S202,接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据。
[0030] 本实施例中的请求的处理方法可以应用于分布式数据库中进行数据处理(例如,数据读取,数据写入等)的场景,该分布式数据库可以是SQL(Structured Query Language,
结构化查询语言)数据库,对于其他类型的分布式数据库,本实施例中的请求处理方法同样
适用。
[0031] 分布式系统可以包括以下三大组件:GTM,一个或多个CN,多个DN。GTM通过多连接方式分别与每个CN相连,可以用于提供全局事务服务,例如,分配事务ID(Identity,即,标
识)。对于多个CN中的任一个,该CN可以通过多条连接分别与多个DN相连,用于控制DN对其
上的数据进行处理。
[0032] 例如,如图3所示,分布式数据库架构中可以包含:GTM,即,GTM;多个协调节点,即,CN1, CN2,  ..., CNn;多个数据节点,即,DN1, DN2, DN3,  ..., DNn,其中,协调节点可以
为LVS(Linux Virtual Server,Linux虚拟服务器)。不同的客户端(例如,app1,app2)可以
与多个协调节点中的至少部分相连。
[0033] 当有读事务来时,协调节点可以进行读请求的解析和转发。例如,第一协调节点可以解析接收到的读请求(例如,第一客户端发送的读请求),确定该读请求所请求的业务数
据所在的数据节点,即,第一数据节点(该第一数据节点可以是分布式系统中的任意一个数
据节点),并向第一数据节点发送用于请求读取第一数据节点上满足目标查询条件的业务
数据的第一读请求。对于第一数据节点,该第一数据节点可以接收第一协调节点发送的该
第一读请求。
[0034] 需要说明的是,该第一读请求可以是第一协调节点所转发的其接收到的读请求,或者,第一协调节点对接收到的读请求执行处理操作之后所得到的读请求。
[0035] 步骤S204,响应第一读请求,按照目标查询条件进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据。
[0036] 当第一读请求到达时,响应该第一读请求,第一数据节点可以进行业务数据读取。例如,第一协调节点可以按照目标查询条件在其上所保存的业务数据中进行业务数据查
询,得到第一业务数据。
[0037] 为了便于进行业务数据可见性判断,数据节点可以记录其上的业务数据所对应的全局事务标识,也就是,得到该业务数据的全局事务的全局事务id。对于第一业务数据,该
第一业务数据的全局事务标识为目标事务标识,表明该第一业务数据为与目标事务标识所
标识的目标全局事务所对应的业务数据。
[0038] 步骤S206,在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,向第一协调节点发送第一业务数据,其中,第一事务表中的一个数据元素用于记录一个
全局事务标识所标识的全局事务在第一数据节点上的两阶段提交状态。
[0039] 每个数据节点上可以保存有一张事务表,该事务表中可以包含一个或多个数据元素。对于两阶段提交的事务,该事务的提交过程可以分为两个阶段,即,预提交阶段,二阶段
提交(即,正式提交)阶段。通过数据节点的事务表中的一个数据元素,可以记录一个全局事
务标识所标识的全局事务在本数据节点上的两阶段提交状态,例如,预提交没有完成,预提
交完成而二阶段提交未完成,预提交和二阶段提交均完成。
[0040] 可选地,该事务表可以是事务链表,事务链表中的一个数据元素中具有指示下一个数据元素的指针。在事务链表中,数据元素可以按照对应的全局事务标识由小到大的顺
序依次保存,也可以不是按照对应的全局事务标识的顺序依次保存的,本实施例中对此不
作限定。
[0041] 对于第一数据节点,该第一数据节点的事务表为第一事务表。根据目标事务标识和第一事务表,第一数据节点可以确定第一业务数据的可见性。基于不同的业务处理逻辑,
第一数据节点可以采用不同的方式根据目标事务标识和第一事务表确定第一业务数据的
可见性。
[0042] 例如,在判断业务数据的可见性时,可以仅在业务数据的全局事务标识小于第一事务表中所有数据元素的全局事务标识时,判定该业务数据可见。可以在业务数据的全局
事务标识为第一事务表中某一数据元素的全局事务标识时,基于该数据元素所记录的该全
局事务标识所对应的全局事务的两阶段提交状态,确定该业务数据是否可见,比如,仅在两
阶段提交均已完成时判定该业务数据可见,否则认为不可见。可以在业务数据的全局事务
标识大于第一事务表中任意一个数据元素的全局事务标识时,判定该业务数据不可见。
[0043] 如果确定第一业务数据可见,第一数据节点可以向第一协调节点发送第一业务数据,并由第一协调节点执行后续的数据处理,例如,向申请该业务数据的第一客户端返回第
一业务数据,又例如,对第一业务数据进行一定处理(例如,与其他客户端请求的业务数据
进行融合处理),并将得到的处理结果返回给第一客户端等。
[0044] 通过上述步骤S202至步骤S206,接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;响应第一读请求,按
照目标查询条件进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务
标识所标识的目标全局事务所对应的业务数据;在根据目标事务标识和第一事务表确定出
第一业务数据可见的情况下,向第一协调节点发送第一业务数据,其中,第一事务表中的一
个数据元素用于记录一个全局事务标识所标识的全局事务在第一数据节点上的两阶段提
交状态,解决了相关技术中的事务读方式存在由于需要等待行锁释放导致的数据读效率低
的问题,提高了数据的读取效率。
[0045] 作为一种可选的实施例,在按照目标查询条件进行业务数据查询,得到第一业务数据之后,上述方法还包括:
[0046] S11,使用目标事务标识查询第一事务表中的至少一个数据元素;
[0047] S12,在目标事务标识满足第一目标条件的情况下,确定第一业务数据可见。
[0048] 在得到第一业务数据之后,第一数据节点可以对第一业务数据的可见性进行判断。第一数据节点可以使用目标事务标识在第一事务表中进行查找,通过比较目标事务标
识与第一事务表中的各个数据元素中的全局事务标识,确定目标事务标识是否满足第一目
标条件。如果目标事务标识满足第一目标条件,则可以确定第一业务数据可见。
[0049] 这里,第一目标条件为第一业务数据可见的条件,其可以包括但不限于以下之一:目标事务标识小于第一事务表中的全局事务标识;目标事务标识为第一事务表中的第一数
据元素的全局事务标识,且第一数据元素所记录的目标全局事务在第一数据节点上的两阶
段提交状态为两阶段均已提交。
[0050] 例如,当读请求到达DN节点时,DN节点可以复制全局事务链表,形成自己的事务链表(第一事务表的一种示例)。根据查询条件,读取到一条数据(第一业务数据的一种示例),
需要判断其数据的可见性。若当前数据的事务id小于最小事务id时,不需要其他操作(例
如,在CN节点作可见性判断)即可确定该数据可见。若当前数据的事务id在自己的私有事务
链表中,需要判断几种情况。其中的一种情况是:如果当前节点的数据预提交完成,且二阶
段完成,则该数据可见。
[0051] 通过本实施例,通过使用业务数据的事务标识查询数据事务表中的数据元素,基于业务数据的事务标识和数据元素的事务标识判断业务数据的可见性,可以提高数据可见
性判断的及时性和准确性。
[0052] 作为一种可选的实施例,在使用目标事务标识查询第一事务表中的至少一个数据元素之后,上述方法还包括:
[0053] S21,在目标事务标识满足第二目标条件的情况下,确定第一业务数据不可见。
[0054] 在使用目标事务标识查询第一事务表中的至少一个数据元素时,第一数据节点可以通过比较目标事务标识与第一事务表中的各个数据元素中的全局事务标识,确定目标事
务标识是否满足第二目标条件。如果目标事务标识满足第二目标条件,则可以确定第一业
务数据不可见。
[0055] 这里,第二目标条件为第一业务数据不可见的条件,其可以包括但不限于以下之一:目标事务标识大于第一事务表中最大的全局事务标识;目标事务标识为第一事务表中
的第一数据元素的全局事务标识,且第一数据元素所记录的目标全局事务在第一数据节点
上的两阶段提交状态为预提交未完成。
[0056] 例如,DN节点在对读取到的数据进行可见性判断时,若当前数据的事务id大于最大事务id时不需要其他操作(例如,在CN节点作可见性判断)即可确定该数据不可见。若当
前数据的事务id在自己的私有事务链表中,需要判断几种情况。其中的一种情况是:如果当
前节点的数据预提交没有完成,则该数据不可见。
[0057] 通过本实施例,基于业务数据的事务标识和数据元素的事务标识判断业务数据的可见性,可以提高数据可见性判断的及时性和准确性。
[0058] 作为一种可选的实施例,在使用目标事务标识查询第一事务表中的至少一个数据元素之后,上述方法还包括:
[0059] S31,在目标事务标识满足第三目标条件的情况下,确定第一业务数据处于可见性待定状态。
[0060] 在使用目标事务标识查询第一事务表中的至少一个数据元素时,第一数据节点可以通过比较目标事务标识与第一事务表中的各个数据元素中的全局事务标识,确定目标事
务标识是否满足第三目标条件。如果目标事务标识满足第三目标条件,则无法确定第一业
务数据是否可见。
[0061] 这里,第三目标条件为第一业务数据可见性待定的条件,其可以包括但不限于是:目标事务标识为第一事务表中的第一数据元素的全局事务标识,且第一数据元素所记录的
目标全局事务在第一数据节点上的两阶段提交状态为预提交已完成、而二阶段提交未完
成。
[0062] 例如,DN节点在对读取到的数据进行可见性判断时,若当前数据的事务id在自己的私有事务链表中,需要判断几种情况。其中的一种情况是:如果当前节点的数据预提交完
成,但二阶段没有完成,不确定是否可见。
[0063] 业务数据的读取规则可以按照需求进行配置,例如,在数据读取时,仅完成二阶段提交才可认为数据可见。对应地,如果不确定是否可见,可以直接将其确定为不可见。
[0064] 可选地,在数据读取时,如果是预提交完成,则认为与完成二阶段提交一样的效果,即,如果完成两阶段提交过程中一阶段(即,预提交阶段)提交,则认为完成事务提交,在
读取时可以读取,不是无效数据。
[0065] 为了判定全局事务在各个数据节点上是否均完成一阶段提交,可以在第一协调节点所属的分布式系统中的每个协调节点上建立一个全局事务表(例如,全局事务链表),而
每个协调节点的全局事务表用于记录本协调节点所处理的全局事务的全局事务标识、及本
协调节点所处理的全局事务在对应的各个数据节点上的预提交状态。
[0066] 可选地,在本实施例中,在确定第一业务数据处于可见性待定状态(即,不确定是否可见)之后,上述方法还包括:
[0067] S32,将目标事务信息发送给第一协调节点,以由第一协调节点根据目标事务信息和第二事务表确定第一业务数据的可见性,其中,目标事务信息包含目标事务标识,第二事
务表为处理目标全局事务的第二协调节点的全局事务表。
[0068] 第一数据节点可以将目标事务信息发送给第一协调节点,该目标事务信息可以包括目标事务标识,也可以包含第一业务数据,还可以包含其他信息,例如,处理该目标全局
事务的协调节点的节点标识,即,第二协调节点的目标节点标识。示例性地,DN节点可以向
CN节点返回当前读事务的CN节点的数据,返回的信息可以包含:CN序号(节点标识的一种示
例),事务id。
[0069] 第一协调节点和第二协调节点可以是同一协调节点,也可以是不同的协调节点。该第二协调节点的全局事务表为第二事务表,对应地,第一协调节点可以根据目标事务信
息和第二事务表确定第一业务数据的可见性。如果第一协调节点和第二协调节点可以是同
一协调节点,则第一协调节点可以直接使用本协调节点的全局事务链表进行第一业务数据
可见性的判断。
[0070] 可选地,如果第一协调节点和第二协调节点不是同一协调节点,第一协调节点可以在接收到目标事务信息之前或者之后,从第二协调节点获取该第二协调节点的全局事务
表,即,第二事务表,并使用第二事务表进行第一业务数据可见性的判断。
[0071] 通过本实施例,通过在协调节点上建立全局事务表,并基于全局事务表确定业务数据的可见性,可以提高业务数据可见性判断的准确性和合理性。
[0072] 作为一种可选的实施例,目标事务信息还包括用于标识第二协调节点的目标节点标识。对应地,在本实施例中,在将目标事务信息发送给第一协调节点之后,上述方法还包
括:
[0073] S41,确定与目标节点标识所标识的第二协调节点所对应的第二事务表;
[0074] S42,在第二事务表中查找到与目标事务标识对应的第二数据元素;
[0075] S43,在第二数据元素所记录的目标全局事务在对应的各个数据节点上的预提交状态为全部完成预提交的情况下,确定第一业务数据可见;
[0076] S44,在第二数据元素所记录的目标全局事务在对应的各个数据节点上的预提交状态为未全部完成预提交的情况下,确定第一业务数据不可见。
[0077] 第一协调节点可以首先确定与目标节点标识所标识的第二协调节点所对应的第二事务表。该第二事务表可以是本协调节点的事务表,也可以是其他协调节点的事务表。获
取第二事务表的方式如前述,在此不做赘述。
[0078] 第一协调节点可以使用目标事务标识在第二事务表中进行查找,从而得到与该目标事务标识对应的第二数据元素,该第二数据元素记录了目标全局事务在对应的各个数据
节点上的预提交状态。例如,第二数据元素可以记录与目标全局事务对应的各个数据节点,
以及目标全局事务在各个数据节点上的预提交状态。
[0079] 如果基于第二数据元素,确定出目标全局事务在对应的各个数据节点上的预提交状态为全部完成预提交,此时可以确定第一业务数据可见。否则,可以确定第一业务数据不
可见。
[0080] 通过本实施例,通过协调节点进行全局事务表中的数据元素的查找以及基于查找结果确定业务数据的可见性,可以提高业务数据可见性判断的合理性。
[0081] 需要说明的是,第一数据节点也可以基于目标节点标识建立与第二协调节点之间的连接,由第二协调节点进行第一业务数据可见性的判断,并将判断结果返回给第一数据
节点,再由第一数据节点进行后续处理;或者,第一协调节点可以在接收到目标事务信息之
后,通过目标节点标识确定出第二协调节点,并将目标事务信息转发或者将新的事务信息
发送给第二协调节点,由第二协调节点基于本协调节点的全局事务表确定第一业务数据的
可见性。通过前述方式,可以将同一事务的处理集中到同一节点上,减少网络时延,提高事
务处理的效率。
[0082] 作为一种可选的实施例,在接收第一协调节点发送的第一读请求之前,上述方法还包括:
[0083] S51,通过第一协调节点接收到第二读请求,其中,第二读请求用于请求读取满足目标查询条件的业务数据;
[0084] S52,响应第二读请求,向第一数据节点发送第一读请求;
[0085] S53,通过第一协调节点向分布式系统中除了第一协调节点以外的其他协调节点发送目标获取请求,其中,目标获取请求用于请求获取其他协调节点的全局事务表;
[0086] S54,接收其他协调节点响应目标获取请求返回的其他协调节点的全局事务表,其中,其他协调节点的全局事务表包括第二事务表。
[0087] 第一读请求可以是第一协调节点在接收到第二读请求之后发送的,该第二读请求用于请求读取满足目标查询条件的业务数据。响应第二读请求,第一协调节点可以生成一
个读事务,即,目标读事务。第一协调节点执行该目标读事务,可以触发向第一数据节点发
送第一读请求。第一读请求可以是第一协调节点转发的第二读请求,也可以是对第二读请
求进行一定处理之后得到的读请求,本实施中对此不作限定。
[0088] 当一个读事务来时,第一协调节点可以把当前的全局事务表复制一份,形成自己的私有的事务表。同时,还可以向其他CN节点发起请求(即,目标获取请求),把其他CN节点
的全局事务表(例如,可以包含第二协调节点的全局事务表)复制一份数据,形成一个全局
的事务表。
[0089] 其他CN节点的事务数据是异步请求的,与当前读事务并发执行,可能存在当前读事务的业务数据(即,第一业务数据)已经返回、而其他CN节点的数据还未返回的情况。如果
返回的业务数据不需要其他CN节点的信息(即,全局事务表),则不等待直接返回业务数据。
如果需要校验,则可以等待其他CN节点的数据返回。
[0090] 通过本实施例,通过并发执行读事务以及获取其他CN节点的全局事务表,可以提高业务数据可见性判断的及时性,进而提高事务处理的效率。
[0091] 作为一种可选的实施例,在接收第一协调节点发送的第一读请求之前,上述方法还包括:
[0092] S61,通过第二协调节点确定待执行的目标全局事务,其中,目标全局事务为跨多个第二数据节点的数据更新事务,多个第二数据节点包括第一数据节点;
[0093] S62,执行目标全局事务,以通过多个分支事务在多个第二数据节点中上执行与目标全局事务对应的数据更新操作,其中,多个分支事务与多个第二数据节点一一对应;
[0094] S63,通过第二事务表中的第二数据元素记录目标全局事务在多个第二数据节点中的每个第二数据节点上的预提交状态。
[0095] 对于目标全局事务,该目标全局事务可以是第二协调节点在接收到第二客户端发送的写请求之后生成的。例如,第二协调节点可以响应接收到的第二客户端发送的目标写
请求,生成待执行的目标全局事务,该目标全局事务是跨多个第二数据节点的数据更新事
务,所跨的多个第二数据节点包含了上述第一数据节点。
[0096] 此外,对于目标全局事务,第二协调节点可以从GTM节点获取全局事务标识,即,目标事务标识,并在第二事务表中添加第二数据元素,该第二数据元素中的全局事务标识字
段的字段信息为目标事务标识。
[0097] 示例性地,在一个跨多数据节点的更新事务中,更新事务可以是由DML(Data Manipulation Language,数据操纵语言)语句(例如,insert,update,delete等)触发执行
的。对于该更新事务,可以首先访问GTM节点,获取全局事务id,例如,上述目标事务标识。
[0098] 第二协调节点可以执行该目标全局事务,开启该目标全局事务的两阶段事务提交,以通过多个分支事务在多个第二数据节点中上执行与目标全局事务对应的数据更新操
作,多个分支事务与多个第二数据节点一一对应,一个分支事务由一个第二数据节点处理,
每个第二数据节点的分支事务的是基于第二协调节点的指示进行准备和提交的。
[0099] 在执行目标全局事务的同时,第二协调节点可以通过第二数据元素实时记录目标全局事务在每个第二数据节点上的预提交状态,以便保证数据元素记录全局事务在各个数
据节点上的预提交状态的准确性。
[0100] 通过本实施例,通过事务表中的数据元素记录跨多个数据节点的数据更新事务在各个数据节点上的预提交状态,可以保证数据元素信息记录的准确性。
[0101] 作为一种可选的实施例,通过第二事务表中的第二数据元素记录目标全局事务在多个第二数据节点中的每个第二数据节点上的预提交状态包括:
[0102] S71,从全局事务管理器获取第二事务标识,其中,第二事务标识为与目标全局事务对应的预提交事务的事务标识;
[0103] S72,将第二数据元素的预提交事务字段的字段信息更新为第二事务标识,其中,第二数据元素的全局事务标识字段的字段信息为目标事务标识;
[0104] S73,将第二数据元素的操作节点字段中与每个第二数据节点对应的标志位设置为第一目标值,其中,操作节点字段用于指示多个第二数据节点;
[0105] S74,将第二数据元素的预提交完成节点字段中与预提交完成的第二数据节点对应的标志位设置为第二目标值,其中,预提交完成节点字段用于指示目标全局事务在每个
第二数据节点上的预提交状态。
[0106] 协调节点上建立的全局事务表中可以但不限于包含以下字段:全局事务标识字段(如图4中所示的事务id),预提交事务标识字段(如图4中所示的预提交id),操作节点字段
(用于指示全局事务所跨的数据节点,如图4中所示的预提交操作的节点数,用bit位表示每
个节点),预提交完成节点字段(如图4中所示的预提交是否全部完成,用bit位表示每个节
点)。此外,协调节点上建立的全局事务表还可以包含:二阶段提交标识字段(如图4中所示
的二阶段提交id)。
[0107] 对于目标全局事务,第二协调节点可以在第二事务表中新增第二数据元素,该数据元素的全局事务标识字段为目标事务标识,其他字段为0。在开启在两阶段事务提交之
后,在预提交阶段,第二协调节点可以从全局事务管理器获取与目标全局事务对应的预提
交事务的事务标识,即,第二事务标识,并将第二数据元素的预提交事务字段的字段信息更
新为第二事务标识。
[0108] 并且,第二协调节点可以根据该目标全局事务所跨的多个第二数据节点,将第二数据元素的操作节点字段中与每个第二数据节点对应的标志位设置为第一目标值。例如,
操作节点字段中的每个标志位(bit位)对应于一个数据节点,如果是全局事务所跨的数据
节点,其对应的标志位可以置为第一目标值,例如,1,否则,其对应的标志位可以置为其他
值,例如,0。
[0109] 在预提交成功之后,第二数据节点可以向第二协调节点返回预提交成功的指示信息。基于接收到的预提交成功的指示信息,第二协调节点可以将第二数据元素的预提交完
成节点字段中与发送该指示信息的数据节点对应的标志位设置为第二目标值。例如,预提
交完成节点字段中的每个标志位(bit位)对应于一个数据节点,如果是确定预提交成功的
第二数据节点,其对应的标志位可以置为第二目标值,例如,1,否则,其对应的标志位可以
置为其他值,例如,0。
[0110] 可选地,对于预提交完成节点字段中非第二数据节点所对应的标志位,可以将其置为特定值,例如,均置为1,或者,均置为0。根据操作节点字段和预提交完成节点字段,第
二协调节点可以确定出所有的第二数据节点以及目标全局事务在每个第二数据节点上的
预提交状态(即,是否完成预提交)。
[0111] 通过本实施例,通过协调节点上的全局事务表的数据元素中不同的字段记录全局事务的预提交事务标识、全局事务所跨的数据节点、以及全局事务在每个数据节点上的预
提交状态,可以提高信息记录的准确性和便捷性。
[0112] 作为一种可选的实施例,在执行目标全局事务之后,上述方法还包括:
[0113] S81,通过第一数据节点接收第二协调节点发送的第一提交指令,其中,第一提交指令用于指示对目标全局事务的目标分支事务进行预提交,第一提交指令中携带有第二事
务标识,第二事务标识为与目标全局事务对应的预提交事务的事务标识,目标分支事务用
于将第一数据节点上与目标全局事务关联的业务数据更新为第一业务数据;
[0114] S82,响应第一提交指令,对目标分支事务进行预提交,并向第二协调节点发送第一指示信息,其中,第一指示信息用于指示完成对目标分支事务的预提交;
[0115] S83,将第一事务表中的第三数据元素的预提交事务标识字段的字段信息更新为第二事务标识,其中,第三数据元素的全局事务标识字段的字段信息为目标事务标识;
[0116] S84,接收第二协调节点发送的第二提交指令,其中,第二提交指令用于指示对目标分支事务进行二阶段提交,第二提交指令中携带有第三事务标识,第三事务标识为与目
标全局事务对应的二阶段提交事务的事务标识;
[0117] S85,响应第二提交指令,对目标分支事务进行二阶段提交,并向第二协调节点发送第二指示信息,其中,第二指示信息用于指示完成目标分支事务的二阶段提交;
[0118] S86,将第三数据元素的二阶段提交事务标识字段的字段信息更新为第三事务标识。
[0119] 在执行目标全局事务时,第二协调节点可以向多个第二数据节点中的每个第二数据节点发送预提交指示,以指示各个第二数据节点对其上的目标全局事务的分支事务进行
预提交。
[0120] 对于上述第一数据节点,其可以接收到第二协调节点发送的第一提交指令,该第一提交指令用于指示对目标全局事务的目标分支事务进行预提交。这里,目标分支事务与
目标全局事务对应,用于将第一数据节点上与目标全局事务关联的业务数据更新为第一业
务数据。在第一提交指令中携带有第二事务标识,该第二事务标识是与目标全局事务对应
的预提交事务的事务标识,
[0121] 响应第一提交指令,第一数据节点可以对目标分支事务进行预提交,并向第二协调节点发送用于指示完成对目标分支事务的预提交的第一指示信息。同时,第一数据节点
可以更新第一事务表中与目标全局事务对应的数据元素(即,第三数据元素),以记录目标
全局事务在第一数据节点上完成预提交。
[0122] 在数据节点上建立的全局事务表可以但不限于包含以下字段:全局事务标识字段(如图5中所示的事务id),预提交事务标识字段(如图5中所示的预提交事务id),二阶段提
交事务标识字段(如图5中所示的第二阶段提交事务id)。此外,数据节点上建立的全局事务
表还可以包含:协调节点字段(如图5中所示的CNid)。
[0123] 在完成目标分支事务的预提交之后,第一数据节点可以将第一事务表中的第三数据元素的预提交事务标识字段的字段信息更新为第二事务标识。这里,第三数据元素的全
局事务标识字段的字段信息为目标事务标识。
[0124] 第二协调节点在确定出所有第二节点均已完成目标全局事务的分支事务的预提交之后,可以向多个第二数据节点中的每个第二数据节点发送二阶段提交指示,以指示各
第二数据节点对其上的目标全局事务的分支事务进行二阶段提交。
[0125] 对于上述第一数据节点,其可以接收到第二协调节点发送的第二提交指令,该第二提交指令用于指示对目标分支事务进行二阶段提交。在第二提交指令中可以携带有第三
事务标识,即,与目标全局事务对应的二阶段提交事务的事务标识。
[0126] 响应于第二提交指令,第一数据节点可以对目标分支事务进行二阶段提交,并向第二协调节点发送用于指示完成目标分支事务的二阶段提交的第二指示信息。同时,第一
数据节点可以将第三数据元素的二阶段提交事务标识字段的字段信息更新为第三事务标
识。
[0127] 通过本实施例,通过数据节点上的全局事务表的数据元素中不同的字段记录全局事务的预提交事务标识以及二阶段提交事务标识,可以提高信息记录的准确性和便捷性。
[0128] 作为一种可选的实施例,在按照目标查询条件进行业务数据查询,得到第一业务数据之后,上述方法还包括:
[0129] S91,在根据目标事务标识和第一事务表确定出第一业务数据不可见的情况下,向第一协调节点发送第二业务数据,其中,第二业务数据为第一业务数据的上一个版本的业
务数据。
[0130] 如果根据目标事务标识和第一事务表确定出第一业务数据不可见(确定的方式与前述相同或者类似),第一数据节点可以获取第一业务数据上一个版本的业务数据,即,第
二业务数据,该第二业务数据可以是基于第一数据节点上的回滚日志(例如,undo log)获
取的,并将第二业务数据返回给第一协调节点进行后续处理。
[0131] 可选地,在本实施例中,如果第一业务数据处于可见性待定状态、且由第一协调节点进一步判断第一业务数据的可见性,第一数据节点可以将第一业务数据和目标事务标识
(以及目标节点标识)一起发送给第一协调节点进行第一数据节点的可见性判断。
[0132] 如果第一业务数据可见,则第一协调节点可以直接使用第一业务数据进行后续处理(可以参考前述实施例中的描述)。如果第一业务数据不可见,则第一协调节点可以重新
从第一数据节点获取第二业务数据,或者,可以直接向客户端返回错误信息。第一业务数据
也可以先不返回第一业务数据,由第一协调节点在确定出第一业务数据的可见性之后从第
一数据节点获取第一业务数据、第二业务数据、或者向客户端返回错误信息等。本实施例中
对此不作限定。
[0133] 通过本实施例,在业务数据不可见时通过获取业务数据上一个版本的业务数据进行返回的方式,可以提高事务处理的合理性。
[0134] 下面结合可选示例对本申请实施例中的请求的处理方法进行解释说明。在本示例中,全局事务表为全局事务链表。分布式系统中全局事务链表的整体架构可以如图6所示,
其中,协调节点上的全局事务链表如图4所示,其中,全局事务标识字段为事务id,预提交事
务标识字段为预提交id,二阶段提交标识字段为二阶段提交id,操作节点字段为预提交操
作的节点数,预提交完成节点字段为预提交是否全部完成;而数据节点上的全局事务链表
如图5所示,其中,协调节点字段为CNid,全局事务标识字段为事务id,预提交事务标识字段
为预提交事务id,二阶段提交事务标识字段为第二阶段提交事务id。
[0135] 本示例中提供的是分布式数据库读一致性的方法,在CN节点建立全局事务链表,在DN节点完善事务链表。DN节点判断MVCC(Multi‑Version Concurrency Control,多版本
并发控制)时,如果不满足条件,则不读取,如果满足条件,则把数据返回CN节点;在CN节点
再次通过版本号验证,不符合条件的丢弃,符合条件的返回客户端。
[0136] 对于写事务,如图7所示,本可选示例中的请求的处理方法的流程可以包括以下步骤:
[0137] 步骤S702,分别在CN节点和DN节点的全局事务链表中新增事务信息。
[0138] 在一个跨多节点的更新事务中,CN节点可以访问GTM节点,获取该事务的全局事务id,并在CN节点的事务链表中新增事务id,其他字段为0,根据路由信息,访问对应的DN节
点。在DN节点的全局事务链表中新增 CNId(cn节点序号)和事务id,其他字段为0。
[0139] 步骤S704,开启事务的两阶段事务提交,分别在CN节点和DN节点的全局事务链表中更新事务信息。
[0140] CN节点开启在两阶段事务提交。在预提交阶段(即,第一阶段),CN节点访问GTM节点,获取预提交事务id,在CN节点的全局事务链表中通过事务id找到对应信息,更新当前事
务的操作的节点数(预提交操作的节点数)。以bit位来表示,如果更新全部DN节点则全部为
1,如果只是部分DN节点,则在更新的DN节点表示的位上更改为1。各个DN节点预提交完成
前,表示CN节点的预提交完成情况的字段置为0(bit位表示)。
[0141] 在预提交阶段,DN节点预提交完成后,通过CN节点和事务id,可以在其全局事务链表中查询到当前事务的记录,把预提交事务id的字段更新为当前的预提交事务id,并返回
预提交成功指示给CN节点。在CN节点上,通过当前的事务id,在其全局事务链表中查询到当
前事务id的记录,把预提交完成的节点数的表示位表示为1。
[0142] 在所有需要更新的DN阶段均已完成预提交之后,CN节点可以开始二阶段事务提交。CN节点可以首先访问GTM节点,获取提交事务id。提交信息到达DN节点,DN节点完成提交
后,可以根据事务id,在其全局事务链表中查找到当前事务记录,更新提交信息。把提交事
务id更新后,DN节点可以返回提交成功指示给CN节点。CN节点根据事务id,在其全局事务链
表中查找到当前事务的记录,等待其他DN节点全部返回。在两阶段事务完成之后,CN节点可
以删除掉事务信息,并返回写请求的处理结果给客户端。
[0143] 对于读事务,如图8所示,本可选示例中的请求的处理方法的流程可以包括以下步骤:
[0144] 步骤S802,CN节点处理读事务,并向其他CN节点发起获取其全局事务链表的请求。
[0145] 当一个读事务来时,CN节点(例如,CN_1节点)可以把当前的全局事务链表复制一份,形成自己的私有的事务链表。同时,CN节点向其他CN节点发起请求,把其他CN节点的全
局事务链表复制一份,形成一个全局的事务链表。
[0146] 步骤S804,接收DN节点返回的业务数据,并向客户端返回业务数据或者丢弃该业务数据。
[0147] 当读请求到达DN节点时,DN节点可以复制全局事务链表,形成自己的事务链表。DN节点还可以进行业务数据读取,确定满足该读请求的业务数据,并根据自己的事务链表判
断该业务数据的可见性。
[0148] 例如,在DN1节点读取一条数据,如果其事务id为100,且预提交id与二阶段事务id都存在,则此数据可见,且不需要在CN节点做二次判断,如果其事务id为102,但无二阶段事
务id,不确定其他节点的预提交是否完成,需要做特殊标记(例如,返回的信息包含CN序号、
事务id等)返回CN节点。
[0149] 由于其他CN节点的事务数据(即,全局事务链表)是异步请求的,与当前读事务并发执行,因此,可能存在当前读取事务的业务数据已经返回,而其他CN节点的事务数据还未
返回的情况。如果返回的业务数据,不需要其他的CN节点的事务数据,则不需要等待直接返
回。如果需要校验(带有特殊标记,需要进行可见性校验),则等待其他CN节点的数据返回。
[0150] 在进行可见性校验时,CN节点通过事务id查找CN节点私有的事务链表(即,当前CN节点已有的所有CN节点的全局事务链表),通过判断DN节点是否全部完成预提交,如果全部
完成,则业务数据可见,如果部分完成,则业务数据不可见。
[0151] 例如,在CN_1节点查到事务标识为102的事务记录,判断其预提交是否全部完成,发现其第三个DN节点未完成,则事务标识为102的事务未完成预提交,则不可见,丢弃返回
的业务数据。
[0152] 通过本示例,分别在DN与CN节点建立全局事务链表,可实时判断数据的可见性,无需等待,可以实现分布式数据读写MVCC,解决因读阻塞导致的读请求的处理效率低的问题。
[0153] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为
依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知
悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请
所必须的。
[0154] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多
情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有
技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储
介质(如ROM(Read‑Only Memory,只读存储器)/RAM(Random Access Memory,随机存取存储
器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或
者网络设备等)执行本申请各个实施例所述的方法。
[0155] 根据本申请实施例的另一个方面,还提供了一种用于实施上述请求的处理方法的请求的处理装置。图9是根据本申请实施例的一种可选的请求的处理装置的结构框图,如图
9所示,该装置可以包括:
[0156] 第一接收单元902,用于接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;
[0157] 第一查询单元904,与第一接收单元902相连,用于响应第一读请求,按照目标查询条件进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识
的目标全局事务所对应的业务数据;
[0158] 第一发送单元906,与第一查询单元904相连,用于在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,向第一协调节点发送第一业务数据,其中,第一事
务表中的一个数据元素用于记录一个全局事务标识所标识的全局事务在第一数据节点上
的两阶段提交状态。
[0159] 需要说明的是,该实施例中的第一接收单元902可以用于执行上述步骤S202,该实施例中的第一查询单元904可以用于执行上述步骤S204,该实施例中的第一发送单元906可
以用于执行上述步骤S206。
[0160] 通过上述模块,接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;响应第一读请求,按照目标查询条件
进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识的目
标全局事务所对应的业务数据;在根据目标事务标识和第一事务表确定出第一业务数据可
见的情况下,向第一协调节点发送第一业务数据,其中,第一事务表中的一个数据元素用于
记录一个全局事务标识所标识的全局事务在第一数据节点上的两阶段提交状态,解决了相
关技术中的事务读方式存在由于需要等待行锁释放导致的数据读效率低的问题,提高了数
据的读取效率。
[0161] 作为一种可选的实施例,上述装置还包括:
[0162] 第二查询单元,用于在按照目标查询条件进行业务数据查询,得到第一业务数据之后,使用目标事务标识查询第一事务表中的至少一个数据元素;
[0163] 第一确定单元,用于在目标事务标识满足第一目标条件的情况下,确定第一业务数据可见;
[0164] 其中,第一目标条件为以下之一:目标事务标识小于第一事务表中最小的全局事务标识;目标事务标识为第一事务表中的第一数据元素的全局事务标识,且第一数据元素
所记录的目标全局事务在第一数据节点上的两阶段提交状态为两阶段均已提交。
[0165] 作为一种可选的实施例,上述装置还包括:
[0166] 第二确定单元,用于在使用目标事务标识查询第一事务表中的至少一个数据元素之后,在目标事务标识满足第二目标条件的情况下,确定第一业务数据不可见;
[0167] 其中,第二目标条件为以下之一:目标事务标识大于第一事务表中最大的全局事务标识;目标事务标识为第一事务表中的第一数据元素的全局事务标识,且第一数据元素
所记录的目标全局事务在第一数据节点上的两阶段提交状态为预提交未完成。
[0168] 作为一种可选的实施例,第一协调节点所属的分布式系统中的每个协调节点具有一个全局事务表,每个协调节点的全局事务表用于记录每个协调节点所处理的全局事务的
全局事务标识、及每个协调节点所处理的全局事务在对应的各个数据节点上的预提交状
态。可选地,在本实施例中,上述装置还包括:
[0169] 第三确定单元,用于在使用目标事务标识查询第一事务表中的至少一个数据元素之后,在目标事务标识满足第三目标条件的情况下,确定第一业务数据处于可见性待定状
态,其中,第三目标条件为目标事务标识为第一事务表中的第一数据元素的全局事务标识,
且第一数据元素所记录的目标全局事务在第一数据节点上的两阶段提交状态为预提交已
完成、而二阶段提交未完成;
[0170] 第二发送单元,用于将目标事务信息发送给第一协调节点,以由第一协调节点根据目标事务信息和第二事务表确定第一业务数据的可见性,其中,目标事务信息包含目标
事务标识,第二事务表为处理目标全局事务的第二协调节点的全局事务表。
[0171] 作为一种可选的实施例,目标事务信息还包括用于标识第二协调节点的目标节点标识。可选地,在本实施例中,上述装置还包括:
[0172] 第四确定单元,用于在将目标事务信息发送给第一协调节点之后,确定与目标节点标识所标识的第二协调节点所对应的第二事务表;
[0173] 查找单元,用于在第二事务表中查找到与目标事务标识对应的第二数据元素;
[0174] 第五确定单元,用于在第二数据元素所记录的目标全局事务在对应的各个数据节点上的预提交状态为全部完成预提交的情况下,确定第一业务数据可见;
[0175] 第六确定单元,用于在第二数据元素所记录的目标全局事务在对应的各个数据节点上的预提交状态为未全部完成预提交的情况下,确定第一业务数据不可见。
[0176] 作为一种可选的实施例,上述装置还包括:
[0177] 第二接收单元,用于在接收第一协调节点发送的第一读请求之前,通过第一协调节点接收到第二读请求,其中,第二读请求用于请求读取满足目标查询条件的业务数据;
[0178] 第三发送单元,用于响应第二读请求,向第一数据节点发送第一读请求;
[0179] 第四发送单元,用于通过第一协调节点向分布式系统中除了第一协调节点以外的其他协调节点发送目标获取请求,其中,目标获取请求用于请求获取其他协调节点的全局
事务表;
[0180] 第三接收单元,用于接收其他协调节点响应目标获取请求返回的其他协调节点的全局事务表,其中,其他协调节点的全局事务表包括第二事务表。
[0181] 作为一种可选的实施例,上述装置还包括:
[0182] 第七确定单元,用于在接收第一协调节点发送的第一读请求之前,通过第二协调节点确定待执行的目标全局事务,其中,目标全局事务为跨多个第二数据节点的数据更新
事务,多个第二数据节点包括第一数据节点;
[0183] 执行单元,用于执行目标全局事务,以通过多个分支事务在多个第二数据节点中上执行与目标全局事务对应的数据更新操作,其中,多个分支事务与多个第二数据节点一
一对应;
[0184] 记录单元,用于通过第二事务表中的第二数据元素记录目标全局事务在多个第二数据节点中的每个第二数据节点上的预提交状态。
[0185] 作为一种可选的实施例,记录单元包括:
[0186] 获取模块,用于从全局事务管理器获取第二事务标识,其中,第二事务标识为与目标全局事务对应的预提交事务的事务标识;
[0187] 更新模块,用于将第二数据元素的预提交事务字段的字段信息更新为第二事务标识,其中,第二数据元素的全局事务标识字段的字段信息为目标事务标识;
[0188] 第一设置模块,用于将第二数据元素的操作节点字段中与每个第二数据节点对应的标志位设置为第一目标值,其中,操作节点字段用于指示多个第二数据节点;
[0189] 第二设置模块,用于将第二数据元素的预提交完成节点字段中与预提交完成的第二数据节点对应的标志位设置为第二目标值,其中,预提交完成节点字段用于指示目标全
局事务在每个第二数据节点上的预提交状态。
[0190] 作为一种可选的实施例,上述装置还包括:
[0191] 第四接收单元,用于在执行目标全局事务之后,通过第一数据节点接收第二协调节点发送的第一提交指令,其中,第一提交指令用于指示对目标全局事务的目标分支事务
进行预提交,第一提交指令中携带有第二事务标识,第二事务标识为与目标全局事务对应
的预提交事务的事务标识,目标分支事务用于将第一数据节点上与目标全局事务关联的业
务数据更新为第一业务数据;
[0192] 预提交单元,用于响应第一提交指令,对目标分支事务进行预提交;
[0193] 第五发送单元,用于向第二协调节点发送第一指示信息,其中,第一指示信息用于指示完成对目标分支事务的预提交;
[0194] 第一更新单元,用于将第一事务表中的第三数据元素的预提交事务标识字段的字段信息更新为第二事务标识,其中,第三数据元素的全局事务标识字段的字段信息为目标
事务标识;
[0195] 第五接收单元,用于接收第二协调节点发送的第二提交指令,其中,第二提交指令用于指示对目标分支事务进行二阶段提交,第二提交指令中携带有第三事务标识,第三事
务标识为与目标全局事务对应的二阶段提交事务的事务标识;
[0196] 提交单元,用于响应第二提交指令,对目标分支事务进行二阶段提交;
[0197] 第六发送单元,用于向第二协调节点发送第二指示信息,其中,第二指示信息用于指示完成目标分支事务的二阶段提交;
[0198] 第二更新单元,用于将第三数据元素的二阶段提交事务标识字段的字段信息更新为第三事务标识。
[0199] 作为一种可选的实施例,上述装置还包括:
[0200] 第七发送单元,用于在按照目标查询条件进行业务数据查询,得到第一业务数据之后,在根据目标事务标识和第一事务表确定出第一业务数据不可见的情况下,向第一协
调节点发送第二业务数据,其中,第二业务数据为第一业务数据的上一个版本的业务数据。
[0201] 此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如
图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络
环境。
[0202] 根据本申请实施例的又一个方面,还提供了一种用于实施上述请求的处理方法的电子设备,该电子设备可以是服务器、终端、或者其组合。
[0203] 图10是根据本申请实施例的一种可选的电子设备的结构框图,如图10所示,包括处理器1002、通信接口1004、存储器1006和通信总线1008,其中,处理器1002、通信接口1004
和存储器1006通过通信总线1008完成相互间的通信,其中,
[0204] 存储器1006,用于存储计算机程序;
[0205] 处理器1002,用于执行存储器1006上所存放的计算机程序时,实现如下步骤:
[0206] 接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;
[0207] 响应第一读请求,按照目标查询条件进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据;
[0208] 在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,向第一协调节点发送第一业务数据,其中,第一事务表中的一个数据元素用于记录一个全局事务标
识所标识的全局事务在第一数据节点上的两阶段提交状态。
[0209] 可选地,在本实施例中,上述的通信总线可以是PCI (Peripheral Component Interconnect,外设部件互连标准)总线、或EISA  (Extended Industry Standard 
Architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制
总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总
线。通信接口用于上述电子设备与其他设备之间的通信。
[0210] 存储器可以包括RAM,也可以包括非易失性存储器(non‑volatile memory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
[0211] 作为一种示例,上述存储器1006中可以但不限于包括上述请求的处理装置中的第一接收单元902、第一查询单元904以及第一发送单元906。此外,还可以包括但不限于上述
请求的处理装置中的其他模块单元,本示例中不再赘述。
[0212] 上述处理器可以是通用处理器,可以包含但不限于:CPU (Central Processing Unit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP (Digital 
Signal Processing,数字信号处理器)、ASIC (Application Specific Integrated 
Circuit,专用集成电路)、FPGA (Field-Programmable Gate Array,现场可编程门阵列)
或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
[0213] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
[0214] 本领域普通技术人员可以理解,图10所示的结构仅为示意,实施上述请求的处理方法的设备可以是终端设备,该终端设备可以是智能手机(如Android手机、iOS手机等)、平
板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。
图10其并不对上述电子设备的结构造成限定。例如,电子设备还可包括比图10中所示更多
或者更少的组件(如网络接口、显示装置等),或者具有与图10所示的不同的配置。
[0215] 本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质
中,存储介质可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
[0216] 根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项请求的处理方法的程序代码。
[0217] 可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
[0218] 可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
[0219] 接收第一协调节点发送的第一读请求,其中,第一读请求用于请求读取第一数据节点上满足目标查询条件的业务数据;
[0220] 响应第一读请求,按照目标查询条件进行业务数据查询,得到第一业务数据,其中,第一业务数据为与目标事务标识所标识的目标全局事务所对应的业务数据;
[0221] 在根据目标事务标识和第一事务表确定出第一业务数据可见的情况下,向第一协调节点发送第一业务数据,其中,第一事务表中的一个数据元素用于记录一个全局事务标
识所标识的全局事务在第一数据节点上的两阶段提交状态。
[0222] 可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
[0223] 可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0224] 上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
[0225] 上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技
术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软
件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一
台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所
述方法的全部或部分步骤。
[0226] 在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0227] 在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一
种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者
可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之
间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连
接,可以是电性或其它的形式。
[0228] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络
单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方
案的目的。
[0229] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0230] 以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本申请的保护范围。