掌桥专利:专业的专利平台
掌桥专利
首页

事务处理方法、装置、设备、介质和计算机程序产品

文献发布时间:2023-06-19 19:18:24


事务处理方法、装置、设备、介质和计算机程序产品

技术领域

本发明涉及数据执行技术领域,尤其涉及一种事务处理方法、装置、设备、介质和计算机程序产品。

背景技术

在数据库中,执行器是负责执行事务的命令的引擎。执行器的运行需要依赖上下文关系,也即需要执行器的运行需要依赖自身的执行状态。

数据库设置有事务机制,通过事务机制可以保证事务数据的完整性。事务处理以及执行器的运行同时影响整个命令执行的生命周期。

当前的执行器在执行事务的命令时,为了保证事务数据的完整性,需要采用独立环境中的执行器执行事务的命令,而其他执行器并未有执行事务的执行器的执行状态,导致其他执行器无法执行事务的命令,从而无法保证事务数据的完整性。

发明内容

本发明提供一种事务处理方法、装置、设备、介质和计算机程序产品,用以解决事务数据的完整性无法得到保证的问题。

一方面,本发明提供一种事务处理方法,包括:

获取执行目标事务的第一执行器的状态数据;

将所述状态数据配置于第二执行器,以使所述第二执行器继承所述第一执行器的执行状态,所述第一执行器与所述第二执行器位于不同的执行环境;

控制所述第二执行器基于所述状态数据执行所述目标事务的命令。

在一实施例中,所述控制所述第二执行器基于所述状态数据执行所述目标事务的命令的步骤包括:

根据所述状态数据确定所述第一子执行器的环境数据以及执行数据;

对所述第二子执行器内的所述环境数据中的目标参数的值进行重置,以使所述第二子执行器继承所述第一子执行器的环境数据,所述目标参数包括会话级配置参数以及会话级变量;

根据所述执行数据控制所述第二执行器执行所述目标事务的命令。

在一实施例中,所述控制所述第二执行器基于所述状态数据执行所述目标事务的命令的步骤包括:

根据所述状态数据确定所述第一执行器未执行的目标命令;

控制所述第二执行器执行所述目标事务所对应的目标命令。

在一实施例中,所述获取执行目标事务的第一执行器的状态数据的步骤包括:

提取所述第一会话对应的所述第一执行器的状态数据;

所述将所述状态数据配置于第二执行器的步骤包括:

将所述状态数据进行序列化,并将序列化后的所述状态数据添加至第二会话;

基于所述第二会话将序列化后的状态数据进行反序列化得到所述状态数据,并将所述状态数据写入至所述第二会话对应的第二执行器。

在一实施例中,所述获取执行目标事务的第一执行器的状态数据的步骤包括:

获取所述目标事务的当前命令;

在确定所述当前命令需要在独立环境中执行时,获取执行目标事务的第一执行器的状态数据。

在一实施例中,所述控制所述第二执行器基于所述状态数据执行所述目标事务的命令的步骤包括:

控制所述第二执行器执行所述当前命令;

在所述第二执行器执行所述当前命令后,控制所述第二执行器停止运行,并控制所述第一执行器执行所述目标事务的待执行命令,所述待执行命令不需要在独立环境中执行。

另一方面,本发明还提供一种事务处理装置,包括:

获取模块,用于获取执行目标事务的第一执行器的状态数据;

配置模块,用于将所述状态数据配置于第二执行器,以使所述第二执行器继承所述第一执行器的执行状态,所述第一执行器与所述第二执行器位于不同的执行环境;

控制模块,用于控制所述第二执行器基于所述状态数据执行所述目标事务的命令。

另一方面,本发明还提供一种事务处理设备,包括:存储器和处理器;

所述存储器存储计算机执行指令;

所述处理器执行存储器存储的计算机执行指令,使得事务处理设备执行如上所述的事务处理方法。

另一方面,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上所述的事务处理方法.

另一方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时用于实现如上所述的事务处理方法。

本发明提供的事务处理方法、装置、设备、介质和计算机程序产品,获取执行目标事务的第一执行器的状态数据,并将状态数据配置于第二执行器,从而控制第二执行器基于状态数据执行目标事务的命令。本发明中,与第一执行器位于不同的执行环境的第二执行器继承第一执行器的状态数据,从而使得第二执行器能够执行器事务的命令,确保了事务数据的完整性。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1为本发明事务处理方法的一场景示意图;

