CN112434007A - 一种数据库事务组提交方法、装置、设备及存储介质 - Google Patents
一种数据库事务组提交方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112434007A CN112434007A CN202011261844.3A CN202011261844A CN112434007A CN 112434007 A CN112434007 A CN 112434007A CN 202011261844 A CN202011261844 A CN 202011261844A CN 112434007 A CN112434007 A CN 112434007A
- Authority
- CN
- China
- Prior art keywords
- transaction
- thread
- stage
- transaction group
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种数据库事务组提交方法、装置、设备及存储介质。本公开通过主线程执行事务组提交过程包括的多个处理阶段中的部分处理阶段或所有处理阶段的处理过程,并且在主线程执行所述部分处理阶段或所有处理阶段的处理过程中,控制从线程执行除该事务组之外的其他事务,相当于从线程和其执行的原事务可以分离,进一步,当事务组中的全部事务提交完成时,生成提交完成信息,从而使得从线程不会因为等待主线程完成事务组提交过程的整个过程或部分阶段而处于阻塞状态,提高了单线程的使用率,从而提高了系统的并发能力。
Description
技术领域
本公开涉及信息技术领域,尤其涉及一种数据库事务组提交方法、装置、设备及存储介质。
背景技术
随着信息技术的不断发展,人们在工作和生活中会产生大量的数据,通常情况下会将这些大量的数据存储到数据库中。
客户端可以通过向数据库发送访问请求来访问数据库中的数据。数据库在接收到访问请求时,可启动一个事务,并通过数据库中的一个线程来执行该事务。线程在执行该事务时,需进行事务提交。
现有技术中,多个线程分别执行的事务可以构成一个事务组,该事务组可以由多个线程中的一个主线程来提交,多个线程中除主线程之外的线程为从线程。在主线程进行事务组提交的过程中,从线程一直处于等待状态即阻塞状态,从而导致系统的并发能力较低。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种数据库事务组提交方法、装置、设备及存储介质,以使得从线程不会因为等待主线程完成事务组提交过程的整个过程或部分阶段而处于阻塞状态,提高了单线程的使用率,从而提高了系统的并发能力。
第一方面,本公开实施例提供一种数据库事务组提交方法,包括:
接收客户端的数据访问请求;
根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务;
在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程;
在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务;
当所述事务组中的全部事务提交完成时,生成提交完成信息。
第二方面,本公开实施例提供一种数据库事务组提交装置,包括:
接收模块,用于接收客户端的数据访问请求;
确定模块,用于根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务;
控制模块,用于在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程;在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务;
生成模块,用于当所述事务组中的全部事务提交完成时,生成提交完成信息。
第三方面,本公开实施例提供一种数据库事务组提交设备,包括:
存储器;
处理器;以及
计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如第一方面所述的方法。
第四方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现第一方面所述的方法。
本公开实施例提供的数据库事务组提交方法、装置、设备及存储介质,通过主线程执行事务组提交过程包括的多个处理阶段中的部分处理阶段或所有处理阶段的处理过程,并且在主线程执行所述部分处理阶段或所有处理阶段的处理过程中,控制从线程执行除该事务组之外的其他事务,相当于从线程和其执行的原事务可以分离,进一步,当事务组中的全部事务提交完成时,生成提交完成信息,从而使得从线程不会因为等待主线程完成事务组提交过程的整个过程或部分阶段而处于阻塞状态,提高了单线程的使用率,从而提高了系统的并发能力。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中事务组提交过程的示意图;
图2为现有技术中第一队列的示意图;
图3为本公开实施例提供的数据库事务组提交方法流程图;
图4为本公开实施例提供的应用场景的示意图;
图5为本公开实施例提供的事务组提交过程的示意图;
图6为本公开实施例提供的应用场景的示意图;
图7为本公开实施例提供的数据库事务组提交方法流程图;
图8为本公开实施例提供的数据库事务组提交方法流程图;
图9为本公开实施例提供的数据库事务组提交方法流程图;
图10为本公开实施例提供的数据库事务组提交装置的结构示意图;
图11为本公开实施例提供的数据库事务组提交设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
通常情况下,客户端可以通过向数据库发送访问请求来访问数据库中的数据。数据库在接收到访问请求时,可启动一个事务,并通过数据库中的一个线程来执行该事务。线程在执行该事务时,需进行事务提交。多个线程分别执行的事务可以构成一个事务组,该事务组可以由多个线程中的一个主线程来提交,多个线程中除主线程之外的线程为从线程。现有的事务组提交过程包括如图1所示的三个阶段,该三个阶段分别是第一阶段、第二阶段和第三阶段。其中,第一阶段可记为Flush Stage,第二阶段可记为Sync Stage,第三阶段可记为Commit Stage。如图1所示,每个阶段都对应一个队列。例如,第一阶段对应第一队列,第二阶段对应第二队列,第三阶段对应第三队列。第一队列记为Flush Queue,第二队列记为Sync Queue,第三队列记为Commit Queue。
在本公开实施例中,事务具体是指计算机事务或数据库事务,事务是由一个有限的数据库操作序列构成的。数据库操作具体可以是对数据库中的数据行的操作,该操作具体可包括:读、写、扫描、删除等。具体的,一个线程在同一时间可以执行一个事务,多个线程可以并行执行各自的事务。
具体的,第一队列可包括多个事务,该多个事务可以是多个线程分别执行的事务。例如,多个线程可以将各自执行的事务按顺序放入第一队列中。多个事务可划分为一个或多个事务组。其中,每个事务组中第一个往第一队列中放入事务的线程可以作为主线程。
如图2所示,线程A、线程B、线程C和线程D依次将各自执行的事务放入第一队列中,其中,线程A用于执行事务1、线程B用于执行事务2、线程C用于执行事务3、线程D用于执行事务4。以线程A执行事务1为例,在线程A将事务1放入第一队列之前,线程A可以完成了如下步骤:1)生成了事务1相关的物理日志;2)根据事务1对数据库中的数据进行了操作;3)将操作后的数据存储到了磁盘中。从而使得线程A将事务1放入第一队列之后,事务1为待提交的事务。同理,线程B、线程C和线程D依次将各自执行的事务放入第一队列后,事务2、事务3、事务4也成为了待提交的事务。可以理解的是,本实施例并不限定第一队列中事务的个数、以及事务的相关信息。
进一步,可以将第一队列中的多个事务划分为一个或多个事务组。例如,可以将事务1、事务2、事务3、事务4构成一个事务组。或者,可以将事务1和事务2构成事务组1,将事务3和事务4构成事务组2。可以理解的是,此处的事务组划分只是一种示意性说明,还可以由其他的划分方法,或者其他的事务组构成方法,此处并不做具体限定。
如果将事务1、事务2、事务3、事务4构成一个事务组,由于事务1对应的线程A是第一个往第一队列中放入事务的线程,则线程A可作为第一阶段的主线程。线程A可对该事务组进行组提交。具体的,在第一阶段,线程A可以执行第一阶段的处理过程,从而对该事务组中的事务进行处理,并将处理后的事务放入第二队列中。在第二阶段中,线程A可以执行第二阶段的处理过程,从而对第二队列中的事务进行处理,并将处理后的事务放入第三队列中。在第三阶段中,线程A可以执行第三阶段的处理过程,从而对第三队列中的事务进行处理。从而实现事务组提交。其中,在线程A执行第一阶段的处理过程、第二阶段的处理过程、第三阶段的处理过程中,从线程例如线程B、线程C和线程D一直处于等待状态即阻塞状态。当线程A完成第三阶段的处理过程后,计算机系统可以唤醒线程B、线程C和线程D。进一步,线程A、线程B、线程C和线程D分别向客户端反馈应答。
可以理解的是,第一队列中的事务可以是实时增加的。从而使得第二队列和第三队列中的事务也是实时变化或实时增加的。
如果将事务1和事务2构成事务组1,将事务3和事务4构成事务组2,由于在事务组1中,事务1对应的线程A是第一个往第一队列中放入事务的线程;在事务组2中,事务3对应的线程C是第一个往第一队列中放入事务的线程,因此,在第一阶段中,可以将线程A和线程C分别作为主线程,将线程B和线程D分别作为从线程。在第一阶段中,线程A对应于事务组1,线程B对应于事务组2。在第一阶段中,线程A和线程C分别执行第一阶段的处理过程,线程B和线程D分别处于等待状态。其中,线程A在执行第一阶段的处理过程时,可以对事务组1中的事务进行处理,并将处理后的事务放入第二队列中。同理,线程C在执行第一阶段的处理过程时,可以对事务组2中的事务进行处理,并将处理后的事务放入第二队列中。在第二阶段中,可以从线程A和线程C中确定出一个主线程,例如,第二阶段中的主线程可以是线程A和线程C中最先完成第一阶段的处理过程的那个线程。例如,线程A最先完成第一阶段的处理过程,则线程A可以作为第二阶段中的主线程,线程C可以作为第二阶段中的从线程并在第二阶段中处于等待状态。在第二阶段中,线程A对应于事务组1和事务组2。在第二阶段中,线程A可以执行第二阶段的处理过程,从而对第二队列中的事务进行处理,并将处理后的事务放入第三队列中。由于第一队列、第二队列和第三队列中可以实时增加新的事务,因此,在第三阶段开始之前,第二阶段中可能会有多个主线程执行第二阶段的处理过程。同理,将最先执行完第二阶段的处理过程的主线程作为第三阶段的主线程。由第三阶段的主线程对第三队列中的事务进行第三阶段的处理过程。
下面介绍一下第一阶段的处理过程、第二阶段的处理过程和第三阶段的处理过程分别包括的步骤:
第一阶段的处理过程包括如下步骤:
1)主线程(Leader Thread)对第一队列持有互斥锁Lock_logmutex,从线程(Follower Threads)处于等待状态。
2)主线程生成其对应的事务组中每个事务对应的二进制日志(binlog)。
3)主线程将二进制日志放入缓存区,例如,输入/输出(Input/Output,I/O)缓存(cache)。
4)主线程将其对应的事务组中每个事务对应的物理日志(redo log)从缓存区存储到磁盘中。
第二阶段的处理过程包括如下步骤:
1)主线程释放第一队列的互斥锁Lock_logmutex,持有第二队列的互斥锁Lock_syncmutex,从线程(Follower Threads)处于等待状态。
2)主线程将其对应的事务组中每个事务对应的二进制日志从缓存区存储到磁盘中。
第三阶段的处理过程包括如下步骤:
1)主线程释放第二队列的互斥锁Lock_syncmutex,持有第三队列的互斥锁Lock_commitmutex,从线程(Follower Threads)处于等待状态。
2)主线程遍历第三队列中的事务,对第三队列中的事务逐一进行数据库引擎层的事务提交(innodb commit)。
3)主线程释放第三队列的互斥锁Lock_commitmutex。
4)主线程唤醒等待的从线程(Follower Threads)。主线程和从线程向客户端反馈应答。
其中,第一阶段、第二阶段、第三阶段中的主线程可能是同一个线程,也可能是不同的线程,具体如上所述,此处不再赘述。
由于主线程进行事务组提交的过程中,从线程一直处于等待状态即阻塞状态,从而导致系统的并发能力较低。针对该问题,本公开实施例提供了一种数据库事务组提交方法,下面结合具体的实施例对该方法进行介绍。
图3为本公开实施例提供的数据库事务组提交方法流程图。该方法具体步骤如下:
S301、接收客户端的数据访问请求。
如图4所示,41表示客户端,42表示服务器,43表示数据库。其中,数据库43可以集成在服务器42中。或者,数据库43和服务器42独立设置,并且数据库43和服务器42之间可以通信连接,此处并不限定客户端41、服务器42、数据库43之间的通信方式,例如,可以是无线通信方式,也可以是有线通信方式。具体的,客户端41可以向服务器42发送数据访问请求,当服务器42接收到该数据访问请求时,对数据库43中的数据进行访问。服务器42每接收到一个数据访问请求时可以启动一个事务,并且服务器42可启动多个线程,一个线程在同一时刻可以执行一个事务。
在一种可行的实现方式中,服务器42接收到多个客户端分别发送的数据访问请求,服务器42每接收到一个数据访问请求时可以启动一个事务和一个线程,该线程可以执行该事务。
在另一种可行的实现方式中,服务器42接收到客户端41发送的多个数据访问请求,服务器42每接收到一个数据访问请求时可以启动一个事务和一个线程,该线程可以执行该事务。
S302、根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务。
例如,服务器42接收到4个数据访问请求,服务器42启动4个事务,例如,如上所述的事务1、事务2、事务3、事务4。另外,服务器42根据4个数据访问请求,启动4个线程,例如,如上所述的线程A、线程B、线程C和线程D。其中,线程A用于执行事务1、线程B用于执行事务2、线程C用于执行事务3、线程D用于执行事务4。
当线程A生成事务1相关的物理日志、根据事务1对数据库中的数据进行操作、将操作后的数据存储到磁盘中后,可以将事务1放入第一队列中。同理,线程B、线程C和线程D分别执行完类似于线程A的操作之后,线程B、线程C和线程D可以依次将各自执行的事务放入该第一队列中。
进一步,该第一队列中的事务1、事务2、事务3、事务4构成待提交的事务组。其中,如果线程A是第一个往该第一队列中放入事务的线程,则线程A可作为主线程。线程B、线程C和线程D可作为从线程。可见,该事务组中包括主线程执行的事务和从线程执行的事务。
或者,线程A是主线程、线程B是从线程,线程A执行的事务1和线程B执行的事务2构成事务组1。线程C是主线程、线程D是从线程,线程C执行的事务3和线程D执行的事务4构成事务组2。
S303、在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程。
本实施例所述的事务组提交过程可以包括多个处理阶段,该多个处理阶段可以是如图1所示的3个阶段,或者可以是如图5所示的4个阶段。
在图1所示的3个阶段或图5所示的4个阶段中,服务器42可以控制第一阶段的主线程执行第一阶段的处理过程,以及控制第二阶段的主线程执行第二阶段的处理过程。
例如,若第一阶段的主线程是线程A,则服务器42控制线程A对第一队列中的事务执行第一阶段的处理过程。若第二阶段的主线程还是线程A,则服务器42控制线程A对第二队列中的事务执行第二阶段的处理过程。
再例如,若第一阶段的主线程包括线程A和线程C,则服务器42控制线程A对事务组1中的事务执行第一阶段的处理过程,控制线程C对事务组2中的事务执行第一阶段的处理过程。若第二阶段的主线程为线程A,线程C在第二阶段变成从线程,则由线程A对第二队列中的事务执行第二阶段的处理过程。
S304、在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务。
例如,在第一阶段,如果线程A是主线程,线程B、线程C和线程D是从线程,则线程A对第一队列中的事务执行第一阶段的处理过程,并将处理后的事务添加到第二队列中。在线程A对第一队列中的事务执行第一阶段的处理过程中,服务器42可以控制线程B、线程C和线程D执行除该事务组之外的其他事务,而不是等待。同理,在第二阶段中,主线程对第二队列中的事务执行第二阶段的处理过程,并将处理后的事务添加到第三队列中,并且在主线程对第二队列中的事务执行第二阶段的处理过程中,第二阶段的从线程可以执行除该事务组之外的其他事务,而不是等待。
再例如,若第一阶段的主线程包括线程A和线程C,则在线程A对事务组1中的事务执行第一阶段的处理过程中,服务器42可以控制线程B执行除该事务组1之外的其他事务,而不是等待。在线程C对事务组2中的事务执行第一阶段的处理过程中,服务器42可以控制线程D执行除该事务组2之外的其他事务,而不是等待。若在第二阶段,线程A是主线程、线程C是从线程,则在线程A对第二队列中的事务执行第二阶段的处理过程中,服务器42可以控制线程C执行除该第二队列之外的其他事务,而不是等待。
也就是说,第一阶段的从线程将事务添加到第一队列后即可返回处理其他的业务。第二阶段的从线程将事务添加到第二队列后即可返回处理其他的业务。
S305、当所述事务组中的全部事务提交完成时,生成提交完成信息。
以图1所示的3个阶段为例,第二阶段的主线程对第二队列中的事务执行完第二阶段的处理过程后,服务器42可以控制第二阶段的主线程执行除事务组之外的其他事务,而不是进入第三阶段。在第三阶段中,服务器42可以调用第一后台线程,由第一后台线程来执行第三阶段的处理过程。其中,第一后台线程可以是在服务器42启动时即启动的线程。如前所述的主线程和从线程是根据客户端的数据访问请求启动的线程。在第一后台线程对第三队列中的全部事务逐一进行数据库引擎层的事务提交后,可以确定事务组中的全部事务提交完成,此时,服务器42可以生成提交完成信息,并控制第一后台线程向客户端反馈响应信息。该响应信息是上述数据访问请求对应的响应信息,该响应信息例如可以是提交完成信息或数据访问请求处理成功。具体的,若在S301中服务器42接收到多个客户端分别发送的数据访问请求,或者,服务器42接收到客户端41发送的多个数据访问请求,则在S305中服务器42可以调用多个第一后台线程,其中,每个第一后台线程可以对第三队列中的一个事务进行数据库引擎层的事务提交。此外,由于每个事务可以包括客户端信息,因此,当每个第一后台线程对第三队列中的一个事务进行数据库引擎层的事务提交后,该第一后台线程可以根据该事务中的客户端信息,向客户端反馈响应信息,例如,提交完成信息或数据访问请求处理成功。在其他实施例中,如图1所示的第三阶段中的数据库引擎层的事务提交步骤可以由最先完成第二阶段的处理过程的主线程来执行,当该主线程完成数据库引擎层的事务提交后,服务器42可以调用第一后台线程,并控制第一后台线程向客户端反馈响应信息。
以图5所示的4个阶段为例,第二阶段的主线程对第二队列中的事务执行完第二阶段的处理过程后,服务器42可以控制第二阶段的主线程执行除该第二队列之外的其他事务,而不是进入第三阶段。在第三阶段中,服务器42可以调用第二后台线程,由第二后台线程来执行第三阶段的处理过程。其中,第二后台线程是在服务器42启动时即启动的线程。图5所示的4个阶段中的第三阶段与图1所示的3个阶段中的第三阶段并不同。
在图5所示的第三阶段中,第二后台线程可以遍历第三队列中的每个事务,并检测每个事务对应的二进制日志是否在备份数据库中成功备份。例如,图6所示,数据库43为主数据库,数据库44为备份数据库。服务器42不仅可以将每个事务对应的二进制日志存储在主数据库,还可以将每个事务对应的二进制日志存储在备份数据库中。由于第三队列中可以不断的进来新的事务,因此,第二后台线程可以不断的遍历第三队列中的事务,当第三队列中没有新的事务可供第二后台线程遍历时,第二后台线程可以进行等待。当第二后台线程确定其遍历过的事务对应的二进制日志已成功备份在备份数据库时,第二后台线程可以将该事务添加到第四队列中。在图5的第四阶段中,服务器42可以调用第一后台线程,由第一后台线程对第四队列中的一个事务进行数据库引擎层的事务提交,并在数据库引擎层的事务提交后,向客户端反馈响应信息。
本公开实施例通过主线程执行事务组提交过程包括的多个处理阶段中的部分处理阶段或所有处理阶段的处理过程,并且在主线程执行所述部分处理阶段或所有处理阶段的处理过程中,控制从线程执行除该事务组之外的其他事务,相当于从线程和其执行的原事务可以分离,进一步,当事务组中的全部事务提交完成时,生成提交完成信息,从而使得从线程不会因为等待主线程完成事务组提交过程的整个过程或部分阶段而处于阻塞状态,提高了单线程的使用率,从而提高了系统的并发能力。
在上述实施例的基础上,所述多个处理阶段包括:第一阶段、第二阶段、第三阶段和第四阶段;其中,所述第一阶段用于实现所述事务组对应的物理日志的组提交;所述第二阶段用于实现所述事务组对应的二进制日志的组提交;所述第三阶段用于检测所述事务组对应的二进制日志是否在备份数据库中成功备份;所述第四阶段用于对所述事务组进行数据库引擎层的事务提交。
例如,本实施例中的事务组提交过程可包括如图5所示的4个阶段,该4个阶段依次为第一阶段、第二阶段、第三阶段和第四阶段,其中,第一阶段可记为Flush Stage,第二阶段可记为Sync Stage,第三阶段可记为After SyncStage,第四阶段可记为Commit Stage。第一阶段、第二阶段、第三阶段和第四阶段分别对应一个队列。例如,第一阶段对应第一队列,第二阶段对应第二队列,第三阶段对应第三队列,第四阶段对应第四队列。第一队列中的事务经过第一阶段的处理后可进入第二队列,第二队列中的事务经过第二阶段的处理后可进入第三队列,第三队列中的事务经过第三阶段的处理后可进入第四队列。
可以理解的是,在本公开实施例中,数据库系统中的事务可以按照如图1所示的三阶段进行提交,也可以按照如图5所示的四阶段进行提交。
具体的,在事务进入第一队列之前,可以根据事务类型设置事务状态,并根据事务状态确定该事务的提交过程是采用如图1所示的三阶段提交过程,还是采用如图5所示的四阶段提交过程。例如,当事务的事务类型为“隐藏事务”、“存储过程”或“多语句执行”时,可以将该事务的事务状态标记为GROUP_COMMIT_OLD。如果事务的事务类型是除“隐藏事务”、“存储过程”和“多语句执行”之外的类型,则该事务的事务状态可标记为GROUP_COMMIT_NEW。进一步,对于事务状态为GROUP_COMMIT_OLD的事务按照如图1所示的三阶段进行提交。对于事务状态为GROUP_COMMIT_NEW的事务按照如图5所示的四阶段进行提交。
下面以事务状态为GROUP_COMMIT_NEW的事务按照如图5所示的四阶段进行提交为例进行示意性说明。
可选的,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程,包括:控制所述主线程执行所述多个处理阶段中所述第一阶段的处理过程和所述第二阶段的处理过程。
具体的,第一队列包括多个事务,第一个进入第一队列并将事务放入第一队列的线程记为第一阶段的主线程,非第一个进入第一队列的线程可记为第一阶段的从线程。数据库系统例如图4所示的服务器42可以控制该主线程对第一队列中的事务执行第一阶段的处理过程,并将处理后的事务添加到第二队列中。在该主线程执行完第一阶段的处理过程后,该主线程可进入第二阶段。其中,第一阶段的处理过程包括的步骤如上所述,此处不再赘述。例如,第一阶段的主线程可以将第一队列中的每个事务对应的物理日志(redo log)从缓存区存储到磁盘中,从而实现事务组对应的物理日志的组提交。另外,第一阶段的主线程在执行第一阶段的处理过程中,第一阶段的从线程返回,即从线程可以执行其他事务或其他业务逻辑。
由于第一阶段的主线程可以不限于一个,即第一阶段的多个主线程可以进入第二阶段中。其中,第一阶段的多个主线程中第一个进入第二队列并将事务或事务组放入第二队列的线程可作为第二阶段的主线程,第一阶段的多个主线程中非第一个进入第二队列的主线程可作为第二阶段的从线程。进一步,第二阶段的主线程可以对第二队列中的事务执行第二阶段的处理过程,并将处理后的事务放入第三队列中。其中,第二阶段的处理过程包括的步骤如上所述,此处不再赘述。例如,第二阶段的主线程可以将第二队列中的每个事务对应的二进制日志从缓存区存储到磁盘中,从而实现事务组对应的二进制日志的组提交。
可选的,在所述主线程执行所述第二阶段的处理过程后,控制所述主线程执行除所述事务组之外的其他事务。
如图5所示,第二阶段的主线程在完成第二阶段的处理过程后,服务器42可以控制该主线程返回,即该主线程执行完第二阶段的处理过程后,该主线程可以执行除该事务组之外的其他事务或其他业务逻辑。从而进一步提高了系统的并发能力。另外,第二阶段的主线程在执行第二阶段的处理过程中,第二阶段的从线程返回,即从线程可以执行除该事务组之外的其他事务或其他业务逻辑。
具体的,如果第二阶段的主线程执行的事务包括“隐藏事务”、“存储过程”或“多语句执行”等类型的事务,并且该事务在第二队列时,则该主线程在完成第二阶段的处理过程后,进入等待状态。如果第二阶段的主线程执行的事务不包括“隐藏事务”、“存储过程”或“多语句执行”等类型的事务,则该主线程在完成第二阶段的处理过程后,该主线程直接返回。
可选的,所述方法还包括:在所述第三阶段,控制第二后台线程检测所述事务组中的每个事务对应的二进制日志是否在备份数据库中成功备份。
例如,在图5所示的第三阶段中,数据库系统例如图4所示的服务器42可以调用第二后台线程检测第三队列中每个事务对应的二进制日志是否在备份数据库中成功备份。例如图6所示,数据库43为主数据库,数据库44为备份数据库。服务器42不仅可以将每个事务对应的二进制日志存储在主数据库,还可以将每个事务对应的二进制日志存储在备份数据库中。具体的,服务器42可以将每个事务对应的二进制日志发送给备份数据库。
可选的,所述第二后台线程用于根据所述事务组中的每个事务对应的二进制日志的存储位置和所述备份数据库反馈的确认信息,检测所述事务对应的二进制日志是否在备份数据库中成功备份。
例如,第二后台线程检测第三队列中每个事务对应的二进制日志是否在备份数据库中成功备份的过程可记为第三阶段的处理过程。该第三阶段的处理过程包括如图7所示的如下步骤:
S701、调用第二后台线程。
例如,服务器42调用第二后台线程。
S702、遍历第三队列中的每个事务。
第二后台线程遍历第三队列中的每个事务。
S703、判断事务对应的二进制日志的标识是否小于或等于备份数据库最新反馈的ACK。若是,则执行S706,否则执行S704。
第二后台线程判断事务对应的二进制日志的标识是否小于或等于备份数据库最新反馈的ACK。其中,事务对应的二进制日志的标识可以是事务对应的二进制日志的存储位置。例如,第三队列中每个事务对应的二进制日志可以是连续存储的。例如,第三队列包括事务1、事务2和事务3,事务1对应的二进制日志的存储位置为0-200,事务2对应的二进制日志的存储位置为201-300,事务3对应的二进制日志的存储位置为301-400。
备份数据库最新反馈的确认信息(Acknowledge character,ACK)可以是备份数据库最新接收到的二进制日志的存储位置。例如,如果备份数据库最新接收到事务1对应的二进制日志,则备份数据库向服务器42反馈的ACK为200。如果备份数据库最新接收到事务2对应的二进制日志,则备份数据库向服务器42反馈的ACK为300。如果备份数据库最新接收到事务3对应的二进制日志,则备份数据库向服务器42反馈的ACK为400。
如果第二后台线程当前遍历到的事务对应的二进制日志的存储位置小于或等于备份数据库向服务器42反馈的ACK,则说明备份数据库已经成功备份该事务对应的二进制日志。如果该事务对应的二进制日志的存储位置大于该ACK,则说明备份数据库没有成功备份或没有成功接收到该事务对应的二进制日志。
S704、等待。
S705、重新遍历该事务。
例如,第三队列包括事务1、事务2和事务3。在S703中,第二后台线程遍历到了事务2,但是由于事务2对应的二进制日志的存储位置大于ACK,则第二后台线程进入等待状态。等待一段时间后,第二后台线程可以重新遍历事务2,并判断备份数据库是否成功备份事务2对应的二进制日志。
S706、将该事务放入第四队列中。
例如,第三队列包括事务1、事务2和事务3。在S703中,第二后台线程遍历到了事务2,经过S703的判断步骤后,第二后台线程确定备份数据库已成功备份事务2对应的二进制日志,则第二后台线程可以将该事务2放入到第四队列中。
S707、遍历下一个事务。
第二后台线程将该事务2放入到第四队列后,可以继续遍历事务2的下一个事务,例如,事务3。
由于第三队列中可以不断的来新的事务,因此,第二后台线程可以循环执行第三阶段的处理过程。当第三队列中没有事务可遍历时,第二后台线程可进行等待。
可以理解的是,如果没有备份数据库,或者不需要将每个事务对应的二进制日志存储在备份数据库时,可以将第三队列中的事务直接添加到第四队列中。例如,可以判断是否开启半同步复制,若开启半同步复制,说明有备份数据库,并且备份数据库和主数据库需要保持一致。如果不开启半同步复制,说明没有备份数据库,或者不需要将每个事务对应的二进制日志存储在备份数据库。
另外,若半同步复制异常时,表示备份数据库因网络问题发生了闪断、宕机而导致备份数据库没有ACK应答,在这种情况下,若第二后台线程等待ACK应答的时间已超时,则第二后台线程也可以将当前遍历到的事务添加到第四队列中,即第二后台线程不需要持续等待。
本实施例通过第二后台线程判断事务组中的事务对应的二进制日志的标识是否小于或等于备份数据库最新反馈的ACK,从而检测事务对应的二进制日志是否在备份数据库中成功备份。通过第二后台线程等待备份数据库的ACK应答,从而使得第二阶段中的主线程可以返回并执行其他事务,防止多线程等待。另外,在主数据库和备份数据库强同步的场景下,如果备份数据库和主数据库之间通过网络进行通信,那么等待备份数据库反馈ACK应答所需的时间较长,因此,通过第二后台线程等待备份数据库的ACK应答,从而使得第二阶段中的主线程可以返回并执行其他事务,可避免主线程由于长期等待ACK应答而增加事务提交时间,进一步提高了系统的并发能力。
可选的,当所述事务组中的全部事务提交完成时,生成提交完成信息,包括:在所述第四阶段,控制一个或多个第一后台线程对所述事务组中的全部事务进行数据库引擎层的事务提交;当所述数据库引擎层的事务提交完成时,生成所述提交完成信息,并控制所述一个或多个第一后台线程向所述客户端反馈响应信息。
如图5所示的第四阶段的处理过程包括如图8所示的如下步骤:
S801、调用一个或多个第一后台线程。
例如,服务器42调用一个或多个第一后台线程。
S802、通过该一个或多个第一后台线程遍历第四队列中的每个事务。
例如,在服务器42调用一个第一后台线程的情况下,可以通过该第一后台线程遍历第四队列中的每个事务。
例如,在服务器42调用多个第一后台线程的情况下,可以通过该多个第一后台线程中的每个第一后台线程遍历该第四队列中的一个事务。
S803、第一后台线程对其遍历到的事务进行数据库引擎层的事务提交。
例如,在服务器42调用一个第一后台线程的情况下,可以通过该第一后台线程对该第四队列中的全部事务逐一进行数据库引擎层的事务提交。
例如,在服务器42调用多个第一后台线程的情况下,该多个第一后台线程中的每个第一后台线程可以对该第四队列中的一个事务进行数据库引擎层的事务提交。
S804、判断是否遍历完成,若是则执行S806和S807,否则执行S805。
S805、遍历下一个事务。S806、生成提交完成信息。
例如,当该一个或多个第一后台线程对该第四队列中的全部事务均遍历完成,并且该一个或多个第一后台线程对该第四队列中的全部事务完成数据库引擎层的事务提交后,可以确定事务组中的全部事务提交完成,此时,服务器42可以生成提交完成信息。S807、向所述客户端反馈响应信息。
例如,每个第一后台线程可以根据其遍历到的事务中的客户端信息,向该客户端反馈响应信息,例如,提交完成信息或数据访问请求处理成功。
可选的,在如图5所示的第三阶段中,数据库系统可调用一个后台线程,即第二后台线程可以是一个。该第二后台线程可记为E线程。
在如图5所示的第四阶段中,数据库系统可调用多个后台线程,即第一后台线程可以是多个。该多个第一后台线程可记为F线程组。
如图9所示,第三队列可以采用无锁队列,当E线程在第三队列中轮询到可提交的事务时,将该事务从第三队列中取出,并将该事务添加到第四队列中。其中,E线程向第四队列中添加事务也可以采用无锁方式。第四队列可设置有一把锁,例如,互斥锁。例如,F线程组中的每个线程可以先给第四队列加锁,进一步,从第四队列中读取一个事务后,释放第四队列上的锁,使得F线程组中的下一个线程可以读取第四队列中的下一个事务。从而使得F线程组中的多个线程可以串行的读取或遍历第四队列中的事务。当F线程组中的多个线程从第四队列中依次读取事务后,各个线程可以并行的对其读取的事务进行数据库引擎层的事务提交,以及并行的根据其读取的事务包括的客户端信息向客户端反馈响应信息。
其中,如果F线程组中的线程进入第四队列后,第四队列中没有可供处理的事务,则该线程进入等待状态。
本公开实施例通过主线程执行事务组提交过程包括的多个处理阶段中的部分处理阶段或所有处理阶段的处理过程,并且在主线程执行所述部分处理阶段或所有处理阶段的处理过程中,控制从线程执行除该事务组之外的其他事务,相当于从线程和其执行的原事务可以分离,进一步,当事务组中的全部事务提交完成时,生成提交完成信息,从而使得从线程不会因为等待主线程完成事务组提交过程的整个过程或部分阶段而处于阻塞状态,提高了单线程的使用率,从而提高了系统的并发能力。另外,当事务组中的全部事务提交完成时,通过控制第一后台线程向客户端反馈响应信息,即第一后台线程可以代替从线程继续处理该从线程未处理完的业务逻辑,进一步提高了单线程的使用率。
图10为本公开实施例提供的数据库事务组提交装置的结构示意图。本公开实施例提供的数据库事务组提交装置可以执行数据库事务组提交方法实施例提供的处理流程,如图10所示,数据库事务组提交装置100包括:
接收模块101,用于接收客户端的数据访问请求;
确定模块102,用于根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务;
控制模块103,用于在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程;在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务;
生成模块104,用于当所述事务组中的全部事务提交完成时,生成提交完成信息。
可选的,所述多个处理阶段包括:第一阶段、第二阶段、第三阶段和第四阶段;
其中,所述第一阶段用于实现所述事务组对应的物理日志的组提交;
所述第二阶段用于实现所述事务组对应的二进制日志的组提交;
所述第三阶段用于检测所述事务组对应的二进制日志是否在备份数据库中成功备份;
所述第四阶段用于对所述事务组进行数据库引擎层的事务提交。
可选的,所述控制模块103控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程时,具体用于:
控制所述主线程执行所述多个处理阶段中所述第一阶段的处理过程和所述第二阶段的处理过程。
可选的,所述控制模块103还用于:
在所述主线程执行所述第二阶段的处理过程后,控制所述主线程执行除所述事务组之外的其他事务。
可选的,所述控制模块103具体用于:在所述第四阶段,控制一个或多个第一后台线程对所述事务组中的全部事务进行数据库引擎层的事务提交;
所述生成模块104具体用于:当所述数据库引擎层的事务提交完成时,生成所述提交完成信息;
所述控制模块103还用于:控制所述一个或多个第一后台线程向所述客户端反馈响应信息。
可选的,所述控制模块103还用于:
在所述第三阶段,控制第二后台线程检测所述事务组中的每个事务对应的二进制日志是否在备份数据库中成功备份。
可选的,所述第二后台线程用于根据所述事务组中的每个事务对应的二进制日志的存储位置和所述备份数据库反馈的确认信息,检测所述事务对应的二进制日志是否在备份数据库中成功备份。
图10所示实施例的数据库事务组提交装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图11为本公开实施例提供的数据库事务组提交设备的结构示意图。本公开实施例提供的数据库事务组提交设备可以执行数据库事务组提交方法实施例提供的处理流程,如图11所示,数据库事务组提交设备110包括:存储器111、处理器112、计算机程序和通讯接口113;其中,计算机程序存储在存储器111中,并被配置为由处理器112执行如上所述的数据库事务组提交方法。
另外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的数据库事务组提交方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (16)
1.一种数据库事务组提交方法,其特征在于,所述方法包括:
接收客户端的数据访问请求;
根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务;
在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程;
在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务;
当所述事务组中的全部事务提交完成时,生成提交完成信息。
2.根据权利要求1所述的方法,其特征在于,所述多个处理阶段包括:第一阶段、第二阶段、第三阶段和第四阶段;
其中,所述第一阶段用于实现所述事务组对应的物理日志的组提交;
所述第二阶段用于实现所述事务组对应的二进制日志的组提交;
所述第三阶段用于检测所述事务组对应的二进制日志是否在备份数据库中成功备份;
所述第四阶段用于对所述事务组进行数据库引擎层的事务提交。
3.根据权利要求2所述的方法,其特征在于,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程,包括:
控制所述主线程执行所述多个处理阶段中所述第一阶段的处理过程和所述第二阶段的处理过程。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述主线程执行所述第二阶段的处理过程后,控制所述主线程执行除所述事务组之外的其他事务。
5.根据权利要求2所述的方法,其特征在于,当所述事务组中的全部事务提交完成时,生成提交完成信息,包括:
在所述第四阶段,控制一个或多个第一后台线程对所述事务组中的全部事务进行数据库引擎层的事务提交;
当所述数据库引擎层的事务提交完成时,生成所述提交完成信息,并控制所述一个或多个第一后台线程向所述客户端反馈响应信息。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第三阶段,控制第二后台线程检测所述事务组中的每个事务对应的二进制日志是否在备份数据库中成功备份。
7.根据权利要求6所述的方法,其特征在于,所述第二后台线程用于根据所述事务组中的每个事务对应的二进制日志的存储位置和所述备份数据库反馈的确认信息,检测所述事务对应的二进制日志是否在备份数据库中成功备份。
8.一种数据库事务组提交装置,其特征在于,包括:
接收模块,用于接收客户端的数据访问请求;
确定模块,用于根据所述数据访问请求,确定待提交的事务组,所述事务组包括多个待提交的事务;
控制模块,用于在对所述事务组执行事务组提交过程中,根据所述事务组提交过程包括的多个处理阶段,控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程;在所述主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程中,控制与所述主线程对应的从线程执行除所述事务组之外的其他事务;
生成模块,用于当所述事务组中的全部事务提交完成时,生成提交完成信息。
9.根据权利要求8所述的数据库事务组提交装置,其特征在于,所述多个处理阶段包括:第一阶段、第二阶段、第三阶段和第四阶段;
其中,所述第一阶段用于实现所述事务组对应的物理日志的组提交;
所述第二阶段用于实现所述事务组对应的二进制日志的组提交;
所述第三阶段用于检测所述事务组对应的二进制日志是否在备份数据库中成功备份;
所述第四阶段用于对所述事务组进行数据库引擎层的事务提交。
10.根据权利要求9所述的数据库事务组提交装置,其特征在于,所述控制模块控制主线程执行所述多个处理阶段中部分处理阶段或所有处理阶段的处理过程时,具体用于:
控制所述主线程执行所述多个处理阶段中所述第一阶段的处理过程和所述第二阶段的处理过程。
11.根据权利要求10所述的数据库事务组提交装置,其特征在于,所述控制模块还用于:
在所述主线程执行所述第二阶段的处理过程后,控制所述主线程执行除所述事务组之外的其他事务。
12.根据权利要求9所述的数据库事务组提交装置,其特征在于,所述生成模块在所述事务组中的全部事务提交完成的情况下,生成提交完成信息时,所述控制模块具体用于:在所述第四阶段,控制一个或多个第一后台线程对所述事务组中的全部事务进行数据库引擎层的事务提交;
所述生成模块具体用于:当所述数据库引擎层的事务提交完成时,生成所述提交完成信息;
所述控制模块还用于:控制所述一个或多个第一后台线程向所述客户端反馈响应信息。
13.根据权利要求9所述的数据库事务组提交装置,其特征在于,所述控制模块还用于:
在所述第三阶段,控制第二后台线程检测所述事务组中的每个事务对应的二进制日志是否在备份数据库中成功备份。
14.根据权利要求13所述的数据库事务组提交装置,其特征在于,所述第二后台线程用于根据所述事务组中的每个事务对应的二进制日志的存储位置和所述备份数据库反馈的确认信息,检测所述事务对应的二进制日志是否在备份数据库中成功备份。
15.一种数据库事务组提交设备,其特征在于,包括:
存储器;
处理器;以及
计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求1-7中任一项所述的方法。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011261844.3A CN112434007A (zh) | 2020-11-12 | 2020-11-12 | 一种数据库事务组提交方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011261844.3A CN112434007A (zh) | 2020-11-12 | 2020-11-12 | 一种数据库事务组提交方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112434007A true CN112434007A (zh) | 2021-03-02 |
Family
ID=74699534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011261844.3A Pending CN112434007A (zh) | 2020-11-12 | 2020-11-12 | 一种数据库事务组提交方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112434007A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117290116A (zh) * | 2023-11-27 | 2023-12-26 | 和创(北京)科技股份有限公司 | 可控资源的动态代码运行方法、装置、设备及系统 |
-
2020
- 2020-11-12 CN CN202011261844.3A patent/CN112434007A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117290116A (zh) * | 2023-11-27 | 2023-12-26 | 和创(北京)科技股份有限公司 | 可控资源的动态代码运行方法、装置、设备及系统 |
CN117290116B (zh) * | 2023-11-27 | 2024-02-23 | 和创(北京)科技股份有限公司 | 可控资源的动态代码运行方法、装置、设备及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111143389B (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
WO2018103318A1 (zh) | 分布式事务处理方法和系统 | |
US6662196B2 (en) | Collision avoidance in bidirectional database replication | |
US6665814B2 (en) | Method and apparatus for providing serialization support for a computer system | |
US5999931A (en) | Concurrency control protocols for management of replicated data items in a distributed database system | |
JP3672208B2 (ja) | 階層化トランザクション処理方法 | |
JP6220851B2 (ja) | 2フェーズコミットコールの厳密な順序付けに基づいたトランザクションリカバリをサポートするためのシステムおよび方法 | |
US20120179645A1 (en) | Transaction support for distributed data | |
Park et al. | Exploiting commutativity for practical fast replication | |
JPS61233849A (ja) | デ−タベ−ス排他制御方法 | |
CN109783204A (zh) | 一种分布式事务处理方法、装置及存储介质 | |
US10055445B2 (en) | Transaction processing method and apparatus | |
CN110413687B (zh) | 基于节点互证校验的分布式事务故障处理方法及相关设备 | |
WO2022170979A1 (zh) | 日志执行方法、装置、计算机设备及存储介质 | |
CN112148480A (zh) | 基于多线程的任务处理方法、装置、设备及存储介质 | |
CN112148436A (zh) | 去中心化的tcc事务管理方法、装置、设备及系统 | |
CN112434007A (zh) | 一种数据库事务组提交方法、装置、设备及存储介质 | |
EP3210119B1 (en) | Recovery and fault-tolerance under computational indeterminism | |
CN110196788B (zh) | 一种数据读取方法、装置、系统及存储介质 | |
WO2023216636A1 (zh) | 事务处理方法、装置及电子设备 | |
WO2023103340A1 (zh) | 一种区块数据提交的方法及装置 | |
CN115292092B (zh) | 一种数据回滚方法、装置、设备及其存储介质 | |
CN115658245A (zh) | 一种基于分布式数据库系统的事务提交系统、方法及装置 | |
WO2018188959A1 (en) | Method and apparatus for managing events in a network that adopts event-driven programming framework | |
WO2022021768A1 (zh) | 平行链交易组执行方法、设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |