事务处理方法、装置、分布式数据库系统及电子设备

文档序号:1875250 发布日期:2021-11-23 浏览:16次 >En<

阅读说明:本技术 事务处理方法、装置、分布式数据库系统及电子设备 (Transaction processing method and device, distributed database system and electronic equipment ) 是由 王天宇 于 2021-10-25 设计创作,主要内容包括:本发明实施例提供了一种事务处理方法、装置、分布式数据库系统及电子设备,涉及数据库技术领域。具体实现方案为:当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,读事务中携带有读时间戳;若行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;比较所述准备时间戳与所述读时间戳的大小;若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。(The embodiment of the invention provides a transaction processing method and device, a distributed database system and electronic equipment, and relates to the technical field of databases. The specific implementation scheme is as follows: when a processing request of a read transaction is received, determining row data for which the read transaction aims; wherein the read transaction carries a read timestamp; if the data state of the row of data is modified by the write transaction and the write transaction is in a preparation state, determining a preparation timestamp corresponding to the write transaction; when the write transaction enters the preparation state, the transaction manager issues the maximum timestamp which is obtained currently to the resource manager; comparing the size of the preparation timestamp and the read timestamp; if the preparation timestamp is greater than or equal to the read timestamp, determining that the current version of the row of data modified by the write transaction is invisible to the read transaction; and if the preparation timestamp is smaller than the read timestamp, blocking the read transaction.)

事务处理方法、装置、分布式数据库系统及电子设备

技术领域

本发明涉及数据库技术领域,特别是涉及一种事务处理方法、装置、分布式数据库系统及电子设备。

背景技术

分布式数据库是构建在分布式集群上的数据库,能够通过将数据切分到多个服务器节点上的方式实现事务处理性能的扩展。在分布式数据库中,一般采用基于时间戳的方式处理分布式事务的分布式一致性读。

相关技术中,当读事务读取某一行数据时,若该行数据的数据状态为被写事务修改且所述写事务处于prepare(准备)状态,由于读事务的读时间戳大小和该写事务的提交时间戳大小无法判断,导致该行数据的可见性无法判断。此时,该读事务被阻塞,直至该写事务的提交时间戳写入到该行数据为止,即发生写阻塞读。

在写阻塞读过程中,读事务持有的锁资源、连接资源等无法及时释放。若被阻塞事务等待时间过长,显然,数据库性能会出现明显抖动。

发明内容

本发明实施例的目的在于提供一种事务处理方法、装置、分布式数据库系统及电子设备,以实现最大化的降低写阻塞读的概率,从而保证数据库性能平稳。具体技术方案如下:

第一方面,本发明实施例提供了一种事务处理方法,应用于资源管理器,所述方法包括:

当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,所述读事务中携带有读时间戳;

若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;

比较所述准备时间戳与所述读时间戳的大小;

若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;

若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。

可选地,所述确定所述写事务对应的准备时间戳之前,所述方法还包括:

接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳,包括:

接收所述事务管理器下发的、用于指示所述写事务进入准备状态的指令;其中,所述指令中携带有所述事务管理器当前已获取到的最大时间戳;

从所述指令中提取所述最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,所述方法还包括:

获取所述行数据的当前版本的上一版本;

比较所述上一版本中的提交时间戳和所述读时间戳的大小;

若所述读时间戳大于或等于所述上一版本中的提交时间戳,读取所述上一版本中的数据,作为所述读事务的响应结果。

第二方面,本发明实施例提供了一种分布式数据库系统,所述系统包括:事务管理器和资源管理器;

所述资源管理器,用于当接收到读事务的处理请求时,确定所述读事务所针对的行数据,其中,所述读事务中携带有读时间戳;若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,获取所述写事务对应的准备时间戳,其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;比较所述准备时间戳与所述读时间戳的大小;若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞;

所述事务管理器,用于在所述写事务进入准备状态时,将当前已获取到的最大时间戳下发给所述资源管理器。

可选地,所述系统还包括:全局时间戳服务器;