图2为本发明事务处理方法的第一实施例的流程示意图;

图3为本发明事务处理方法第二实施例的流程示意图;

图4为本发明事务处理方法第三实施例的流程示意图;

图5为本发明事务处理方法的简要交互示意图;

图6为本发明事务处理装置的功能模块示意图;

图7为本发明事务处理设备的硬件结构示意图。

通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在数据库中,执行器是负责执行事务的命令的引擎。执行器的运行需要依赖上下文关系,也即需要执行器的运行需要依赖自身的执行状态。

数据库设置有事务机制,通过事务机制可以保证事务数据的完整性。事务处理以及执行器的运行同时影响整个命令执行的生命周期。

本专利发明人发现,当前的执行器在执行事务的命令时,为了保证事务数据的完整性,需要采用独立环境中的执行器执行事务的命令,而其他执行器并未有执行事务的执行器的执行状态,导致其他执行器无法执行事务的命令,从而无法保证事务数据的完整性。

本专利发明人因此想到,与第一执行器位于不同的执行环境的第二执行器继承第一执行器的状态数据,从而使得第二执行器能够执行器事务的命令,确保了事务数据的完整性。

参照图1,图1为事务处理方法的一应用场景示意图。如图1所示,事务处理装置100中设有第一执行器110以及第二执行器120。第一执行器110用于执行会话1所对应的事务的命令,第二执行器120用于执行会话2所对应的事务的命令,且第一执行器110与第二执行器120位于不同的执行环境(虚线框即为执行环境)。事务处理装置100将执行目标事务的第一执行器110的状态数据传递到第二执行器120,从而使得第二执行器120基于状态数据执行目标事务的命令。

下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。

参照图2,图2为本发明事务处理方法的第一实施例,事务处理方法包括以下步骤:

步骤S201,获取执行目标事务的第一执行器的状态数据。

在本实施例中,执行主体为事务处理装置,为了便于描述,以下采用装置指代事务处理装置。装置可以是数据库的实体设备,或者是设有数据库的终端设备。

数据库中事务的执行依赖于装置中的执行器执行。数据库中的一个会话对应一个执行器。将执行目标事务的执行器定义为第一执行器,且目标事务可以是任一个正在执行的事务。

装置获取执行目标事务的第一执行器的状态数据。状态数据包括有第一执行器的环境数据以及执行数据。环境数据指的是第一执行器所在执行环境的数据,而执行数据指的是第一执行器本身运行所产生的数据。

状态数据源包括第一执行器处理数据的原始数据、数据库程序的信息、数据库变量的信息、数据库数据类型的信息、第一执行器的事务状态、第一执行器处理的局部变量信息、第一执行器的上下文关系、第一执行器的快照信息、第一执行器的异常信息、第一执行器的缓存数据、第一执行器的插件信息、第一执行器的递归深度、第一执行器中SQL语句的内存上下文、第一执行器中数据的内存上下文、第一执行器中表达式环境。

步骤S202,将状态数据配置于第二执行器,以使第二执行器继承第一执行器的执行状态,第一执行器与第二执行器位于不同的执行环境。

装置中设有新的会话,且新的会话关联新的执行器,该执行器定义为第二执行器。第二执行器与第一执行器所在的执行环境不同。第一执行器可是父执行器,而第二执行器为子执行器。

装置在获得第一执行器的状态数据后,将状态数据配置于第二执行器,从而使得第二执行器继承第一执行器的执行状态,也即装置将状态数据写入至第二执行器。

步骤S203,控制第二执行器基于状态数据执行目标事务的命令。

状态数据中包括有目标事务的待执行的命令。第二执行器在配置状态数据后,即可基于状态数据的命令执行目标事务的命令,也即继承第一执行器的执行状态继续执行目标事务的命令。

在本实施例中,获取执行目标事务的第一执行器的状态数据,并将状态数据配置于第二执行器,从而控制第二执行器基于状态数据执行目标事务的命令。本发明中,与第一执行器位于不同的执行环境的第二执行器继承第一执行器的状态数据,从而使得第二执行器能够执行器事务的命令,确保了事务数据的完整性。

