本申请涉及互联网技术领域,尤其涉及一种事务处理方法及装置。
背景技术:
随着互联网技术的不断发展,以及社交网络、智能设备的发展和应用,使得数据量呈爆炸式增长。为了应对海量数据的存储使用,相应地产生了分布式数据库。
分布式数据库可以是由多个数据库服务器(databaseserver)组成的,每个databaseserver都可以提供全部或者部分数据的读写服务。通常,分布式数据库支持事务并发的处理。这里的事务可以是指,对数据库中数据的操作(如增、删、改、查)。例如在处理并发事务时,分布式数据库可以将不同事务分配给不同的数据库服务器处理;再例如可以通过mvcc(multi-versionconcurrencycontrol,多版本并发控制)来实现事务并发处理。
具体地,分布式数据库中维护有一个全局最大版本号,通常业内称为globalcommitedversion。一般的,版本号的大小可以表示了分布式数据库中数据修改(如新增)的时间前后,版本号越大则数据修改的越晚。通常,可以使用时间戳(timestamp)如unixtimestamp作为版本号使用。所述全局最大版本号可以确定所述分布式数据库中最后一个修改的数据。
现有技术中事务处理时,存在获取全局最大版本号的效率较低或者可靠性较差的问题。
技术实现要素:
本申请提供的一种事务处理方法及装置,以解决现有事务处理时,存在获取全局最大版本号的效率较低或者可靠性较差的问题。
根据本申请实施例提供的一种事务处理方法,所述方法应用在分布式数据库中的数据库服务器,所述方法包括:
针对待处理的事务,向版本号服务器组发送全局最大版本号的获取请求;其中,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成;
在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号;
指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
可选的,所述向版本号服务器组发送全局最大版本号的获取请求,具体包括:
向版本号服务器组中的主版本号服务器发送全局最大版本号的获取请求;
所述基于所述应答报文获取全局最大版本号,具体包括:
获取所述应答报文中携带的全局最大版本号。
可选的,所述向版本号服务器组发送全局最大版本号的获取请求,具体包括:
向版本号服务器组中所有版本号服务器广播全局最大版本号的获取请求;
所述在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号,具体包括:
在预设的等待时长内,判断返回的应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述应答报文携带有版本号服务器的局部最大版本号;
若是,将最大的局部最大版本号确定为全局最大版本号。
可选的,所述方法还包括:
在所述事务执行完毕后,给所述事务分配一个比所述全局最大版本号大的事务版本号;
向所述版本号服务器组发送全局最大版本号的更新请求;其中,所述更新请求中携带有所述事务版本号,并用于请求将全局最大版本号更新为所述事务版本号;
提交所述执行完毕的事务。
可选的,所述在所述事务执行完毕后,给所述事务分配一个比所述全局最大版本号大的事务版本号,具体包括:
在所述事务执行完毕后,再次向所述版本号服务器组获取全局最大版本号;
给所述事务分配一个比所述再次获取到的全局最大版本号大的事务版本号。
可选的,所述向所述版本号服务器组发送全局最大版本号的更新请求,具体包括:
向所述版本号服务器组中主版本号服务器发送全局最大版本号的更新请求。
可选的,所述提交所述执行完毕的事务,具体包括:
在接收到所述主版本号服务器返回第二应答报文后,提交所述执行完毕的事务;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
可选的,所述向所述版本号服务器组发送全局最大版本号的更新请求,具体包括:
向所述版本号服务器组中所有版本号服务器广播全局最大版本号的更新请求。
可选的,所述提交所述执行完毕的事务,具体包括:
在预设的第二等待时长内,判断返回的第二应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述第二应答报文表示版本号服务器收到该更新请求。
若是,提交所述执行完毕的事务。
根据本申请实施例提供的一种事务处理方法,所述方法应用在分布式数据库中的版本号服务器组,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成,所述方法包括:
接收到数据库服务器发送的全局最大版本号的获取请求;
将维护的全局最大版本号返回给所述数据库服务器。
可选的,所述将维护的全局最大版本号返回给所述数据库服务器,具体包括:
将主版本号服务器维护的全局最大版本号返回给所述数据库服务器。
可选的,所述将主版本号服务器维护的全局最大版本号返回给所述数据库服务器,具体包括:
在主版本服务器不可用的情况下,从所述版本号服务器组中选取一个备用版本号服务器;
将所述备用版本号服务器维护的全局最大版本号返回给所述数据库服务器。
可选的,所述方法还包括:
所述主版本号服务器接收所述数据库服务器发送的更新请求,该更新请求中携带有事务版本号;
所述主版本号服务器判断所述事务版本号是否大于其维护的全局最大版本号;
若是,所述主版本号服务器将所述事务版本号确定为新的全局最大版本号。
可选的,在所述主版本号服务器将所述事务版本号确定为新的全局最大版本号之后,所述方法还包括:
所述主版本号服务器向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
可选的,所述将维护的全局最大版本号返回给所述数据库服务器,具体包括:
将所有版本号服务器维护的局部最大版本号返回给所述数据库服务器。
可选的,所述方法还包括:
各个版本号服务器接收数据库服务器广播的更新请求,该更新请求中携带有事务版本号;
各个版本号服务器判断所述事务版本号是否大于其维护的局部最大版本号;
若是,则将所述事务版本号确定为其新的局部最大版本号。
可选的,所述方法还包括:
在所述事务版本号大于或者不大于其维护的局部最大版本号的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示收到该更新请求。
根据本申请实施例提供的一种事务处理装置,所述装置应用在分布式数据库中的数据库服务器,所述装置包括:
发送单元,针对待处理的事务,向版本号服务器组发送全局最大版本号的获取请求;其中,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成;
获取单元,在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号;
执行单元,指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
根据本申请实施例提供的一种事务处理装置,所述装置应用在分布式数据库中的版本号服务器组,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成,所述装置包括:
接收单元,接收到数据库服务器发送的全局最大版本号的获取请求;
返回单元,将维护的全局最大版本号返回给所述数据库服务器。
本申请实施例中,通过设置一个由多个(即至少两个)用于维护全局最大版本号的数据库服务器组成的版本号服务器组,所述多个为远小于所有数据库服务器的个数。在处理事务的数据库获取全局最大版本号时,由于存在多个版本号服务器,所有可以避免使用中心节点时发生中心节点不可用所造成无法获取全局最大版本号的问题。而且,由于多个版本号服务器远小于所有数据库服务器的个数,所以也可以避免了向所有数据库服务器获取局部最大版本号来确定全局最大版本号所造成效率低的问题;所以本申请实施例中数据库服务器在执行事务中,可以实现兼顾获取全局最大版本号的效率以及可靠性,从而提升事务处理性能。
附图说明
图1为本申请一实施例提供的事务处理方法的流程图;
图2为本申请一实施例提供的分布式数据库的架构示意图;
图3为本申请一实施例提供的数据库服务器获取所有版本号服务器的局部最大版本号过程的示意图;
图4为本申请一实施例提供的数据库服务器获取主版本号服务器的全局最大版本号过程的示意图;
图5为本申请一实施例提供的事务处理方法的流程图;
图6为本申请一实施例提供的事务处理方法的流程图;
图7是本申请提供的事务处理装置所在设备的一种硬件结构图;
图8为本申请一实施例提供的事务处理装置的模块示意图;
图9为本申请一实施例提供的事务处理装置的模块示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
相关技术中,数据库服务器在处理事务之前,会给该事务分配一个快照版本号,通常业内称为snapshotversion;所述快照版本号用于表示该事务可以读取到的数据范围(只能读取到比snapshotversion小的版本号所对应的数据)。一般的,所述快照版本号就是所述全局最大版本号,这样事务就可以读取到当前所有的数据。也就是说,数据库服务器在真正处理事务前,需要先获取当前的全局最大版本号,再分配事务对应的快照版本号。
现有技术中,主要存在如下两种维护全局最大版本号(globalcommitedversion)的方式:
第一种方式中,分布式数据库中每个数据库服务器(databaseserver)本地都会维护一个局部最大版本号(local_max_commited_version)。不同数据库服务器之间可以同步局部最大版本号,从而保证每个数据库服务器维护的局部最大版本号都相同,即每个局部最大版本号始终和全局最大版本号一致。具体地,每个数据库服务器更新自身的局部最大版本号时,都需要将更新后的局部最大版本号广播到所有的数据库服务器;任意一个数据库服务器收到广播后,如果发现本地维护的局部最大版本号比广播的小,则也会更新。
对于待处理事务的数据库服务器,其获取全局最大版本号时,直接将本地维护的局部最大版本号作为全局最大版本号即可。
第二种方式中,分布式数据库会将一个数据库服务器作为中心节点,该中心节点用于专门维护全局最大版本号(globalcommitedversion)。
对于待处理事务的数据库服务器,其获取全局最大版本号时,只需向该中心节点获取对应的全局最大版本号即可。
然而,针对第一种方式,虽然可以直接将本地维护的局部最大版本号作为全局最大版本号,但是同步局部最大版本号的效率较低,例如分布式数据库中的数据库服务器越多,则广播所需时间也越多;而且,只有在接收到所有数据库服务器返回应答后,才可以完成同步。
针对第二种方式,一旦中心节点出现问题导致不可用如发生宕机,那么也将无法获取到全局最大版本号。
综上所述,现有技术中事务处理时,存在获取全局最大版本号的效率较低或者可靠性较差的问题。
为了解决上述问题,请参见图1,为本申请一实施例提供的事务处理方法的流程图,包括以下步骤:
步骤110:数据库服务器针对待处理的事务,向版本号服务器组发送全局最大版本号的获取请求。
如前所述数据库服务器在处理所述待处理的事务之前,需要给所述待处理的事务分配一个快照版本号(snapshotversion),而所述快照版本号是基于分布式数据库中维护的全局最大版本号(globalcommitedversion)确定的。也就是说,所述数据库服务器在处理待处理的事务之前,还需要获取全局最大版本号。
本实施例中,请结合图2所示的分布式数据库的架构示意图,所述分布式数据库中可以由至少两个数据库服务器(databaseserver)组成,每个数据库服务器都可以用于处理事务。如图2所示,可以将至少两个的数据库服务器组成一个用于维护全局最大版本号的版本号服务器组。如此,在某个数据库服务器需要处理事务时,可以向所述版本号服务器组发送全局版本号的获取请求。
为了便于区别,本文中将所述版本号服务器组中的数据库服务器称之为版本号服务器。值得一提的是,所述版本号服务器仅是逻辑意义上的服务器,其本质可以是数据库服务器。
在一个实施例中,所述步骤110向版本号服务器组发送全局最大版本号的获取请求,具体可以包括:
向版本号服务器组中所有版本号服务器广播全局最大版本号的获取请求。
在本实施例中,所述版本号服务器组中的每一个版本号服务器中都可以维护有一个局部最大版本号(local_max_commited_version)。
一般的,所述局部最大版本号可以是一个64位的整数,可以表示为以纳秒或微妙为单位的unix时间戳。版本号服务器维护该局部最大版本号,可以是记录在内存中,并且持久化数据。
值得一提的是,如果不进行持久化,版本号服务器每次重启之后,还需要同步误差:即需要等待一个时钟误差(clock_diff_upper_limit),所述时钟误差表示不同版本号服务器之间的时钟误差上限;然后再把此时的unix时间戳设置为局部最大版本号。
本实施例中,版本号服务器可以提供一个用于获取的rpc(remoteprocedurecallprotocol,远程过程调用协议)接口:获取接口get_version()。所述数据库服务器可以通过get_version()获取版本号服务器的局部最大版本号。
在另一个实施例中,在所述版本号服务器组中,可以将一个版本号服务器作为主版本号服务器,其它的版本号服务器作为备份版本号服务器。
如此,所述步骤110向版本号服务器组发送全局最大版本号的获取请求,具体可以包括:
向版本号服务器组中的主版本号服务器发送全局最大版本号的获取请求。
在本实施例中,所述主版本号服务器维护有一个全局最大版本号。
一般的,所述全局最大版本号可以是一个64位的整数,可以表示为以纳秒或微妙为单位的unix时间戳。所述主版本号服务器维护该全局最大版本号,可以是记录在内存中,并且持久化数据。
值得一提的是,如果不进行持久化,版本号服务器每次重启之后,还需要同步误差:即需要等待一个时钟误差(clock_diff_upper_limit),所述时钟误差表示不同版本号服务器之间的时钟误差上限;然后再把此时的unix时间戳设置为全局最大版本号。
本实施例中,主版本号服务器可以提供一个用于获取的rpc(remoteprocedurecallprotocol,远程过程调用协议)接口:
获取接口get_version():数据库服务器可以通过广播get_version()获取主版本号服务器的局部最大版本。
值得一提的是,如果版本号服务器不是主版本号服务器,则其收到获取请求或者更新请求后,还可以返回一个错误码;而数据库服务器收到错误码后可以重新向主版本号服务器发送请求。如此,可以确保数据库服务器始终是向主版本号服务器发送请求的。
步骤120:版本号服务器组接收数据库服务器发送的全局最大版本号的获取请求。
步骤121:版本号服务器组将维护的全局最大版本号返回给所述数据库服务器。
本实施例中,如果步骤120中,版本号服务器组中的各个版本号服务器都接收到了数据库服务器广播的全局最大版本号的获取请求;
则,所述步骤121,具体可以包括:
版本号服务器组将所有版本号服务器维护的局部最大版本号返回给所述数据库服务器。
如果步骤120中,版本号服务器组中的主版本号服务器接收到了数据库服务器广播的全局最大版本号的获取请求;
则,所述步骤121,具体可以包括:
将主版本号服务器维护的全局最大版本号返回给所述数据库服务器。
步骤130:所述数据库服务器在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号。
针对步骤110中,向版本号服务器组中所有版本号服务器广播全局最大版本号的获取请求;
则所述步骤130,具体可以包括:
在预设的等待时长内,判断返回的应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述应答报文携带有版本号服务器的局部最大版本号;
若是,将最大的局部最大版本号确定为全局最大版本号。
本实施例中,如前所述,数据库服务器向所有的版本号服务器广播了get_version()请求之后,然后可以等待各个版本号服务器的应答。在返回的应答报文数量与所有版本号服务器数量的比值到达预设比例之后,所述数据库服务器可以从这些应答报文携带的局部最大版本号中选取一个最大值,这个最大值就是全局最大版本号globalcommitedversion。需要说明的是,如果在返回的应答报文数量与所有版本号服务器数量的比值没有到达预设比例的情况下,那么这次获取请求就失败了,该数据库服务器可以再次获取。
所述等待时长可以是人为设置的一个经验值。例如30秒。
所述预设比例可以是人为设置的一个经验值。通常,可以设置为1/2,即判断返回的应答报文数量与所有版本号服务器数量的比值是否到达1/2。
如图3所示数据库服务器获取所有版本号服务器的局部最大版本号过程的示意图。版本号服务器组包含3个版本号服务器;
t1时刻,数据库服务器向所有3个版号服务器广播get_version()请求;
在预设的等待时长内,t2时候收到版本号服务器1的应答,该应答报文携带局部最大版本号v1;
t3时刻收到版本号服务器2的应答,该应答报文携带局部最大版本号v2;
由于t3时刻已经收到超过一半的版本号服务器的应答,所以可以从这两个应答中选取值大的局部最大版本号,即max(v1,v2)作为全局最大版本号。
针对步骤110中,向版本号服务器组中的主版本号服务器发送全局最大版本号的获取请求。
所述步骤130,具体可以包括:
获取所述应答报文中携带的全局最大版本号。
如图4所示数据库服务器获取主版本号服务器的全局最大版本号过程的示意图。版本号服务器组包含2个版本号服务器,版本号服务器1是主版本号服务器,版本号服务器2是备用版本号服务器;
t1时刻,数据库服务器向版本号服务器1发送get_version()请求;
t2时刻,收到了版本号服务器1的应答,该应答报文携带全局最大版本号;
则,数据库服务器就可以获取该应答携带的全局最大版本号。
值得一提的是,如果版本号服务器1在t2时刻之后宕机或网络中断变得不可用了;
t3时刻,数据库服务器依然向版本号服务器1请求发送get_version()请求,但版本号服务器1已经宕机,所以这次请求失败了;
然而很快版本号服务器2被选举为新的主版本号服务器;
所以,在t4时刻,数据库服务器可以把请求发给新的主版本号服务器,这次请求可以成功。从该例子可以得出只有在版本号服务器1不可用到版本号服务器2上任之间的这段时间数据库服务器的请求才可能会失败;而这段时间是很短的,所以该版本号服务器组可靠性较高。
步骤131:所述数据库服务器指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
本实施例中,数据库服务器获取到全局最大版本号之后,可以指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
本申请实施例中,通过设置一个由多个用于维护全局最大版本号的数据库服务器组成的版本号服务器组,所述多个为远小于所有数据库服务器的个数。在处理事务的数据库获取全局最大版本号时,由于存在多个版本号服务器,所有可以避免使用中心节点时发生中心节点不可用所造成无法获取全局最大版本号的问题。而且,由于多个版本号服务器远小于所有数据库服务器的个数,所以也可以避免了向所有数据库服务器获取局部最大版本号来确定全局最大版本号所造成效率低的问题;所以本申请实施例中数据库服务器在执行事务中,可以实现兼顾获取全局最大版本号的效率以及可靠性,从而提升事务处理性能。
在实际应用中,数据库服务器在执行完事务处理后,如果该事务需要修改数据库中的数据(例如新增数据),则还需要提交该事务。此时,所述数据库服务器还需要分配一个事务版本号,通常业内称为commitversion。一般的,所述事务版本号需要比全局最大版本号大;在分布式数据库中只有分配了事务版本号的事务才可以被提交。
如图1所示,在所述步骤131之后,所述方法还可以包括:
步骤140:在所述事务执行完毕后,所述数据库服务器给所述事务分配一个比所述全局最大版本号大的事务版本号。
本实施例中,数据库服务器可以在所述全局最大版本号的基础上加1得到事务版本号的。
步骤141:所述数据库服务器向所述版本号服务器组发送全局最大版本号的更新请求。
本实施例中,所述更新请求中携带有所述事务版本号,并用于请求将全局最大版本号更新为所述事务版本号。
与数据库服务器向所述版本号服务器组发送获取请求类似的:
所述步骤141,具体可以包括:
向所述版本号服务器组中所有版本号服务器广播全局最大版本号的更新请求。
本实施例中,所述版本号服务器组中的版本号服务器还可以提供一个用于更新的rpc接口:更新接口update_version(cv)。数据库服务器可以通过update_version(cv)请求获取所有版本号服务器更新维护的全局最大版本号。其中,cv为更新请求中携带的事务版本号。
与之对应的,各个版本号服务器处理该更新请求的过程如下a1-a3所示:
a1:各个版本号服务器接收数据库服务器广播的更新请求;其中,所述更新请求中携带有所述事务版本号,并用于请求将全局最大版本号更新为所述事务版本号;
a2:各个版本号服务器判断所述事务版本号是否大于其维护的局部最大版本号;
a3:若是,则将所述事务版本号确定为其新的局部最大版本号。
本实施例中,如果事务版本号大于版本号服务器维护的局部最大版本号,则需要将所述事务版本号确定为新的局部最大版本号;反之,如果事务版本号小于等于版本号服务器维护的局部最大版本号,则不更新。
与前述版本号服务器组中,可以将一个版本号服务器作为主版本号服务器,其它的版本号服务器作为备份版本号服务器的实施例相对应的,所述步骤141,具体可以包括:
向所述版本号服务器组中主版本号服务器发送全局最大版本号的更新请求。
本实施例中,所述版本号服务器组中的版本号服务器还可以提供一个用于更新的rpc接口:更新接口update_version(cv)。数据库服务器可以通过update_version(cv)请求主版本号服务器更新维护的全局最大版本号。其中,cv为更新请求中携带的事务版本号。
与之对应的,主版本号服务器处理该更新请求的过程如下b1-b3所示:
b1:所述主版本号服务器接收所述数据库服务器发送的更新请求,该更新请求中携带有事务版本号;
b2:所述主版本号服务器判断所述事务版本号是否大于其维护的全局最大版本号;
b3:若是,所述主版本号服务器将所述事务版本号确定为新的全局最大版本号。
本实施例中,如果事务版本号大于主版本号服务器维护的全局最大版本号,则需要将所述事务版本号确定为新的全局最大版本号;反之,如果事务版本号小于等于主版本号服务器维护的全局最大版本号,则不更新。
步骤150:所述数据库服务器提交所述执行完毕的事务。
本实施例中,所述步骤150可以是在所述步骤141之后执行的。也就是说,在所述数据库服务器向所述版本号服务器组发送全局最大版本号的更新请求之后,就可以提交所述执行完毕的事务。
通过本实施例,数据库服务可以实现对事务的提交。
在实际应用中,事务处理到事务提交之间可能经过了较长时间,例如前一天处理事务,一天后才需要事务提交;那么,数据库服务器获取到的全局最大版本号还是前一天处理事务之前的,而由于分布式数据库支持并发事务,在这一天中真是的全局最大版本号通常已经更新过了;这样,基于过时的全局最大版本号分配的事务版本号时,很有可能比真正的全局最大版本号小。
为了解决这一问题,在本申请的又一个实施例中,所述步骤140,具体包括:
在所述事务执行完毕后,再次向所述版本号服务器组获取全局最大版本号;
给所述事务分配一个比所述再次获取到的全局最大版本号大的事务版本号。
本实施例中,再次向所述版本号服务器组获取全局最大版本号,与上述步骤110相同,此处不再赘述。
通过本实施例,在事务提交时,通过获取最新的全局最大版本号,保证分配的事务版本号必然大于真正的全局最大版本号。
在本申请的又一个实施例中,版本号服务器在接收到数据库服务器发送的更新请求之后,还可以应答数据库服务器,从而通知所述数据库服务器接收到了其更新请求。
具体地,在a1之后,还包括:
在接收数据库服务器广播的更新请求的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示收到该更新请求。
具体地,在b1之后,还包括:
所述主版本号服务器接收所述数据库服务器发送的更新请求的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
相对应的,所述步骤150,具体可以包括:
在预设的第二等待时长内,判断返回的第二应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述第二应答报文表示版本号服务器收到该更新请求。
若是,提交所述执行完毕的事务。
本实施例中,所述第二等待时长可以是人为设置的一个经验值。值得一提的是,所述第二等待时长还可以是与上述等待时长相等。
通过本实施例,与原步骤150不同之处在于,数据库服务器只有在取得了超过预设比例的版本号服务器应答后,才可以提交事务。
在本申请的一个具体地实施例中,针对向所述版本号服务器组中主版本号服务器发送全局最大版本号的更新请求。
相应地,所述步骤150,具体可以包括:
在接收到所述主版本号服务器返回第二应答报文后,提交所述执行完毕的事务。
通过本实施例,与原步骤150不同之处在于,数据库服务器只有在取得了主版本号服务器应答后,才可以提交事务。
以下结合图5介绍本申请以分布式数据库的数据库服务器为主体的方法实施例,该实施例可以对应图1:
步骤210:针对待处理的事务,向版本号服务器组发送全局最大版本号的获取请求;其中,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成;
步骤220:在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号;
步骤230:指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
与上述步骤110相同的,所述步骤210,具体包括:
针对待处理的事务,向版本号服务器组中的主版本号服务器发送全局最大版本号的获取请求;
相对应的,所述步骤220中基于所述应答报文获取全局最大版本号,具体包括:
获取所述应答报文中携带的全局最大版本号。
与上述步骤110相同的,所述步骤210,具体包括:
向版本号服务器组中所有版本号服务器广播全局最大版本号的获取请求;
相对应的,所述步骤220中基于所述应答报文获取全局最大版本号,具体包括:
在预设的等待时长内,判断返回的应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述应答报文携带有版本号服务器的局部最大版本号;
若是,将最大的局部最大版本号确定为全局最大版本号。
如图5所示在所述步骤230之后,还可以包括步骤240、250和260,该实施例可以对应图1所述实施例中步骤140、141和150。
步骤240:在所述事务执行完毕后,给所述事务分配一个比所述全局最大版本号大的事务版本号;
步骤250:向所述版本号服务器组发送全局最大版本号的更新请求;所述更新请求中携带有所述事务版本号,并用于请求将全局最大版本号更新为所述事务版本号;
步骤260:提交所述执行完毕的事务。
与上述步骤140的一个具体地实施例相同的,所述240,具体可以包括:
在所述事务执行完毕后,再次向所述版本号服务器组获取全局最大版本号;
给所述事务分配一个比所述再次获取到的全局最大版本号大的事务版本号。
与上述步骤141的一个具体地实施例相同的,所述步骤250,具体包括:
向所述版本号服务器组中主版本号服务器发送全局最大版本号的更新请求。
而所述步骤260,具体包括:
在接收到所述主版本号服务器返回第二应答报文后,提交所述执行完毕的事务;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
与上述步骤141的一个具体地实施例相同的,所述步骤250,具体包括:
向所述版本号服务器组中所有版本号服务器广播全局最大版本号的更新请求。
而所述步骤260,具体包括:
在预设的第二等待时长内,判断返回的第二应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述第二应答报文表示版本号服务器收到该更新请求。
以下结合图6介绍本申请以分布式数据库的版本号服务器组为主体的方法实施例,该实施例可以对应图1:
步骤310:接收到数据库服务器发送的全局最大版本号的获取请求。
步骤320:将维护的全局最大版本号返回给所述数据库服务器。
具体地,所述步骤320,可以包括:
将主版本号服务器维护的全局最大版本号返回给所述数据库服务器。
在另一个实施例中,所述将主版本号服务器维护的全局最大版本号返回给所述数据库服务器,具体包括:
在主版本服务器不可用的情况下,从所述版本号服务器组中选取一个备用版本号服务器;
将所述备用版本号服务器维护的全局最大版本号返回给所述数据库服务器。
具体地,在步骤320之后,所述方法还包括:
c1:所述主版本号服务器接收所述数据库服务器发送的更新请求,该更新请求中携带有事务版本号;
c2所述主版本号服务器判断所述事务版本号是否大于其维护的全局最大版本号;
c3:若是,所述主版本号服务器将所述事务版本号确定为新的全局最大版本号。
所述c1-c3与前述b1-b3相同,此处不再赘述。
在c1之后,所述方法还包括:
所述主版本号服务器接收所述数据库服务器发送的更新请求的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
具体地,所述步骤320,可以包括:
将所有版本号服务器维护的局部最大版本号返回给所述数据库服务器。
具体地,在步骤320之后,所述方法还包括:
d1:各个版本号服务器接收数据库服务器广播的更新请求,该更新请求中携带有事务版本号;
d2:各个版本号服务器判断所述事务版本号是否大于其维护的局部最大版本号;
d3:若是,则将所述事务版本号确定为其新的局部最大版本号。
所述d1-d3与前述a1-a3相同,此处不再赘述。
在d1之后,所述方法还包括:
在接收到数据库服务器广播的更新请求的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示收到该更新请求。
与前述事务处理方法实施例相对应,本申请还提供了一种事务处理装置的实施例。
本申请事务处理装置的实施例可以分别应用在分布式数据库。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本申请事务处理装置所在设备的一种硬件结构图,除了图7所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常根据该事务处理的实际功能,还可以包括其他硬件,对此不再赘述。
参见图8,为本申请一实施例提供的事务处理装置的模块图,该实施例从分布式数据库中的数据库服务器侧进行描述,所述装置包括:发送单元410、获取单元420和执行单元430。
其中,发送单元410,针对待处理的事务,向版本号服务器组发送全局最大版本号的获取请求;其中,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成;
获取单元420,在接收到版本号服务器组返回的应答报文后,基于所述应答报文获取全局最大版本号;
执行单元430,指定所获取的全局最大版本号为所述待处理的事务的快照版本号,从而执行所述待处理的事务。
在一个可选的实现方式中:
所述发送单元410,具体包括:
发送子单元,向版本号服务器组中的主版本号服务器发送全局最大版本号的获取请求;
相应地,所述获取单元420,具体包括:
获取子单元,在接收到版本号服务器组返回的应答报文后,获取所述应答报文中携带的全局最大版本号。
在一个可选的实现方式中:
所述发送单元410,具体包括:
发送子单元,向版本号服务器组中所有版本号服务器广播全局最大版本号的获取请求;
相应地,所述获取单元420,具体包括:
判断子单元,在预设的等待时长内,判断返回的应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述应答报文携带有版本号服务器的局部最大版本号;
确定子单元,在获取到预设比例的版本号服务器返回的应答报文的情况下,将最大的局部最大版本号确定为全局最大版本号。
在一个可选的实现方式中:
所述装置还包括:
分配单元,在所述事务执行完毕后,给所述事务分配一个比所述全局最大版本号大的事务版本号;
更新单元,向所述版本号服务器组发送全局最大版本号的更新请求;所述更新请求中携带有所述事务版本号,并用于请求将全局最大版本号更新为所述事务版本号;
提交单元,提交所述执行完毕的事务。
在一个可选的实现方式中:
所述分配单元,具体包括:
发送子单元,在所述事务执行完毕后,再次向所述版本号服务器组获取全局最大版本号;
分配子单元,给所述事务分配一个比所述再次获取到的全局最大版本号大的事务版本号。
在一个可选的实现方式中:
更新单元,具体包括:
更新子单元,向所述版本号服务器组中主版本号服务器发送全局最大版本号的更新请求。
在一个可选的实现方式中:
所述提交单元,具体包括:
提交子单元,在接收到所述主版本号服务器返回第二应答报文后,提交所述执行完毕的事务;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
在一个可选的实现方式中:
更新单元,具体包括:
更新子单元,向所述版本号服务器组中所有版本号服务器广播全局最大版本号的更新请求。
在一个可选的实现方式中:
所述提交单元,具体包括:
判断子单元,在预设的第二等待时长内,判断返回的第二应答报文数量与所有版本号服务器数量的比值是否到达预设比例;其中,所述第二应答报文表示版本号服务器收到该更新请求。
提交子单元,在获取到预设比例的版本号服务器返回的第二应答报文的情况下,提交所述执行完毕的事务。
参见图9,为本申请一实施例提供的事务处理装置的模块图,该实施例从分布式数据库中的版本号服务器组侧进行描述,所述版本号服务器组由至少两个用于维护全局最大版本号的数据库服务器组成,所述装置包括:接收单元510和返回单元520。
其中,接收单元510,接收到数据库服务器发送的全局最大版本号的获取请求;
返回单元520,将维护的全局最大版本号返回给所述数据库服务器。
在一个可选的实现方式中:
所述返回单元520,具体包括:
返回子单元,将主版本号服务器维护的全局最大版本号返回给所述数据库服务器。
在一个可选的实现方式中:
所述返回子单元,具体包括:
选取子单元,在主版本服务器不可用的情况下,从所述版本号服务器组中选取一个备用版本号服务器;
第二返回子单元,将所述备用版本号服务器维护的全局最大版本号返回给所述数据库服务器。
在一个可选的实现方式中:
所述装置还包括:
接收更新请求单元,所述主版本号服务器接收所述数据库服务器发送的更新请求,该更新请求中携带有事务版本号;
判断单元,所述主版本号服务器判断所述事务版本号是否大于其维护的全局最大版本号;
更新单元,在所述事务版本号大于其维护的全局最大版本号的情况下,所述主版本号服务器将所述事务版本号确定为新的全局最大版本号。
在一个可选的实现方式中:
在所述更新单元之后,所述装置还包括:
应答单元,所述主版本号服务器向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示所述主版本号服务器收到该更新请求。
在一个可选的实现方式中:
所述返回单元,具体包括:
返回子单元,将所有版本号服务器维护的局部最大版本号返回给所述数据库服务器。
在一个可选的实现方式中:
所述装置还包括:
接收更新请求单元,各个版本号服务器接收数据库服务器广播的更新请求,该更新请求中携带有事务版本号;
判断单元,各个版本号服务器判断所述事务版本号是否大于其维护的局部最大版本号;
更新单元,在所述事务版本号大于其维护的全局最大版本号的情况下,将所述事务版本号确定为其新的局部最大版本号。
在一个可选的实现方式中:
在所述更新单元之后,所述装置还包括:
应答单元,在所述事务版本号大于或者不大于其维护的局部最大版本号的情况下,向所述数据库服务器返回第二应答报文;其中,所述第二应答报文表示收到该更新请求。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。