所述事务管理器,还用于针对每一写事务/读事务,从全局时间戳服务器中,获取该写事务/读事务待利用的时间戳;

所述全局时间戳服务器,用于为该写事务/读事务分配时间戳。

可选地,所述资源管理器,还用于在确定所述写事务对应的准备时间戳之前,接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述资源管理器还用于:在判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,

获取所述行数据的当前版本的上一版本;

比较所述上一版本中的提交时间戳和所述读时间戳的大小;

若所述读时间戳大于或等于所述上一版本中的提交时间戳,读取所述上一版本中的数据,作为所述读事务的响应结果。

第三方面,本发明实施例提供了一种事务处理装置,应用于资源管理器,所述装置包括:

第一确定模块,用于当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,所述读事务中携带有读时间戳;

第二确定模块,用于若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;

比较模块,用于比较所述准备时间戳与所述读时间戳的大小;

判定模块,用于若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;

阻塞模块,用于若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。

第四方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述的事务处理方法步骤。

第五方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述的事务处理方法步骤。

第六方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的事务处理方法。

本发明实施例有益效果:

本发明实施例提供的一种事务处理方法,在确定所述读事务所针对的行数据后,当所述行数据的数据状态为被写事务修改且所述写事务处于准备状态时,确定所述写事务对应的准备时间戳,其中,准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳,其一定小于所述写事务提交时的提交时间戳;进而,比较所述准备时间戳与所述读时间戳的大小,若所述准备时间戳大于或等于所述读时间戳,即可判定所述行数据的当前版本,对所述读事务不可见;否则,对所述读事务进行阻塞。可见,通过引入准备时间戳与读时间戳的比较,减少了导致所述行数据的当前版本对所述读事务的可见性无法判断的情况,进而最大化的降低写阻塞读的概率,保证了数据库性能平稳。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。

图1为本发明实施例所提供的一种行数据的示意图;

图2为本发明实施例所提供的一种事务处理方法的架构示意图;

图3为本发明实施例所提供的一种事务处理方法的流程图;

图4为本发明实施例所提供的一种事务处理方法的另一流程图;

图5为本发明实施例所提供的一种分布式数据库系统的结构示意图;

图6为本发明实施例所提供的一种事务处理装置的结构示意图;

图7为本发明实施例所提供的一种电子设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。

分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于不同的分布式系统的不同节点之上。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

并且,资源管理器所处理的写事务和读事务均属于分支事务,多个分支事务构成分布式事务。而针对MVCC(Multi-Version Concurrency Control ,多版本并发控制)的应用场景而言,分布式数据库中记录有行数据,每一行数据(也可以称为行记录)可以有多个版本数据;并且,任一写事务用于针对某一行数据生成新的版本数据;而任一读事务用于从行数据的各个版本数据中,读取可见的一版本数据。

相关技术中,一般采用基于时间戳的方式处理分布式数据库中分布式事务的数据一致性读。事务管理器在针对资源管理器生成读事务时,向全局时间戳服务器请求读事务的开启时间戳,即RTS(ReadTimeStamp,读时间戳),通过SQL(Structured Query Language,结构化查询语言)语句向资源管理器下发读事务,SQL语句中携带有RTS。同理,事务管理器在针对资源管理器生成写事务时,也会向全局时间戳服务器请求写事务的开启时间戳,并通过SQL语句向资源管理器下发写事务,写事务中携带有开启时间戳;资源管理器接收到写事务后,即接收到写事务的处理请求后,对写事务所针对的行数据进行相应处理(即写事务所表征的处理),即开启写事务,此时写事务处于Active状态(即活动状态);然后,为了保证分布式数据一致性,在写事务对行数据处理之后,进入分段式提交过程:

第一阶段为准备阶段:事务管理器向资源管理器发出准备指令(Prepare指令),以询问资源管理器是否已准备好进行提交处理,从而资源管理器根据自身情况返回成功与否的信息给事务管理器;在资源管理器接收到准备指令后,写事务处于准备状态(Prepare状态);