参照图3,图3为本发明事务处理方法第二实施例,基于第一实施例,步骤S203包括:

步骤S301,根据状态数据确定第一子执行器的环境数据以及执行数据。

在本实施例中,第二执行器的运行依赖大量的数据支撑,也即第二执行器的运行需要依赖于状态数据。在需要控制第二执行器运行时,需要第二执行器继承第一执行器的环境数据以及执行状态。对此,装置基于状态数据确定第一执行器的环境数据以及执行数据。

步骤S302,对第二子执行器内的环境数据中的目标参数的值进行重置,以使第二子执行器继承第一子执行器的环境数据,目标参数包括会话级配置参数以及会话级变量。

装置先初始化环境数据,环境数据包括会话级配置参数、全局级配置参数、会话级变量、全局级变量、数据库事务以及内存上下文。第一执行器所在的会话与第二执行器所在的会话不同,需要对会话级配置参数以及会话级变量的值进行重置,即可使得第二执行器恢复第一执行器的环境数据,也即使得第二执行器继承第一执行器的环境数据。在本实施例中,将会话级配置参数以及会话级变量定义为目标参数。进一步的,在重置目标参数的值后,初始化第二执行器,使得第二执行器继承环境数据。

步骤S303,根据执行数据控制第二执行器执行目标事务的命令。

初始化第二执行器后,需要控制第二执行器继承第一执行器的执行状态。装置通过将状态数据中的执行数据加载至第二执行器,使得第二执行器继承第一执行器的执行状态。执行数据包括原始sql命令、数据库局部变量、第一执行器异常信息等。装置基于执行数据即可控制第二执行器执行目标事务的命令,命令即为上述的原始sql命令。

在本实施例中,第二执行器先初始化第一执行器的环境数据、再恢复第一执行器的环境数据(继承第一执行器的环境数据)、初始化第二执行器、最后第二执行器继承第一执行器的执行状态,从而使得第二执行器能够接替第一执行器执行目标事务的命令。

在一实施例中,装置在控制第二执行器执行目标事务的命令时,装置先根据状态数据确定第一执行器未执行的目标命令,再控制第二执行器执行目标事务对应的目标命令。具体的,装置从状态数据中确定第一执行器已经执行的命令,再控制第二执行器执行第一执行器未执行的命令,也即第二执行器跳过第一执行器已执行的命令,并执行第一执行器发送的目标事务的未执行命令。第二执行器执行目标命令后,提交目标命令所在的事务,以保证事务的独立性。

在一实施例中,装置在需要获取第一执行器的状态数据时,提取第一会话对应的第一执行器的状态数据。而在将状态数据配置于第二执行器时,第一会话先将状态数据进行序列化,且将需要执行的sql命令也序列化到状态数据中,装置再将序列化的状态数据添加至第二会话。装置可以基于共享内存将序列化的状态数据发送至第二会话。第二会话将序列化后的状态数据进行反序列化得到状态数据,也即得到第一执行器的环境数据以及包括需要执行sql命令的执行数据,第二会话再将状态数据写入至第二执行器。

参照图4,图4为本发明事务处理方法第三实施例,基于第一或第二实施例,步骤S201包括:

步骤S401,获取目标事务的当前命令。

步骤S402,在确定当前命令需要在独立环境中执行时,获取执行目标事务的第一执行器的状态数据。

在本实施例中,目标事务有多个命令,一些命令的执行需要在独立环境执行。装置获取目标事务的当前命令,当前命令是第一执行器待执行的命令。

装置确定当前命令是否需要独立环境中执行。若是当前命令需要在独立环境中执行时,装置则获取执行目标事务的第一执行器的状态数据,也即装置将状态数据写入至第二执行器,使得第二执行器在独立环境中执行当前命令。

进一步的,装置控制第二执行器执行当前命令,并在第二执行器执行当前命令后,控制第二执行器停止运行,且控制第一执行器执行目标事务的待执行命令,待执行命令不需要在独立环境中执行。

参照图5,对本实施例的整体流程进行简要说明。

1、装置内的主进程基于一个fork子进程(fork函数为主进程创建的子进程)先控制会话1启动;

2、会话2配置环境参数、初始化内存上下文、启动数据库事务且启动会话1的执行器;

