1.本说明书涉及分布式事务处理技术领域,尤其涉及一种基于分布式数据库系统的事务提交系统、方法及装置。
背景技术:2.分布式数据库系统中的数据不是存储在一个机器上,而是分散存储在由计算机网络连接的多个节点上,并在逻辑上由对应管理系统统一管理数据。因此相比传统的集中式数据库,分布式数据库系统中的数据库在可靠性、可用性、可扩展性等方面存在更大优势,且更加适用于网络中诸如各种高并发访问、海量数据处理的场景。
3.在相关技术中,分布式数据库系统基于事务(transaction)机制执行对应的数据操作,其中,每一事务存在相应的事务协调者(coordinator)和事务参与者(participant)两种角色,二者相互协调以保证上述数据操作的正确实现,然而,事务协调者与事务参与者之间的协调过程复杂,处理事务的整体效率较低。
技术实现要素:4.有鉴于此,本说明书提供一种基于分布式数据库系统的事务提交系统、方法及装置,以解决相关技术中存在的不足。
5.具体地,本说明书是通过如下技术方案实现的:根据本说明书实施例的第一方面,提供了一种分布式数据库系统,包括:目标事务的事务协调者和事务参与者,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态;其中:所述事务协调者,用于向所述事务参与者发起针对所述目标事务的准备请求,以使所述事务参与者生成并持久化对应的准备日志;以及,根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求;所述事务参与者,用于响应于所述准备请求生成对应的准备日志,将所述准备日志持久化,并将持久化结果返回至所述事务协调者;以及,响应于所述事务执行请求,执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
6.根据本说明书实施例的第二方面,提供了一种基于分布式数据库系统的事务提交方法,应用于所述分布式数据库系统中目标事务的事务参与者,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态,所述方法包括:响应于事务协调者针对所述目标事务发起的准备请求,生成对应的准备日志;将所述准备日志持久化,并将持久化结果返回至所述事务协调者;响应于所述事务协调者发起的事务执行请求,执行对应所述事务执行请求的事务
操作,并在执行完成后将所述目标事务由未决状态切换为已决状态,所述事务执行请求为所述事务协调者根据所有事务参与者对应的持久化结果而生成。
7.根据本说明书实施例的第三方面,提供了一种基于分布式数据库系统的事务提交方法,应用于所述分布式数据库系统中目标事务的事务协调者,所述方法包括:向事务参与者发起针对所述目标事务的准备请求,以使所述事务参与者生成对应的准备日志;其中,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态;根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求,以使所述事务参与者执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
8.根据本说明书实施例的第四方面,提供了一种基于分布式数据库系统的事务提交装置,应用于所述分布式数据库系统中目标事务的事务参与者,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态,所述装置包括:准备日志生成单元,用于响应于事务协调者针对所述目标事务发起的准备请求,生成对应的准备日志;准备日志持久化单元,用于将所述准备日志持久化,并将持久化结果返回至所述事务协调者;事务操作执行单元,用于响应于所述事务协调者发起的事务执行请求,执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态,所述事务执行请求为所述事务协调者根据所有事务参与者对应的持久化结果而生成。
9.根据本说明书实施例的第五方面,提供了一种基于分布式数据库系统的事务提交装置,应用于所述分布式数据库系统中目标事务的事务协调者,所述装置包括:准备请求发起单元,用于向事务参与者发起针对所述目标事务的准备请求,以使所述事务参与者生成对应的准备日志;其中,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态;执行请求发起单元,用于根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求,以使所述事务参与者执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
10.根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第二方面、第三方面所述的方法的步骤。
11.根据本说明书实施例的第七方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第二方面、第三方面所述的方法的步骤。
12.在本说明书所提供的技术方案中,取消了相关技术中事务协调者和事务参与者持久化日志的部分过程,减小了系统资源的开销,同时利用事务参与者对用于确定已决事务的分界位置进行相应的记录以保证事务在异常情况下依然具有状态恢复能力。
13.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
14.为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
15.图1是本说明书一示例性实施例示出的事务协调者与事务参与者的关系示意图;图2是本说明书一示例性实施例示出的一种基于分布式数据库系统的两阶段提交的交互示意图;图3是本说明书一示例性实施例示出的另一种基于分布式数据库系统的事务提交系统的示意图;图4是本说明书一示例性实施例示出的又一种基于分布式数据库系统的事务提交系统的示意图;图5是本说明书一示例性实施例示出的一种基于分布式数据库系统的事务提交方法的流程示意图;图6是本说明书一示例性实施例示出的另一种基于分布式数据库系统的事务提交方法的流程示意图;图7是本说明书一示例性实施例示出的一种电子设备的示意结构图;图8是本说明书一示例性实施例示出的一种基于分布式数据库系统的事务提交装置的结构示意图;图9是本说明书一示例性实施例示出的另一种基于分布式数据库系统的事务提交装置的结构示意图。
具体实施方式
16.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与本说明书的一些方面相一致的装置和方法的例子。
17.在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
18.应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
19.在相关技术中,根据存储架构的不同可以将数据库划分为磁盘数据库与内存数据库。其中,磁盘数据库将数据存储于磁盘,但碍于磁盘极低的读写性能,在数据量大、访问磁盘操作频繁的情况下,磁盘数据库的数据处理速度较低;内存数据库将数据全量加载到内存中进行处理,由于内存相对于磁盘来说是极其高速的存储介质,因此内存数据库没有像上述磁盘数据库一样的磁盘读写性能瓶颈,数据处理速度更高。而在磁盘数据库与内存数据库的基础上,还可以衍生出准内存数据库,即整个数据库以非易失性存储器(通常是固态硬盘solid state disk,ssd)为载体以存储基线数据,但对数据的修改都定义为增量数据,只允许写入内存,使得新近的增、删、改数据(修改增量)均存储于内存中,所以也可以认为对应上述准内存数据库的数据操纵语言(data manipulation language, dml)是完全的内存操作,性能较高。而当内存的增量数据满足一定条件时,也可以触发增量数据和基线数据之间转储(minor freeze)或合并(major freeze)。
20.当然,无论是采用以上哪一种数据库类型,对应的数据库系统都需要保证相应事务具备acid(atomicity,consistency,isolation,duriablity)的特性。其中,atomicity(原子性)表示一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。一旦事务在执行过程中发生错误,将会被恢复(rollback,又称回滚)到事务开始前的状态,就像这个事务从来没有执行过一样。保证事务原子性的复杂性多出自异常处理,例如宕机恢复、主备切换等。以一个事务修改两行数据为例,如果在修改完第一行之后、修改第二行之前执行该事务的机器宕机了,如果没有其他机制保证,待机器重新恢复服务,就只有第一行的修改存留在系统中,显然这将违反上述原子性的要求。
21.在数据库系统中,通常使用日志技术(log)实现上述原子性,当使用 log 时,可以先把整个事务的操作编码成连续的日志信息,再把日志信息持久化至非易失性存储器,当该日志信息持久化成功时即表征该事务的原子性已被成功保证。进一步地,在发生宕机恢复等异常情况后,若某一事务的日志被确定不具备完整性,那么可以确定该事务对应的操作并没有被全部完成,因此可以直接对该事务进行回滚操作。
22.当一数据库由多台机器组成时,可将该数据库对应的数据库系统视为分布式数据库系统,而每台机器作为上述分布式数据库系统的一个节点都可以拥有属于自己的日志,如果一个事务涉及多台节点,那么上述多台节点上均会写有对应的日志,我们可以称这种事务为“分布式事务”。然而,对于上述分布式事务而言,如果其中某一节点发生宕机恢复,并从日志中恢复事务状态时,同样需要询问所有节点来确认上述事务的所有日志是否都持久化成功了。但是实际应用场景中往往无法承受每次恢复事务状态时,都对每个事务进行多节点通讯所造成的资源开销与操作延迟。因此上述分布式事务可以采用类似两阶段提交 (two-phase commitment,2pc) 的同步协议来保证原子性。
23.在介绍上述2pc协议前,首先结合图1对上述事务协调者与上述事务参与者的关系进行进一步解释。图1是本说明书一示例性实施例示出的事务协调者与事务参与者的关系示意图。如图1所示,该系统可以包括事务协调者11和事务参与者12。
24.事务协调者11作为驱动分布式数据库系统中任一事务提交流程的主体,可以实现于任一节点上,当然也可以和任一个事务参与者实现于同一台节点上。在所述系统运行过程中,事务协调者11可以推动事务参与者12执行事务操作,进而使得事务对应的所有事务参与者在进行事务提交时保持数据一致性。
25.事务参与者12承担事务数据修改的提交任务,多个事务参与者可以同时对应关联与一个事务协调者11,例如图1中的事务协调者与n个事务参与者(即事务参与者1、事务参与者2
……
事务参与者n,n为正整数)相关联。每一节点上通常可以实现有一个事务参与者,当然,也存在同一节点上实现有多个事务参与者的情况:1、当任一节点的多张数据表涉及同一事务,且每张数据表分别具有多个副本(replica)的情况下时,可以将上述同一事务视为分布式事务,并将每张数据表视为该节点中的一个事务参与者;2、当一张数据表的数据量过大时,可以将该表拆分为多个分区以使不同的数据分别存储于对应的分区中,那么在上述分布式数据库系统支持分区功能且至少一个节点中配置有多个分区、多个分区涉及同一事务、每个分区分别具有多个副本的情况下,可以将上述同一事务视为分布式事务,并将每个分区表视为该节点中的一个事务参与者。其中,关于副本与分布式数据库系统之间的关系将在后文进行介绍,本说明书在此不再进行赘述。
26.事务协调者11和事务参与者12之间进行的连接方式,则可以包括多种类型的有线或无线连接,本说明书并不对此进行限制。
27.如上文所述,在分布式事务中,任一节点发生宕机恢复时通过询问所有节点来确认事务的所有日志的持久化情况是不切实际的。因此可以引入类似上述2pc的一致性协议以保证分布式系统架构下的所有节点在进行事务提交时保持数据一致性。具体地,上述2pc协议将事务提交过程分为提交请求阶段与提交执行两个阶段(或称prepare/准备/投票阶段与“commit/abort”/提交/执行阶段),因此称之为两阶段提交。下面结合图2对2pc的实现方式进行进一步的解释。图2是本说明书一示例性实施例示出的一种基于分布式数据库系统的两阶段提交的交互示意图。如图2所示,可以将各步骤按照执行顺序分别归类于上述准备阶段与上述执行阶段:准备阶段:事务协调者向所有事务参与者发起针对目标事务的准备请求(对应图2中的第1步),当每个事务参与者接收消息之后在本地执行上述目标事务,以便决定是否可以提交该事务,如果可以则持久化对应的准备日志(对应图2中的第2步),成功之后给事务协调者返回表征成功的持久化结果,否则返回表征失败的持久化结果(对应图2中的第3步)。事务协调者收齐所有事务参与者的消息之后,可以持久化对应的准备日志(对应图2中的第4步),与上述事务参与者持久化的准备日志不同,事务协调者持久化的准备日志中记录了各个事务参与者的持久化结果,换言之,上述事务协调者的准备日志可以用于记录上述目标事务在各事务参与者中所处的事务状态,并推动下文中执行阶段的执行。本领域技术人员可以理解的是,不同类型的数据库所产生的日志通常互不相同,因此本说明书中仅介绍该协议的常规流程,对于具体日志命名或日志内容不做深入分析。
28.执行阶段:当事务协调者收齐所有事务参与者的持久化结果之后,如果所有持久化结果均表征成功,那么可以确定上述目标事务可以提交;否则确定上述目标事务需要回滚。然后该事务协调者给所有事务参与者发送事务执行请求(例如事务提交请求或者事务回滚请求)(对应图2中的第5步),每一事务参与者收到上述事务执行请求之后,开始持久化对应的提交日志(或是回滚日志)(对应图2中的第6步),当上述提交日志持久化完成之后,给事务协调者返回对应的持久化结果,同时释放对应的系统资源(对应图2中的第7步)。协调者收齐所有对应提交日志的持久化结果之后,可以持久化对应的提交日志(对应图2中的第8步),与上述事务参与者持久化的提交日志不同,事务协调者持久化的提交日志中记录
了各个事务参与者的持久化结果,换言之,上述事务协调者的提交日志可以用于记录上述目标事务在各事务参与者中所处的事务状态。在上述提交日志持久化成功之后,事务协调者将释放系统资源并退出。
29.可见,在遵循2pc协议的情况下,事务从提交开始到提交结束至少需要造成2次rpc(remote procedure call,远程过程调用,即发送上述准备请求与上述事务执行请求)和4次事务日志(即事务协调者和事务参与者分别持久化一次上述准备日志与上述提交日志)io(input/output)的耗时。其中,根据上述准备日志与上述提交日志可以为宕机重启后的事务参与者和/或事务协调者提供重启前对应事务所处的事务状态,进而保证上述事务参与者和/或上述事务协调者可以快速恢复对应事务的事务状态。然而,由于事务提交的性能是数据库性能的核心,且提交协议耗时长意味着持锁时间更长,io负载更高,网络通信更多,因此如何在保证事务恢复能力的前提下优化事务提交的性能,提高系统的处理能力开始成为当代各大互联网企业公司共同面临的难题。基于此,本说明书提出以下技术方案以解决以上问题。
30.本说明书实现了一种基于分布式数据库系统的事务提交系统。图3是本说明书一示例性实施例示出的另一种基于分布式数据库系统的事务提交系统的示意图,如图3所示,上述分布式数据库系统内包括目标事务的事务协调者和事务参与者,其中,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中位于上述分界位置之前的事务均处于已决状态。
31.上述事务序列维护于对应事务参与者所在节点的内存中,该事务序列中描述有与上述事务参与者有关的事务与对应的事务信息,每一事务信息中可以包含对应事务中所执行的数据库操作序列、事务版本号以及事务执行状态等数据。其中,根据事务的执行情况可以将上述事务执行状态分为活动状态、部分提交状态、失败状态、提交状态与中止状态这5种状态,根据状态是否不再变化这一判断条件,可以将上述5种状态所对应的事务进一步分为已决事务(即处于提交状态与中止状态的事务)与未决事务(即处于活动状态、部分提交状态、失败状态的事务)。当然,相关技术中已经公开了上述5种状态的具体定义以及各状态之间的转换条件与转换操作,本说明书中在此不再进行赘述。
32.如前文所述,数据库可以具体划分为磁盘数据库、内存数据库以及准内存数据库,当上述分布式数据库系统基于准内存数据库存储数据时,上述分布式数据库系统维护的数据可以包括基线数据与针对上述基线数据产生的增量数据。其中,上述基线数据存储于非易失性存储器,而增量数据存储于内存,而上述事务序列中的事务可以对应于上述增量数据。当上述分布式数据库系统基于内存数据库存储数据时,上述分布式数据库系统维护的数据(包括上述事务序列中的事务)均可以存储于内存之中。当上述分布式数据库系统基于磁盘数据库存储数据时,尽管上述分布式数据库系统维护的数据均存储于磁盘中,但为了提高数据的存储效率,磁盘数据库通常不会将已决事务所涉及的数据立即持久化至磁盘,而是临时存储至缓存中,因此上述事务序列中的事务也可以对应于上述缓存中的数据。
33.由于上述事务序列可以维护于内存这一易失性存储器中,且相比2pc,该系统中仅存在针对类似准备日志的持久化操作,不存在针对提交日志的持久化操作,因此在该事务参与者所在的节点出现掉电重启等类似情况时,即使利用下文中的准备日志完成了数据回放并恢复了上述事务序列,恢复后的事务序列依然无法判断各事务在掉电前属于已决事务
还是与未决事务。又由于此时每一事务都默认为未决事务,因此上述事务参与者需要重新执行每一事务的提交流程,进而导致该事务参与者面临重启恢复的时间过长的问题。在本说明书中通过利用上述分界位置可以有效地避免上述问题的发生:上述分界位置可以为用于判断事务执行先后顺序的事务版本号,假设此时上述事务序列按照事务版本号从小到大排列,且事务版本号较小的事务先于事务版本号较大的事务执行,那么可以将该事务参与者上最大已连续提交事务的事务版本号作为上述分界位置,使得事务版本号小于该分界位置的事务被确定为已决事务,而大于该分界位置的事务被确定为未决事务。其中,不同于缓存的事务序列,上述分界位置可以被持久化存储,因此在上述事务参与者所在的节点出现掉电重启等类似情况时,可以根据上述分界位置确定恢复后的事务序列中的未决事务与已决事务,进而起到与上述2pc协议中提交日志相似的效果,但上述分界位置相比上述提交日志的内容具有低数据量的优势,因此持久化速度更快,执行事务的整体效率更高。
34.相对于图2的二阶段提交的流程示意图,图3所示的系统仅包含准备阶段(即一阶段提交),该阶段内分布式数据库系统中目标事务的事务协调者与事务参与者的交互操作如下:1、事务协调者向对应的事务参与者发起针对目标事务的准备请求。
35.当上述分布式数据库需要提交上述目标事务时,可以通过事务协调者向对应的事务参与者发起准备请求,并开始等待各事务参与者节点的响应(即下文的持久化结果)。
36.2、所述事务参与者响应于所述准备请求生成对应的准备日志,将所述准备日志持久化。
37.对应接收上述准备请求的任一事务参与者而言,该事务参与者可以首先检查事务权限,并在权限验证通过后执行准备请求接收为止的所有事务操作,并将生成的准备日志进行持久化。其中,不同类型的数据库,所生成的准备日志往往也不相同,以mysql、oracle等典型的磁盘数据库为例,由此类数据库生成的准备日志可以包含撤销日志(undolog)和重做日志(redolog),但对于类似oceanbase(ob)的内存数据库或准内存数据库而言,上述目标事务在接收上述准备请求前的数据都存储于内存中,并未对磁盘进行实际修改,因此没有生成与持久化上述撤销日志的实际意义。至于上述撤销日志与上述重做日志的实际作用与具体内容基本已被相关技术所公开,因此本说明书中在此不再进行赘述。
38.如前文所述,为了数据安全和提供高可用的数据服务,每一节点上的数据可以在物理上存储多份,每一份数据可称为一个副本,例如:当目标事务涉及的数据表的数据量高于预设阈值时,可以直接为每张数据表生成多份副本,或者当目标事务涉及的数据涉及分区时,可以为每一分区生成多份副本。其中,上述副本可以根据负载与特定的策略,由系统自动调度分散在多个节点上,且上述副本支持迁移、复制、增删、类型转换等管理操作。进一步的,在上述分布式数据库系统中,为了保证每一事务参与者对应的分区或数据表的数据安全和提供高可用的数据服务,可以为上述事务参与者引入副本机制。
39.在一实施例中,上述事务参与者在上述分布式系统中对应有多个副本,上述事务参与者针对上述准备日志的持久化的过程相当于上述多个副本分别对上述准备日志进行持久化,同时上述持久化结果与上述多个副本中持久化成功的副本比例相关。其中,所谓的副本比例仅仅是上述多个副本确定上述持久化结果时的主要依据,利用该依据确定上述持久化结果的逻辑需要根据实际使用场景进行区分:
例如经典集中式数据库往往采用主备同步方案,该方案具体存在两种同步模式:第一种是强同步,主机中每个事务操作都需要强同步到备机才可以应答用户,这种方式能够做到服务器故障不丢数据,但必须暂停其他服务的正常执行,因此无法保证可用性;另外一种是异步同步,每个事务操作只需要在主机成功就可以应答用户,这种方式能够做到高可用,但主库和备库之间数据不一致,备库切换为主库之后会丢数据。其中,上述主机、备机可以为上述多个副本中的主副本(leader)与从副本(follower)分别所处的机器,主库和备库可以为上述多个副本中的主副本与从副本分别对应的数据库。其中,上述主副本与上述从副本的含义与作用将在下文进一步进行解释,本说明书在此不作详细说明。对于上述强同步,上述副本比例可以被视为100%,换言之,只有当上述多个副本全部成功持久化时,对应的事务参与者才能够将上述持久化结果确定为成功,否则上述持久化结果确定为失败;对于上述异步同步,上述副本比例可以被视为1/m及以上,m为上述事务参与者对应的副本总数,换言之,只要主副本成功持久化,对应的事务参与者就能够将上述持久化结果确定为成功,否则上述持久化结果确定为失败。
40.当然,以上情况均限制于使用集中式数据库的场景,在使用分布式数据库的场景,可以根据多副本一致性协议保证同一事务参与者在多个副本上的数据一致,以基于paxos算法的多副本一致性协议为例,假设上述事务参与者对应一个分区,那么该分区对应的多份副本可以自动建立为paxos组,并在多副本中自动选举出主副本,上述多副本一致性协议可将上述事务参与者定义为:在过半数量的副本成功持久化的情况下,将上述持久化结果确定为成功,否则上述持久化结果确定为失败。其中,上述副本比例可以视为50%以上,为避免成功持久化的副本恰好为副本总数一半的情况,副本的总数通常可以设置为3或5等奇数,本说明书中并不对此进行限制。
41.为了便于区分上述事务参与者的主、从副本在持久化上述准备日志时的具体操作,可以定义下文的主节点与从节点。
42.在一实施例中,上述分布式数据库系统包含主节点与一个或多个从节点,上述主节点上部署有任一事务参与者的主副本,且上述一个或多个从节点上部署有上述任一事务参与者的从副本,上述主副本用于数据访问,上述从副本用于数据备份,当上述事务参与者将上述准备日志持久化时,上述主副本可以将上述准备日志发送至上述主节点的事务状态管理器,以使该事务状态管理器将上述准备日志写入对应的事务缓冲器,并由上述事务缓冲器将已写入的准备日志持久化至上述主副本与上述从副本。其中,上述事务状态管理器为上述主节点的内存中维护上述事务参与者的事务序列的实际对象。下面结合图4对该实施例进行进一步论述,图4中的第1~4步操作与图3基本一致,区别在于图4的第2步将事务参与者在持久化准备日志过程中与所处节点的事务状态管理器的交互进行了进一步的补充说明。如图4所示,多个事务参与者均对应于同一节点a中,因此上述事务状态管理器中可以包含分别与上述多个事务参与者对应的准备日志。以事务参与者411为例:假设事务参与者411的主副本同样部署于上述节点a中,那么上述事务状态管理器可以将事务参与者411生成的准备日志写入事务缓冲器1中,并由事务缓冲器1持久化至节点a以及部署有事务参与者411从副本的其他节点。同理,假设事务参与者412的主副本部署于节点b中,那么上述事务状态管理器可以将事务参与者412生成的准备日志写入事务缓冲器2中,并由事务缓冲器2持久化至节点b以及部署有事务参与者411从副本的其他节点。
43.然而,随着目标事务中涉及的事务参与者数量增加,以及每一事务参与者对应的副本数量增加,上述准备日志的持久化效率将随着下降。以上述目标事务的事务参与者411、412为例:假设事务参与者411的主副本部署于节点a、从节点部署于节点b、c,事务参与者412的主副本部署于节点b、从节点部署于节点a、c,那么二者将各自的准备日志通过事务状态管理器写入事务缓冲器1、2后,事务缓冲器1、2需要分别向节点a、b、c发送上述准备日志,换言之,事务参与者411、412的准备日志通常需要通过6次rpc以持久化至对应的节点中(当然,在以上示例中,事务缓冲器1、2恰好分别与事务参与者411和事务参与者412的一个副本处于同一节点a,因此可以额外省略两次rpc)。
44.由于过多的rpc次数将对上述准备日志的持久化过程造成较大延迟,本说明书中进一步给出了优化方案。
45.在一实施例中,上述主节点上可以部署有至少两个事务参与者的主副本,且上述一个或多个从节点中的至少一个从节点上部署有上述至少两个事务参与者的从副本,在将上述至少两个事务参与者分别生成的准备日志持久化时,上述至少两个事务参与者的主副本可以分别将上述准备日志发送至上述主节点的事务状态管理器,以使上述事务状态管理器将上述准备日志写入目标事务缓冲器,并由上述目标事务缓冲器将上述至少两个事务参与者写入的准备日志:分别持久化至对应的主副本,以及批量同步至上述至少一个从节点以持久化至相应的从副本。本实施例与上一实施例的区别在于本实施例的事务状态管理器将同一节点中的不同事务参与者所生成的准备日志写入同一事务缓冲器中(即上述目标事务缓冲器),进而使得上述目标事务缓冲器可以通过批量同步的方式实现rpc次数最最小化。仍然以图4为例,本实施例相当于将事务参与者411、412的准备日志通过节点a的事务状态管理器一同写入事务缓冲器1中,并由事务缓冲器1将上述事务参与者411、412的准备日志分别写入节点a、b、c的主副本或从副本中,换言之,事务参与者411、412的准备日志通常需要通过3次rpc即可以持久化至对应的节点中(当然,由于事务缓冲器1、2恰好分别与事务参与者411和事务参与者412的一个副本处于同一节点a,因此该实施例中实际仅需2次rpc),进而使得事务参与者持久化准备日志的效率得到了较大的提升。本领域技术人员可以理解的是,实现本实施例的前提是保证多个事务参与者的副本在各节点上的部署情况相同(包括完全相同与部分相同),否则上述目标事务缓冲器批量同步的过程将失去实际意义,导致最终执行的rpc次数与上一实施例相同。
46.3、所述事务参与者将持久化结果返回至所述事务协调者。
47.当事务参与者完成针对准备日志的持久化操作后,可以将对应持久化结果返回至上述事务协调者中。
48.4、所述事务协调者根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求。
49.根据事务的原子性可知,目标事务的所有事务参与者必须都向上述事务协调者返回表征成功的持久化结果,该事务协调者才能向所有事务参与者发送有关上述目标事务的事务提交请求;一旦任一事务参与者返回表征失败的持久化结果,或者由于网络问题没有成功收到准备请求或发出持久化结果,那么上述事务协调者需要向所有事务参与者发送有关上述目标事务的事务回滚请求。其中,上述事务提交请求与上述事务回滚请求属于上述事务执行请求中的一种请求,当然,事务回滚请求的发送条件可以是实际情况进行调整,例
如在事务协调者未及时收到准备请求或发出持久化结果的情况下,上述事务协调者可以预设重试时长内尝试持续询问事务参与者,直到事务参与者响应或者询问时间超过上述预设重试时长。
50.5、所述事务参与者响应于所述事务执行请求,执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
51.在事务参与者接收到上述事务提交请求的情况下,事务参与者与事务协调者无需持久化类似上述提交日志的数据,事务参与者仅需执行对应的事务提交操作,并在执行完成后通过事务序列将上述目标事务由未决状态切换为已决状态,其中,所述事务提交操作可以为释放在处理目标事务过程中所使用的锁与资源。在事务参与者接收到上述事务回滚请求的情况下,事务参与者需要生成并持久化事务回滚日志,并执行对应的事务回滚操作,并在执行完成后将上述目标事务由未决状态切换为已决状态,其中,事务回滚操作可以包括:在上述回滚日志持久化成功之后释放处理目标事务过程中所使用的锁,并给事务协调者发送表征成功/失败的回滚结果。当事务协调者收齐所有表征成功的回滚结果后,可以通知所有事务参与者清理对应上述目标事务的资源。本领域技术人员可以理解的是,由于上述事务参与者并不需要持久化类似提交日志的数据,因此上述方法可以有效降低上述事务参与者持有锁的时间,提高了系统的并发性,同时降低了磁盘io次数,从而有效降低了事务提交的耗时。
52.其中,上述“由未决状态切换为已决状态”的过程可以表示为上述事务参与者将对应的事务序列中关于上述目标事务的事务状态设置为已决状态,也可以表示针对上述分界位置的更新操作。
53.在一实施例中,上述分界位置存储于预设的记录日志中。例如前文所述,该分界位置可以为上述事务参与者对应的事务序列中最大已连续提交事务的事务版本号,假设此时上述事务参与者以执行有事务t1、t2、t3
……
t10等10个事务,各事务按照事务版本号大小正序排列,其中事务t1、t2、t3、t5为已决事务,事务t4与事务t6~ t10为未决事务,那么上述分界位置便是事务t3对应的版本号,而上述日志记录可以记录有上述分界位置的最新版本。上述日志记录可以基于新建文件并写入、追加写入或者覆盖写入的方式持久化对应的分界位置,本说明书中并不对此进行限制。
54.在另一实施例中,上述分界位置存储于上述准备日志中。本说明书中的方案相比相关技术而言,虽然没有持久化上述提交日志,但依然无法忽视定期(例如每隔100ms)持久化上述记录日志所造成的系统开销。为了减少针对提交日志的持久化次数,每个事务参与者在提交相关事务的过程中,可以将当前事务序列中最大已连续提交事务的事务版本号直接与其他日志信息一同持久化至上述准备日志中。
55.在又一实施例中,上述分界位置存储于预设的记录日志和上述准备日志中。在生成上述准备日志的过程中,上述事务参与者将上述分界位置记录于上述准备日志中,在执行事务操作的频率低于预设频率的情况下,上述事务参与者将上述分界位置记录于上述记录日志中。相比前两个实施例,本实施例在保证上述提交日志的持久化次数减低的前提下,通过在记录日志中记录部分分界位置的方式,避免了上述分界位置持久化至上述准备日志后长时间没有新的事务执行,导致在上述准备日志持久化结束后才确定的已决事务的事务版本号无法被及时记录的情况发生。
56.事实上,本说明书并不对上述分界位置的更新时机进行限制,上述事务参与者即可以在上述事务操作的同时更新上述分界位置,也可以在预设时间点或每隔预设时间长度后根据上述事务序列中的对应各事务的事务状态进行更新。
57.下面对上文中被记录的分界位置在上述事务参与者所处的节点发生异常并执行事务恢复时所发挥的作用进行进一步说明。
58.在一实施例中,上述事务参与者在发生异常并恢复的情况下,可以读取并回放持久化的准备日志以恢复上述事务序列中的事务,然后再读取并回放持久化的事务回滚日志,以针对上述事务序列中对应的事务执行上述事务回滚操作,最后读取上述分界位置,并针对上述事务序列中位于上述分界位置之前的事务执行事务提交操作。其中,可能会存在读取上述事务回滚日志未命中的情况,那么可以确定上述事务参与者在发生异常前并没有对任一事务执行过回滚。例如前文所述,本实施例也可以基于t1、t2、t3
……
t10等10个事务的场景进行解释:在上述事务参与者读取并回放持久化的上述准备日志时,对应的事务序列中可以恢复有事务t1、t2、t3
……
t10,当此时上述事务序列中并没有记录各事务的事务状态,事务t1~t10都属于未决事务,假设其中事务t1、t2、t3、t5为已决事务,事务t4与事务t6~ t10为未决事务,且上述事务回滚日志记录有针对事务t2的事务回滚操作,上述分界位置为事务t3对应的版本号,那么上述事务参与者可以优先对事务t2执行事务回滚操作,并在事务t2回滚结束后对上述事务序列中位于分界位置之前的事务(即事务t1、t3)直接进行事务提交操作。至此完成上述事务参与者的事务恢复操作,后续其他未决事务(即t6~ t10)也将重新执行事务提交的整个流程。
59.然而,上述分界位置相比上述提交日志仅能恢复大部分的异常场景,对于特殊场景下的事务参与者依然无法恢复对应事务的事务状态。例如:主库上的事务已经全部完成了事务提交,然而某个事务参与者在持久化对应的分界位置之前,发生了主备切换,导致备机当选为主机,那么新主机上的事务参与者关于主库中事务的事务状态将无法确定。本说明书通过引入关于准备日志的日志标识的技术,以上述分界位置在事务恢复场景下的缺陷。
60.在一实施例中,上述事务参与者响应于上述事务协调者针对上述目标事务发起的预准备请求,返回上述目标事务对应的准备日志的日志标识,以用于添加至上述准备请求携带的日志标识集,同时,上述事务参与者响应于接收到的上述准备请求,将上述事务参与者日志标识集添加至上述事务参与者准备日志。在上述分布式数据库系统中对应有用于持久化上述准备日志的多个副本时,假定上述多个副本包括主副本与至少一个从副本,那么在发生主从副本切换且上述目标事务在新的主副本上状态未知的情况下,上述新的主副本可以从上述准备日志中获取除自身所属事务参与者之外的其他事务参与者对应的日志标识,并根据获取的日志标识查询上述其他事务参与者针对上述目标事务持久化的准备日志。其中,在上述其他事务参与者均持久化有对应的准备日志的情况下,上述新的主副本可以将表征持久化成功的持久化结果返回至上述事务协调者;对应的,在任一其他事务参与者未持久化有对应的准备日志的情况下,上述新的主副本可以将表征持久化失败的持久化结果返回至上述事务协调者。其中,上述日志标识用于唯一标识对应事务参与者的准备日志,当然根据生成上述准备日志方式的不同,上述日志标识也将具有不同的含义,例如:每一事务参与者仅维护有一个准备日志文件,所述准备日志文件分配有唯一的日志标识,后
续所有新生成的准备日志均可追加写入至上述准备日志文件的末尾,或者每一事务参与者每次生成准备日志时,均创建一新的准备日志文件,每一创建的准备日志文件分配有唯一的日志标识。由于上述准备请求中便携带有上述目标事务中所有事务参与者的日志标识,因此对于每一回放有准备日志的从副本,均可以在主备切换后确定其余事务参与者的日志标识。又由于事务的原子性,如果上述其余事务参与者均持久化有描述任一事务的准备日志,那么经过主备切换后的事务参与者中所执行的任一事务也必然为已决事务,若回放的事务回滚日志中不存在与上述任一事务相关的事务回滚操作,则可以对上述事务协调者返回表征持久化成功的持久化结果;如果上述其余事务参与者中存在任一事务参与者没有持久化有描述任一事务的准备日志,那么该事务对应的数据操作并没有被所有事务参与者执行,因此经过主备切换后的事务参与者中所执行的任一事务必然为未决事务,上述事务参与者可以对上述事务协调者返回表征持久化失败的持久化结果。
61.在上一实施例的基础上,若上述新的主副本与上述其他事务参与者的任一副本处于上述分布式数据库系统中的同一节点;那么上述新的主副本可以优先查询自身所处节点的内存中是否缓存有所述目标事务的事务状态信息,若查询成功,则上述新的主副本可以根据上述事务状态信息恢复上述目标事务在上述新的主副本所维护的事务序列中的事务状态;若查询失败,则上述新的主副本可以在自身所处节点上根据获取的日志标识查询所述其他事务参与者在针对所述目标事务持久化的准备日志。其中,由于同一节点的内存中记录有对应事务参与者的事务状态信息,因此只要该信息没有被系统清除,新的主副本就可以根据该信息快速恢复上述目标事务在上述新的主副本所维护的事务序列中的事务状态;如果已被清除,那么也可利用日志标识确定上述事务状态。
62.本领域技术人员可以理解的是,尽管上述实施例的方案新增了一次rpc(即关于上述预准备请求的操作),但在事务提交过程中所造成的延迟依然远小于相关技术中多次持久化事务日志io的耗时,因此仍然可以适用于实际场景中。
63.上述第1~4步操作依次对应图3中的第1~4步,而第5项操作属于上述事务参与者自身的操作,因此在图3中作省略处理。
64.上述事务协调者不参与事务日志的持久化操作时本说明书中一个重要的区别,换言之,上述事务协调者无状态的,因此本说明书也针对上述事务协调者出现宕机重启等异常情况设计了对应的状态。
65.在一实施例中,上述事务参与者在上述事务协调者发生异常并恢复的情况下,可以向上述事务协调者重新发送上述持久化结果,以使恢复后的事务协调者根据所有事务参与者重新发送的持久化结果向上述事务参与者发起对应的事务执行请求。当然,在本实施例中,若上述事务参与者与上述事务协调者同时发生宕机重启,主备切换等异常情况,可以先根据上文所述的方案恢复上述事务参与者所执行事务的事务状态,进而再恢复上述事务协调者中关于各事务的事务状态。例如:当任一事务完成准备阶段之后,如果所有节点全部发生宕机重启,协调者由于没有持久化相应的事务日志,无法恢复原有的事务状态。因此在后续事务参与者恢复事务状态之后,可以将事务协调者针对上述任一事务的事务状态进行重建,进而使得新的协调者将事务从准备阶段继续推进,直到上述任一事务完成提交。
66.图5是本说明书一示例性实施例示出的一种基于分布式数据库系统的事务提交方法的流程示意图。如图5所示,该方法应用于所述分布式数据库系统中目标事务的事务参与
者,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态,所述方法包括:s501,响应于事务协调者针对所述目标事务发起的准备请求,生成对应的准备日志。
67.s502,将所述准备日志持久化,并将持久化结果返回至所述事务协调者。
68.s503,响应于所述事务协调者发起的事务执行请求,执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态,所述事务执行请求为所述事务协调者根据所有事务参与者对应的持久化结果而生成。
69.如前文所述,所述分布式数据库系统维护的数据包括基线数据与针对所述基线数据产生的增量数据,所述基线数据存储于非易失性存储器、所述增量数据存储于内存;其中,所述事务序列中的事务对应于所述增量数据。
70.如前文所述,所述事务参与者在所述分布式系统中对应有多个副本,所述事务参与者针对所述准备日志的持久化包括:所述多个副本分别对所述准备日志进行持久化;以及,所述持久化结果与所述多个副本中持久化成功的副本比例相关。
71.如前文所述,所述分布式数据库系统包含主节点与一个或多个从节点,所述主节点上部署有任一事务参与者的主副本,且所述一个或多个从节点上部署有所述任一事务参与者的从副本,所述主副本用于数据访问,所述从副本用于数据备份;所述将所述准备日志持久化,包括:所述主副本将所述准备日志发送至所述主节点的事务状态管理器,以使所述事务状态管理器将所述准备日志写入对应的事务缓冲器,并由所述事务缓冲器将已写入的准备日志持久化至所述主副本与所述从副本。
72.如前文所述,所述主节点上部署有至少两个事务参与者的主副本,且所述一个或多个从节点中的至少一个从节点上部署有所述至少两个事务参与者的从副本;将所述至少两个事务参与者分别生成的准备日志持久化,包括:所述至少两个事务参与者的主副本分别将所述准备日志发送至所述主节点的事务状态管理器,以使所述事务状态管理器将所述准备日志写入目标事务缓冲器,并由所述目标事务缓冲器将所述至少两个事务参与者写入的准备日志:分别持久化至对应的主副本,以及批量同步至所述至少一个从节点以持久化至相应的从副本。
73.如前文所述,所述方法还包括:响应于所述事务协调者针对所述目标事务发起的预准备请求,返回所述目标事务对应的准备日志的日志标识,以用于添加至所述准备请求携带的日志标识集;以及,响应于接收到的所述准备请求,将所述日志标识集添加至所述准备日志;所述事务参与者在所述分布式数据库系统中对应有用于持久化所述准备日志的多个副本;假定所述多个副本包括主副本与至少一个从副本:在发生主从副本切换且所述目标事务在新的主副本上状态未知的情况下,所述新的主副本从所述准备日志中获取除自身所属事务参与者之外的其他事务参与者对应的日志标识,并根据获取的日志标识查询所述其他事务参与者针对所述目标事务持久化的准备日志;
其中:在所述其他事务参与者均持久化有对应的准备日志的情况下,所述新的主副本将表征持久化成功的持久化结果返回至所述事务协调者;在任一其他事务参与者未持久化有对应的准备日志的情况下,所述新的主副本将表征持久化失败的持久化结果返回至所述事务协调者。
74.如前文所述,所述新的主副本与所述其他事务参与者的任一副本处于所述分布式数据库系统中的同一节点;所述根据获取的日志标识查询所述其他事务参与者针对所述目标事务持久化的准备日志,包括:所述新的主副本查询自身所处节点的内存中是否缓存有所述目标事务的事务状态信息;若查询成功,则所述新的主副本根据所述事务状态信息恢复所述目标事务在所述新的主副本所维护的事务序列中的事务状态;若查询失败,则所述新的主副本在自身所处节点上根据获取的日志标识查询所述其他事务参与者在针对所述目标事务持久化的准备日志。
75.如前文所述,所述执行对应所述事务执行请求的事务操作,包括:在所述事务执行请求为事务提交请求的情况下,执行对应的事务提交操作;在所述事务执行请求为事务回滚请求的情况下,生成并持久化事务回滚日志,并执行对应的事务回滚操作;所述方法还包括:在发生异常并恢复的情况下,读取并回放持久化的准备日志以恢复所述事务序列中的事务;读取并回放持久化的事务回滚日志,以针对所述事务序列中对应的事务执行所述事务回滚操作;读取所述分界位置,并针对所述事务序列中位于所述分界位置之前的事务执行事务提交操作。
76.如前文所述,所述分界位置存储于预设的记录日志和/或所述准备日志中。
77.如前文所述,所述分界位置存储于所述记录日志和所述准备日志中,包括:在生成所述准备日志的过程中,将所述分界位置记录于所述准备日志中;在执行事务操作的频率低于预设频率的情况下,所述事务参与者将所述分界位置记录于所述记录日志中。
78.如前文所述,所述事务参与者还用于:在所述事务协调者发生异常并恢复的情况下,向所述事务协调者重新发送所述持久化结果,以使恢复后的事务协调者根据所有事务参与者重新发送的持久化结果向所述事务参与者发起对应的事务执行请求。
79.图6是本说明书一示例性实施例示出的另一种基于分布式数据库系统的事务提交方法的流程示意图。如图6所示,该方法应用于所述分布式数据库系统中目标事务的事务协调者,所述方法包括:s601,向事务参与者发起针对所述目标事务的准备请求,以使所述事务参与者生成对应的准备日志;其中,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于
已决状态;s602,根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求,以使所述事务参与者执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
80.如前文所述,所述分布式数据库系统维护的数据包括基线数据与针对所述基线数据产生的增量数据,所述基线数据存储于非易失性存储器、所述增量数据存储于内存;其中,所述事务序列中的事务对应于所述增量数据。
81.如前文所述,所述事务参与者在所述分布式系统中对应有多个副本,所述事务参与者针对所述准备日志的持久化包括:所述多个副本分别对所述准备日志进行持久化;以及,所述持久化结果与所述多个副本中持久化成功的副本比例相关。
82.如前文所述,所述方法还包括:向所述事务参与者发起针对所述目标事务的预准备请求,以使所述事务参与者返回所述目标事务对应的准备日志的日志标识,以用于添加至所述准备请求携带的日志标识集;以及,向所述事务参与者发起所述准备请求,以使所述事务参与者将所述日志标识集添加至所述准备日志;所述事务参与者在所述分布式数据库系统中对应有用于持久化所述准备日志的多个副本;假定所述多个副本包括主副本与至少一个从副本:在发生主从副本切换且所述目标事务在新的主副本上状态未知的情况下,所述新的主副本从所述准备日志中获取除自身所属事务参与者之外的其他事务参与者对应的日志标识,并根据获取的日志标识查询所述其他事务参与者针对所述目标事务持久化的准备日志;其中:在所述其他事务参与者均持久化有对应的准备日志的情况下,接收所述新的主副本返回的表征持久化成功的持久化结果;在任一其他事务参与者未持久化有对应的准备日志的情况下,接收所述新的主副本返回的表征持久化失败的持久化结果。
83.如前文所述,所述分界位置存储于预设的记录日志和/或所述准备日志中。
84.如前文所述,所述方法还包括:第三事务恢复单元904,用于在发生异常并恢复的情况下,接收所述事务参与者重新发送的所述持久化结果,并根据所有事务参与者重新发送的持久化结果向所述事务参与者发起对应的事务执行请求。
85.图7是一示例性实施例中的一种电子设备的示意结构图。请参考图7,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成一种基于分布式数据库系统的事务提交装置。当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
86.与前述基于分布式数据库系统的事务提交方法的实施例相对应,本说明书还提供了基于分布式数据库系统的事务提交装置的实施例。
87.通过上述实施例可知,本说明书中的事务协调者不存在针对事务日志的持久化操
作,相比传统的2pc协议,减少了磁盘io的次数,降低了事务提交的整体耗时,同时事务参与者无需持久化类似提交日志的数据,因此降低了事务参与者持有锁的时间,提高了系统的并发性;同时降低了磁盘io次数,从而有效降低了事务提交的耗时。此外,通过引入分界位置保证了事务参与者即使在没有持久化提交日志的前提下,也能够实现异常状态后的事务恢复功能,进一步的,事务参与者可以基于日志标识恢复事务状态,弥补了分界位置在特殊情况下的缺陷。
88.请参考图8,图8是一示例性实施例示出的一种基于分布式数据库系统的事务提交装置的结构示意图。如图8所示,在软件实施方式中,应用于所述分布式数据库系统中目标事务的事务参与者,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中位于所述分界位置之前的事务均处于已决状态,所述装置包括:准备日志生成单元801,用于响应于事务协调者针对所述目标事务发起的准备请求,生成对应的准备日志;准备日志持久化单元802,用于将所述准备日志持久化,并将持久化结果返回至所述事务协调者;事务操作执行单元803,用于响应于所述事务协调者发起的事务执行请求,执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态,所述事务执行请求为所述事务协调者根据所有事务参与者对应的持久化结果而生成。
89.可选的,所述分布式数据库系统维护的数据包括基线数据与针对所述基线数据产生的增量数据,所述基线数据存储于非易失性存储器、所述增量数据存储于内存;其中,所述事务序列中的事务对应于所述增量数据。
90.可选的,所述事务参与者在所述分布式系统中对应有多个副本,所述事务参与者针对所述准备日志的持久化包括:所述多个副本分别对所述准备日志进行持久化;以及,所述持久化结果与所述多个副本中持久化成功的副本比例相关。
91.可选的,所述分布式数据库系统包含主节点与一个或多个从节点,所述主节点上部署有任一事务参与者的主副本,且所述一个或多个从节点上部署有所述任一事务参与者的从副本,所述主副本用于数据访问,所述从副本用于数据备份;所述准备日志持久化单元802具体用于:所述主副本将所述准备日志发送至所述主节点的事务状态管理器,以使所述事务状态管理器将所述准备日志写入对应的事务缓冲器,并由所述事务缓冲器将已写入的准备日志持久化至所述主副本与所述从副本。
92.可选的,所述主节点上部署有至少两个事务参与者的主副本,且所述一个或多个从节点中的至少一个从节点上部署有所述至少两个事务参与者的从副本;所述准备日志持久化单元802具体用于:将所述至少两个事务参与者分别生成的准备日志持久化,包括:所述至少两个事务参与者的主副本分别将所述准备日志发送至所述主节点的事务状态管理器,以使所述事务状态管理器将所述准备日志写入目标事务缓冲器,并由所述目标事务缓冲器将所述至少两个事务参与者写入的准备日志:分别持久化至对应的主副本,以及批量同步至所述至少一个从节点以持久化至相应的从副本。
93.可选的,所述装置还包括:预准备请求处理单元804,用于响应于所述事务协调者针对所述目标事务发起的预准备请求,返回所述目标事务对应的准备日志的日志标识,以用于添加至所述准备请求携带的日志标识集;以及,响应于接收到的所述准备请求,将所述日志标识集添加至所述准备日志;在所述分布式数据库系统中对应有用于持久化所述准备日志的多个副本;假定所述多个副本包括主副本与至少一个从副本:在发生主从副本切换且所述目标事务在新的主副本上状态未知的情况下,所述新的主副本从所述准备日志中获取除自身所属事务参与者之外的其他事务参与者对应的日志标识,并根据获取的日志标识查询所述其他事务参与者针对所述目标事务持久化的准备日志;其中:在所述其他事务参与者均持久化有对应的准备日志的情况下,所述新的主副本将表征持久化成功的持久化结果返回至所述事务协调者;在任一其他事务参与者未持久化有对应的准备日志的情况下,所述新的主副本将表征持久化失败的持久化结果返回至所述事务协调者。
94.可选的,所述新的主副本与所述其他事务参与者的任一副本处于所述分布式数据库系统中的同一节点;所述预准备请求处理单元804具体用于:所述新的主副本查询自身所处节点的内存中是否缓存有所述目标事务的事务状态信息;若查询成功,则所述新的主副本根据所述事务状态信息恢复所述目标事务在所述新的主副本所维护的事务序列中的事务状态;若查询失败,则所述新的主副本在自身所处节点上根据获取的日志标识查询所述其他事务参与者在针对所述目标事务持久化的准备日志。
95.可选的,所述事务操作执行单元803,具体用于:所述事务参与者在所述事务执行请求为事务提交请求的情况下,执行对应的事务提交操作;所述事务参与者所述事务参与者在所述事务执行请求为事务回滚请求的情况下,生成并持久化事务回滚日志,并执行对应的事务回滚操作;所述装置还包括:第一事务恢复单元805,用于在发生异常并恢复的情况下,读取并回放持久化的准备日志以恢复所述事务序列中的事务;读取并回放持久化的事务回滚日志,以针对所述事务序列中对应的事务执行所述事务回滚操作;读取所述分界位置,并针对所述事务序列中位于所述分界位置之前的事务执行事务提交操作。
96.可选的,所述分界位置存储于预设的记录日志和/或所述准备日志中。
97.可选的,所述分界位置存储于所述记录日志和所述准备日志中,所述准备日志生成单元801具体用于:在生成所述准备日志的过程中,将所述分界位置记录于所述准备日志中;
在执行事务操作的频率低于预设频率的情况下,将所述分界位置记录于所述记录日志中。
98.可选的,所述装置还包括:第二事务恢复单元807,用于在所述事务协调者发生异常并恢复的情况下,向所述事务协调者重新发送所述持久化结果,以使恢复后的事务协调者根据所有事务参与者重新发送的持久化结果向所述事务参与者发起对应的事务执行请求。
99.请参考图9,图9是一示例性实施例示出的另一种基于分布式数据库系统的事务提交装置的结构示意图。如图9所示,在软件实施方式中,应用于所述分布式数据库系统中目标事务的事务协调者,所述装置包括:准备请求发起单元901,用于向事务参与者发起针对所述目标事务的准备请求,以使所述事务参与者生成对应的准备日志;其中,每一事务参与者记录有分界位置,所述分界位置用于表征:在相应事务参与者参与处理的事务所构成的事务序列中,位于所述分界位置之前的事务均处于已决状态;执行请求发起单元902,用于根据所有事务参与者返回的针对所述准备日志的持久化结果,向所述事务参与者发起对应的事务执行请求,以使所述事务参与者执行对应所述事务执行请求的事务操作,并在执行完成后将所述目标事务由未决状态切换为已决状态。
100.可选的,所述事务参与者在所述分布式系统中对应有多个副本,所述事务参与者针对所述准备日志的持久化包括:所述多个副本分别对所述准备日志进行持久化;以及,所述持久化结果与所述多个副本中持久化成功的副本比例相关。
101.可选的,所述装置还包括:预准备请求发起单元903,用于向所述事务参与者发起针对所述目标事务的预准备请求,以使所述事务参与者返回所述目标事务对应的准备日志的日志标识,以用于添加至所述准备请求携带的日志标识集;以及,向所述事务参与者发起所述准备请求,以使所述事务参与者将所述日志标识集添加至所述准备日志;所述事务参与者在所述分布式数据库系统中对应有用于持久化所述准备日志的多个副本;假定所述多个副本包括主副本与至少一个从副本:在发生主从副本切换且所述目标事务在新的主副本上状态未知的情况下,所述新的主副本从所述准备日志中获取除自身所属事务参与者之外的其他事务参与者对应的日志标识,并根据获取的日志标识查询所述其他事务参与者针对所述目标事务持久化的准备日志;其中:在所述其他事务参与者均持久化有对应的准备日志的情况下,接收所述新的主副本返回的表征持久化成功的持久化结果;在任一其他事务参与者未持久化有对应的准备日志的情况下,接收所述新的主副本返回的表征持久化失败的持久化结果。
102.可选的,所述分界位置存储于预设的记录日志和/或所述准备日志中。
103.可选的,所述装置还包括:在发生异常并恢复的情况下,接收所述事务参与者重新发送的所述持久化结果,
并根据所有事务参与者重新发送的持久化结果向所述事务参与者发起对应的事务执行请求。
104.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
105.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
106.本说明书中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本说明书中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
107.本说明书中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如fpga(现场可编程门阵列)或asic(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
108.适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏操纵台、全球定位系统(gps)接收机、或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。
109.适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如eprom、eeprom和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及cd rom和dvd-rom盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
110.虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施
例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
111.类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
112.由此,主题的特定实施例已被描述。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
113.以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。