第二阶段为事务提交或者回滚阶段:如果事务管理器收到所有资源管理器的成功消息,则事务管理器向资源管理器发出提交指令(Commit指令,Commit指令携带有提交时间戳),资源管理器接收到提交指令后,将写事务所修改的版本数据进行持久化处理,即提交处理;不然则发出回滚指令。其中,回滚指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。

为了便于理解分布式数据库中,基于时间戳的方式处理分布式事务的分布式一致性读,下面结合附图进行说明:

如图1所示,图中所示ROW1_DATA为第一行数据中的数据,ROW2_DATA为第二行数据中的数据,CTS为持久化到行数据上的提交时间戳,new_version表示行数据的最新版本,即当前版本,old_version为行数据的当前版本的上一版本。

以读事务TrxA读取某一行数据ROW1为例:

当ROW1_DATA没有被其他事务修改,则比较TrxA_RTS(读事务的读时间戳)和ROW1_CTSnew(第一行数据的当前版本的提交时间戳),如果TrxA_RTS>=ROW1_CTSnew,ROW1的当前版本对TrxA可见,此时,TrxA可以读取到ROW1的当前版本中的数据;否则,需要回溯到ROW1的当前版本的上一版本,继续比较TrxA_RTS和ROW1_CTS的大小old

当ROW1被写事务TrxB修改,且TrxB处于Active(活动)状态,则ROW1的当前版本对TrxA不可见,需要回溯到ROW1的上一版本,比较TrxA_RTS和ROW1_CTSold

当ROW1被写事务TrxB修改,且TrxB处于Prepare(准备)状态,由于此时无法获知TrxB的CTS(TrxB的提交时间戳,TrxB的提交时间戳为TrxB所修改的当前版本对应的提交时间戳),存在TrxA_RTS 大于、等于或小于 TrxB_CTS(TrxB的CTS)的可能性,无法判断该行的当前版本的数据可见性,此时TrxA被阻塞住,直到TrxB_CTSnew被写入到该行为止,称之为写阻塞读。

针对ROW2_DATA的读取过程,与上述的针对ROW1_DATA的过程类似。

可以理解的是,在TrxB处于Active状态时,还未进入两阶段提交过程,后续请求的提交时间戳,肯定比当前的读事务的时间戳大,因此,ROW1的当前版本对TrxA不可见。而TrxB处于Prepare状态时,可能已经请求了提交时间戳,也就是,读事务的时间戳和当前写事务的提交时间戳的请求是一个乱序的,那么,无法保证谁大谁小。因此,TrxA会被阻塞住,直到TrxB_CTSnew被写入到该行数据中为止。

另外,当写事务处于Prepare状态后,事务管理器需要到全局时间戳服务器中获取CTS,获取到CTS后,把CTS封装到XA COMMIT(分布式事务提交)指令(即上述的提交指令)中,下发给资源管理器。此过程总共需要两个RTT(Round Trip Time,往返时间)左右的耗时,因此被阻塞事务就要挂起两个RTT的时间,其持有的锁资源、连接资源等无法及时释放,导致性能出现明显的抖动。

基于上述内容,为了最大化的降低写阻塞读的概率,以保证数据库性能平稳,本发明提供了一种事务处理方法、装置、分布式数据库系统及电子设备。

下面,首先对本发明实施例所提供的一种事务处理方法进行介绍。

本发明实施例所提供的一种事务处理方法应用于资源管理器,该资源管理器与事务管理器相通信。在具体应用中,如图2所示,当事务管理器接收到业务SQL语句时,根据业务SQL语句中的相关内容,生成写事务或读事务这两类分布式事务,并下发给资源管理器。当事务管理器执行前述分布式事务时,向全局时间戳服务器请求相应的时间戳,并将相关执行指令和所请求的时间戳下发给资源管理器,由资源管理器执行相应处理操作。