3、执行器启动后,若是多语句SQL命令(SQL命令1、SQL命令2、SQL命令n)中任一SQL命令不需要在独立事务控制,会话1的执行器在执行SQL命令;

4、若是SQL命令需要在独立事务控制,触发fork子进程命令,使得会话1序列化执行器的状态数据;

5、会话1将序列化的状态数据(序列化的状态数据即为会话1执行器的状态)传递至会话2;

6、会话2反序列化状态数据,并基于反序列化的状态数据将会话1的执行器的环境特征值、会话1的执行器的特征值写入至会话2的执行器,环境特征值以及执行器的特征值表征会话1中的执行器的状态数据;

7、会话2的执行器执行sql命令,并提交当前事务,且向会话1返回执行结果,且会话2的执行器停止运行;

8、会话1的执行器继续执行器其他不需要独立事务控制的命令。

在本实施例中,装置获取目标事务的当前命令,若是当前命令需要在独立环境中执行,则获取执行目标事务的第一执行器的状态数据,从而使得第二执行器在独立环境中执行当前命令,以保证事务的完整性。

本发明还提供一种事务处理装置,参照图6,事务处理装置600包括:

获取模块610,用于获取执行目标事务的第一执行器的状态数据;

配置模块620,用于将状态数据配置于第二执行器,以使第二执行器继承第一执行器的执行状态,第一执行器与第二执行器位于不同的执行环境;

控制模块630,用于控制第二执行器基于状态数据执行目标事务的命令。

在一实施例中,事务处理装置600包括:

确定模块,用于根据状态数据确定第一子执行器的环境数据以及执行数据;

重置模块,用于对第二子执行器内的环境数据中的目标参数的值进行重置,以使第二子执行器继承第一子执行器的环境数据,目标参数包括会话级配置参数以及会话级变量;

控制模块630,用于根据执行数据控制第二执行器执行目标事务的命令。

在一实施例中,事务处理装置600包括:

确定模块,用于根据状态数据确定第一执行器未执行的目标命令;

控制模块630,用于控制第二执行器执行目标事务所对应的目标命令。

在一实施例中,事务处理装置600包括:

提取模块,用于提取第一会话对应的第一执行器的状态数据;

处理模块,用于将状态数据进行序列化,并将序列化后的状态数据添加至第二会话;

处理模块,用于基于第二会话将序列化后的状态数据进行反序列化得到状态数据,并将状态数据写入至第二会话对应的第二执行器。

在一实施例中,事务处理装置600包括:

获取模块610,用于获取目标事务的当前命令;

获取模块610,用于在确定当前命令需要在独立环境中执行时,获取执行目标事务的第一执行器的状态数据。

在一实施例中,事务处理装置600包括:

控制模块630,用于控制第二执行器执行当前命令;

控制模块630,用于在第二执行器执行当前命令后,控制第二执行器停止运行,并控制第一执行器执行目标事务的待执行命令,待执行命令不需要在独立环境中执行。

图7是根据一示例性实施例示出的一种事务处理设备的硬件结构示意图。

事务处理设备700可以包括:处理器701,例如CPU,存储器702、收发器703。本领域技术人员可以理解,图7中示出的结构并不构成对事务处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

处理器701可以调用存储器702内存储的计算机程序或计算机执行指令,以完成上述的事务处理方法的全部或部分步骤。

收发器703用于接收外部设备发送的信息以及向外部设备发送信息。

一种非临时性计算机可读存储介质,当该存储介质中的指令(计算机执行指令)由事务处理设备的处理器执行时,使得事务处理设备能够执行上述事务处理方法。

一种计算机程序产品,包括计算机程序,当该计算机程序由事务处理设备的处理器执行时,使得事务处理设备能够执行上述事务处理方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。

相关技术
  • 数据库事务处理方法、装置、设备和计算机可读存储介质
  • 一种事务处理方法、装置、设备及可读存储介质
  • IP产品运营数据处理方法、装置、设备及可读存储介质
  • 图像处理方法和装置、电子设备、存储介质、程序产品
  • 图像处理方法和装置、电子设备、存储介质、程序产品
  • 数据处理方法、数据传输方法、数据接收方法、设备、代码本、计算机程序产品以及计算机程序分发介质
  • 数据处理方法、数据传输方法、数据接收方法、设备、代码本、计算机程序产品以及计算机程序分发介质
技术分类

06120115865987