可以理解的是,资源管理器可以部署于分布式存储系统中、用于存储数据资源的存储节点中;而事务管理器可以部署于用于分布式数据系统的管理节点中。

其中,本发明实施例所提供的一种事务处理方法,可以包括如下步骤:

当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,所述读事务中携带有读时间戳;

若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;

比较所述准备时间戳与所述读时间戳的大小;

若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;

若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。

本发明实施例所提供的方案中,在确定所述读事务所针对的行数据后,当所述行数据的数据状态为被写事务修改且所述写事务处于准备状态时,确定所述写事务对应的准备时间戳,其中,准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳,其一定小于所述写事务提交时的提交时间戳;进而,比较所述准备时间戳与所述读时间戳的大小,若所述准备时间戳大于或等于所述读时间戳,即可判定所述行数据的当前版本,对所述读事务不可见;否则,对所述读事务进行阻塞。可见,通过引入准备时间戳与读时间戳的比较,减少了导致所述行数据的当前版本对所述读事务的可见性无法判断的情况,进而最大化的降低写阻塞读的概率,保证了数据库性能平稳。

下面结合附图,对本发明实施例所提供的事务处理方法进行介绍。

如图3所示,本发明实施例所提供的一种事务处理方法,可以包括如下步骤:

S301,当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,所述读事务中携带有读时间戳;

本实施例中,当资源管理器接收到事务管理器下发的读事务的处理请求时,可以分析该处理请求中所携带的信息,从而确定所述读事务所针对的行数据。其中,所述处理请求中可以携带有行数据的id,当然并不局限于此。示例性的,所述读事务的处理请求中携带有行数据的id,当资源管理器接收到读事务的处理请求时,根据所述行数据的id,确定所述读事务所针对的行数据。

可以理解的是,由于读事务读取行数据时,需要比较所述行数据的提交时间戳和读时间戳的大小,判断所述行数据的各个版本数据对所述读事务是否可见,因此,所述读事务中还需要携带有读时间戳。在一种实现方式中,所述读时间戳可以是事务管理器向资源管理器下发读事务的处理请求时,携带在所述处理请求中。示例性的,资源管理器向事务管理器下发读事务的处理请求之前,向全局时间戳服务器请求读时间戳,在获取到读时间戳之后,将携带有读时间戳的处理请求下发至所述资源管理器。

S302,若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;

若所述行数据的数据状态为被写事务修改,且写事务处于准备状态时,此时,由于事务管理器可能已经向全局时间戳服务器请求了所述写事务的提交时间戳,导致所述读时间戳和所述写事务的提交时间戳的大小无法确定。因此,为了减少所述读时间戳和所述写事务的提交时间戳的大小无法确定的情况,在本实施例中,若所述行数据的数据状态为被写事务修改,且写事务处于准备状态时,确定所述写事务对应的准备时间戳,从而后续基于写事务对应的准备时间戳,与所述读事务的读时间戳的大小关系,来执行不同的处理。

其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳。可以理解的是,事务管理器管理着多个事务,且在每个事务的不同阶段均会向全局时间戳服务器请求时间戳,因此,事务管理器可以获取到多个时间戳。此时,准备时间戳为所述写事务进入准备阶段时,所述事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳。

可选地,所述确定所述写事务对应的准备时间戳之前,所述方法还包括:

接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。

本实现方式中,在确定所述写事务对应的准备时间戳之前,资源管理器接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。其中,所述最大时间戳可以携带在事务管理器向资源管理器下发的指令中,下发至资源管理器,也可以单独下发至资源管理器。

可选地,在一种实现方式中,所述接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳,包括步骤A1-A2:

A1,接收所述事务管理器下发的、用于指示所述写事务进入准备状态的指令(即上述的准备指令);其中,所述指令中携带有所述事务管理器当前已获取到的最大时间戳;

也就是,资源管理器在接收到事务管理器下发的、用于指示所述写事务进入准备状态的指令后,执行相应的进入准备状态的操作。其中,所述最大时间戳可以携带在所述指令中,下发给所述资源管理器。

A2,从所述指令中提取所述最大时间戳,作为所述写事务对应的准备时间戳。

在接收到所述事务管理器下发的所述指令后,通过分析所述指令所携带的信息,可以从所述指令携带的信息中提取出所述最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳之前,还可以检测所述行数据的数据状态。任一种检测所述行数据的数据状态的实现方式均可以应用于本实施例。

示例性地,资源管理器中可以记录有每一行数据的状态信息:是否正在被写事务修改,以及若被更改,则记录有写事务的状态(Active状态和Prepare状态);从而,在一种实现方式中,后续在读事务的处理过程中,可以基于预先记录的状态信息,检测到所述行数据的数据状态。

示例性的,资源管理器在接收到写事务的处理请求后,可以将写事务的标识记录到写事务所修改的行数据的当前版本中,并且,记录写事务对应的事务状态:Active状态、Prepare状态和Commit状态,当写事务处于Commit状态时,由于写事务已完成提交阶段,表明行数据未被其他事务修改;因此,在另一种实现方式中,可以基于行记录中的写事务的标识,检测到所述行数据的数据状态。

S303,比较所述准备时间戳与所述读时间戳的大小;

本实施例中,由于步骤S302确定出的准备时间戳,是读事务在提交之前的准备状态时获取到的时间戳,其一定小于该读事务的提交时间戳。因此,通过进一步比较所述准备时间戳和所述读时间戳的大小,即添加新的比较对象,会得到更加细致的比较结果,从而,在后续判断过程中,减少无法判断读时间戳和准备时间戳大小的情况。

S304,若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;

本实施例中,由于所述准备时间戳小于所述提交时间戳,因此,若所述准备时间戳大于或等于所述读时间戳,则所述提交时间戳一定大于所述读时间戳,此时,所述行数据被写事务所修改的当前版本,对所述读事务不可见。

由于准备时间戳为事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,其一定小于所述写事务的提交时间戳,因此,可以引入准备时间戳和读时间戳的对比关系,进而,在准备时间戳大于或等于所述读时间戳时,判定所述行数据的当前版本对所述读事务不可见,从而减少了读事务被阻塞的概率。

S305,若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。

本实施例中,若所述准备时间戳小于所述读时间戳,则所述读时间戳可能大于、小于或等于所述提交时间戳,因此,所述提交时间戳与所述读时间戳的大小无法确定,所述行数据的当前版本对所述读事务的可见性无法判断,此时,读事务被阻塞,直至所述写事务完成递交。

另外,若所述行数据的数据状态为未被写事务修改,或者,被所述写事务修改但写事务不处于准备状态,此时所述行数据的当前版本对读事务的可见性需要另外判断。

示例性的,所述行数据的数据状态为未被写事务修改,则比较读事务的读时间戳和行数据的当前版本的提交时间戳,若所述读时间戳大于等于所述提交时间戳,所述行数据的当前版本显然对读事务可见,否则,需要回溯到行数据的上一版本,继续比较读时间戳和行数据的上一版本的提交时间戳。

示例性的,所述行数据的数据状态为被写事务修改,但所述写事务处于Active状态,则所述行数据的当前版本对读事务不可见,需要回溯到行数据的上一版本,继续比较读时间戳和行数据的上一版本的提交时间戳。

本发明实施例所提供的方案中,在确定所述读事务所针对的行数据后,当所述行数据的数据状态为被写事务修改且所述写事务处于准备状态时,确定所述写事务对应的准备时间戳,其中,准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳,其一定小于所述写事务提交时的提交时间戳;进而,比较所述准备时间戳与所述读时间戳的大小,若所述准备时间戳大于或等于所述读时间戳,即可判定所述行数据的当前版本,对所述读事务不可见;否则,对所述读事务进行阻塞。可见,通过引入准备时间戳与读时间戳的比较,减少了导致所述行数据的当前版本对所述读事务的可见性无法判断的情况,进而最大化的降低写阻塞读的概率,保证了数据库性能平稳。

可选地,在本发明的另一实施例中,如图4所示,所述判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,所述方法还包括如下步骤:

S401,获取所述行数据的当前版本的上一版本;

本实施例中,若所述准备时间戳大于或等于所述读时间戳,则所述写事务的提交时间戳一定大于所述读时间戳,读事务无法读取行数据被写事务修改的当前版本中的数据,因此,资源管理器需要获取所述行数据的当前版本的上一版本,也就是,读事务所针对的行数据回溯到行数据的当前版本的上一版本。

S402,比较所述上一版本中的提交时间戳和所述读时间戳的大小;

本实施例中,在获取到所述行数据的当前版本的上一版本后,继续比较所述上一版本中写事务的提交时间戳和所述读时间戳的大小,从而判断所述上一版本对所述读事务是否可见。在一种实现方式中,提交时间戳在写事务提交时持久化到行数据上,所述上一版本中的提交时间戳可以通过写事务的id、行数据的版本等信息,在行数据中查找到。

S403,若所述读时间戳大于或等于所述上一版本中的提交时间戳,读取所述上一版本中的数据,作为所述读事务的响应结果。

本实施例中,若数据读时间戳大于或等于所述上一版本中的比较时间戳,则所述上一版本的数据对所述读事务一定可见,此时,所述读事务读取所述上一版本中的数据。

可见,通过本实施例,在判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,继续比较所述上一版本中的写事务的提交时间戳与读时间戳的大小,可以使得所述读事务在所述当前版本不可见之后,继续读取所述上一版本中的数据,从而,确保读事务的正常执行。

为了更好的阐述本发明实施例的内容,下面结合一个具体的示例对准备时间戳的生成和使用进行阐述。

准备时间戳的生成:

(1)事务管理器在管理事务时,实时记录当前获取到时间戳的最大值,记录为Node_Max_TS;

(2)在任一写事务进入准备状态时,事务管理器向处理该写事务的资源管理器下发Node_Max_TS,从而资源管理器将接收到的Node_Max_TS,作为该写事务对应的PTS;

其中,事务管理器可以将Node_Max_TS封装到用于指示该写事务进行准备状态的指令中,并将该指令下发给处理该写事务的资源管理器;从而,资源管理器可以从该指令中提取该Node_Max_TS,得到该写事务对应的准备时间戳PTS。

另外,写事务在提交阶段,事务管理器向全局时间戳服务器获取CTS,并把CTS封装到提交指令中,下发给资源管理器;由于Node_MAX_TS记录的是事务管理器在写事务进入准备状态时,已经获取到的最大时间戳,其一定小于全局时间戳服务器还未分配出去的时间戳,所以可以保证PTS < CTS。

准备时间戳的使用:

(1)当ROW1(读事务TrxA所读取的行数据)没有被其他事务修改,则比较TrxA_RTS(读事务的读时间戳)和ROW1_CTSnew(最新版本中的提交时间戳),如果TrxA_RTS >= ROW1_CTSnew,ROW1对TrxA可见,否则需要回溯到ROW1的上一个版本,继续比较TrxA_RTS和ROW1_CTSold(上一版本中的提交时间戳)。

(2)当ROW1被写事务TrxB修改,且TrxB处于Active状态,则ROW1当前版本对TrxA不可见,需要回溯到ROW1的上一个版本,比较TrxA_RTS和ROW1_CTSold

(3)当ROW1被写事务TrxB修改,且TrxB处于Prepare状态,此时比较TrxA_RTS和ROW1_PTS(写事务对应的准备时间戳)。

如果TrxA_RTS <= ROW1_PTS,则TrxA_RTS一定小于写事务TrxB的提交时间戳,该行数据的当前版本对TrxA不可见,需要回溯到ROW1的上一个版本,继续比较TrxA_RTS和ROW1_CTSold

如果TrxA_RTS > ROW1_PTS,则无法判断TrxA_RTS和写事务TrxB的提交时间戳的大小的关系,阻塞TrxA,直到TrxB_CTS被写入到该行数据的当前版本中。

可见,本实现方案中,通过引入准备时间戳,可以最大化的降低写阻塞读的概率,保证性能数据平稳;并且可以零开销生成PTS,不需要额外的计算资源。

相应上述方法实施例,本发明实施例还提供了一种分布式数据库系统,如图5所示,所述系统包括:资源管理器510和事务管理器520;

所述资源管理器510,用于当接收到读事务的处理请求时,确定所述读事务所针对的行数据,其中,所述读事务中携带有读时间戳;若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,获取所述写事务对应的准备时间戳,其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器520向所述资源管理器下发的、当前已获取到的最大时间戳;比较所述准备时间戳与所述读时间戳的大小;若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞;

所述事务管理器520,用于在所述写事务进入准备状态时,将当前已获取到的最大时间戳下发给所述资源管理器510。

可选地,所述系统还包括:全局时间戳服务器;

所述事务管理器,还用于针对每一写事务/读事务,从全局时间戳服务器中,获取该写事务/读事务待利用的时间戳;

所述全局时间戳服务器,用于为该写事务/读事务分配时间戳。

可选地,所述资源管理器,还用于在确定所述写事务对应的准备时间戳之前,接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述资源管理器,具体用于:

接收所述事务管理器下发的、用于指示所述写事务进入准备状态的指令;其中,所述指令中携带有所述事务管理器当前已获取到的最大时间戳;

从所述指令中提取所述最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述资源管理器还用于:在判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,

获取所述行数据的当前版本的上一版本;

比较所述上一版本中的提交时间戳和所述读时间戳的大小;

若所述读时间戳大于或等于所述上一版本中的提交时间戳,读取所述上一版本中的数据,作为所述读事务的响应结果。

相应上述方法实施例,本发明实施例还提供了一种事务处理装置,应用于资源管理器,如图6所示,所述装置包括:

第一确定模块610,用于当接收到读事务的处理请求时,确定所述读事务所针对的行数据;其中,所述读事务中携带有读时间戳;

第二确定模块620,用于若所述行数据的数据状态为被写事务修改且所述写事务处于准备状态,确定所述写事务对应的准备时间戳;其中,所述准备时间戳为所述写事务进入所述准备状态时,事务管理器向所述资源管理器下发的、当前已获取到的最大时间戳;

比较模块630,用于比较所述准备时间戳与所述读时间戳的大小;

判定模块640,用于若所述准备时间戳大于或等于所述读时间戳,判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见;

阻塞模块650,用于若所述准备时间戳小于所述读时间戳,对所述读事务进行阻塞。

可选地,所述装置还包括:

接收模块,用于在所述第二确定模块执行所述确定所述写事务对应的准备时间戳之前,接收所述事务管理器在所述写事务进入准备状态时,所下发的当前已获取到的最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述接收模块,具体用于:

接收所述事务管理器下发的、用于指示所述写事务进入准备状态的指令;其中,所述指令中携带有所述事务管理器当前已获取到的最大时间戳;

从所述指令中提取所述最大时间戳,作为所述写事务对应的准备时间戳。

可选地,所述装置还包括:

获取模块,用于在所述判定模块执行所述判定所述写事务所修改的所述行数据的当前版本,对所述读事务不可见之后,获取所述行数据的当前版本的上一版本;

第二比较模块,用于比较所述上一版本中的提交时间戳和所述读时间戳的大小;

读取模块,用于若所述读时间戳大于或等于所述上一版本中的提交时间戳,读取所述上一版本中的数据,作为所述读事务的响应结果。

本发明实施例还提供了一种电子设备,如图7所示,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701,通信接口702,存储器703通过通信总线704完成相互间的通信,

存储器703,用于存放计算机程序;

处理器701,用于执行存储器703上所存放的程序时,实现本发明实施例上述所提供的任一事务处理方法的步骤。

上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一事务处理方法的步骤。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一事务处理方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:智能体控制装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!