数据库操作方法及装置与流程

文档序号:12612239阅读:160来源:国知局
数据库操作方法及装置与流程

本申请涉及数据库技术领域,尤其涉及一种数据库操作方法及装置。



背景技术:

单机数据库能够方便的满足用户对于关系查询类的需求,是目前业务应用中最常使用的数据库类型。然而,对于很多应用而言,单机数据库最终都会碰到单机性能上的瓶颈,例如在每秒事务处理量(Transaction Per Second,TPS)、每秒查询量(Query Per Second,QPS)、内存容量、磁盘容量等一系列系统资源上会碰到各类限制。分布式数据库就是为解决这个问题而诞生的,将原来单机数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。

在分布式数据库系统中,当运行一个涉及多个分库的事务时,一个分库可能需要从别的分库上获取数据。由于在分布式数据库系统中各分库是异步运行的,运行速度有快有慢,所以当一个运行慢的分库向一个运行快的分库获取所需数据时,为了保证运行慢的分库能够从运行快的分库上获取到所需的数据,一般会采用多版本并发控制(Multi-Version Concurrency Control,MVCC)机制。对于同一数据,MVCC机制会针对每批涉及该数据的事务分别在分库上记录相应版本的数据,从而让运行慢的分库能够从运行快的分库上读取相应版本的数据。

但是,MVCC机制会增加数据库的存储开销。举例说明,在分布式数据库系统中,处理速度为每秒钟100批事务,假设某个分库因为故障延误了10分钟,则其他分库上需要保存10×60×100=60000个数据版本,这会占用分库上很大磁盘容量。



技术实现要素:

本申请的多个方面提供一种数据库操作方法及装置,用以节约多版本并发控制的存储开销,减少数据库所需的磁盘容量。

本申请的一方面,提供一种数据库操作方法,包括:

获取对待执行事务进行预测执行时产生的预测执行数据,所述预测执行数据包括所述待执行事务所需的目标数据的主键值以及所述目标数据在预测执行时的取值;

根据所述目标数据的主键值,从所述待执行事务对应的目标分库中加载所述目标数据的当前取值;

在所述目标数据的当前取值与所述目标数据在预测执行时的取值不相同时,判断所述目标数据的当前取值是否影响所述待执行事务的业务逻辑;

若所述目标数据的当前取值不影响所述待执行事务的业务逻辑,将所述目标数据的当前取值作为所述待执行事务对应的版本数据记录在所述目标分库上。

本申请的另一方面,提供一种数据库操作装置,包括:

获取模块,用于获取对待执行事务进行预测执行时产生的预测执行数据,所述预测执行数据包括所述待执行事务所需的目标数据的主键值以及所述目标数据在预测执行时的取值;

加载模块,用于根据所述目标数据的主键值,从所述待执行事务对应的目标分库中加载所述目标数据的当前取值;

判断模块,用于在所述目标数据的当前取值与所述目标数据在预测执行时的取值不相同时,判断所述目标数据的当前取值是否影响所述待执行事务的业务逻辑;

版本数据处理模块,用于在所述目标数据的当前取值不影响所述待执行事务的业务逻辑时,将所述目标数据的当前取值作为所述待执行事务对应的 版本数据记录在所述目标分库上。

在本申请中,预先对待执行事务进行预测执行,预先获得待执行事务所需的目标数据的主键值以及该目标数据在预测执行时的取值,在待执行事务的实际执行过程中,将目标数据在预测执行时的取值与目标数据的当前取值进行比较,只有在目标数据存在冲突但目标数据的当前取值又不影响待执行事务的业务逻辑的情况下,才将目标数据的当前取值作为待执行事务对应的版本数据记录在分库上。本申请一方面实现了记录多版本数据的目的,有利于解决分布式数据库系统中分库之间相互读取数据时无法读取相应版本数据的问题,另一方面,只有在数据存在冲突且还要正常执行待执行事务的情况下才记录版本数据,有利于减少所记录的数据量,节约存储开销,减少数据库所需的磁盘容量。

【附图说明】

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

图1为现有技术中数据库应用系统的部署图;

图2为本申请一实施例提供的数据库应用系统的部署图;

图3为本申请一实施例提供的数据库操作方法的流程示意图;

图4为本申请另一实施例提供的数据库操作装置的结构示意图;

图5为本申请又一实施例提供的数据库操作装置的结构示意图。

【具体实施方式】

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申 请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为现有技术中一种数据库应用系统的部署图。如图1所示,该系统包括:应用服务器10和至少两个数据库20。至少两个数据库20构成一分布式数据库系统,每个数据库20作为该分布式数据库系统中的一个分库。在分布式数据库系统中,当运行一个涉及多个分库的事务时,一个分库可能需要从别的分库上获取数据。由于在分布式数据库系统中各分库是异步运行的,运行速度有快有慢,所以当一个运行慢的分库向一个运行快的分库获取所需数据时,为了保证运行慢的分库能够从运行快的分库上获取到所需的数据,一般会采用MVCC机制,即对于同一数据,MVCC机制会针对每批涉及该数据的事务分别在分库上记录相应版本的数据,从而让运行慢的分库能够从运行快的分库上读取相应版本的数据。

但是,MVCC机制会增加数据库的存储开销,记录的多版本数据会占用分库上很大磁盘容量。

针对现有分布式数据库存在的缺陷,本申请提供一种数据库操作方法,主要原理是:预先对待执行事务进行预测执行,预先获得待执行事务所需的目标数据的主键值以及该目标数据在预测执行时的取值,在待执行事务的实际执行过程中,将目标数据在预测执行时的取值与目标数据的当前取值进行比较,只有在目标数据存在冲突但其当前取值又不影响待执行事务的业务逻辑的情况下,才将目标数据的当前取值作为待执行事务对应的版本数据记录在分库上;而在其它情况下,则禁止在分库上为待执行事务记录相应的版本数据。这样不仅实现了记录多版本数据的目的,有利于解决分布式数据库系统中分库之间相互读取数据时无法读取相应版本数据的问题,而且只有在数据存在冲突且不影响待执行事务的业务逻辑的情况下才记录版本数据,减少所记录的版本数据,节约存储开销,有利于减少数据库所需的磁盘容量。

为了实现对待执行事务进行预测执行,本申请提供一种新的数据库应用系统,如图2所示。该系统在应用服务器10和至少两个数据库20之间增加数据库预测执行装置30。数据库预测执行装置30用以预先对待执行事务进行预测执行,提前获得该执行事务中需要实际执行的数据库操作指令,实现执行路径的预测,预先获得待执行事务所需的目标数据的主键值以及该目标数据在预测执行时的取值等预测执行数据。

另外,本系统中的数据库预测执行装置30不仅可以对待执行事务进行预测执行,而且可以根据预测执行得到的数据库操作指令和预测执行数据控制数据库20实际执行待执行事务。在图1所示系统中,当需要以事务方式对数据库20进行访问时,应用服务器10执行事务逻辑,依次将事务中的数据库操作指令作用于数据库20上,这种事务执行方式的效率较低,事务吞吐量较低。与图1所示系统中的数据库执行方式相比,图2所示系统提供的数据库执行方式有利于提高事务执行效率,增大事务吞吐量。事务吞吐量是指单位时间内处理事务的数量。

值得说明的是,数据库预测执行装置30实际上是一种逻辑处理装置,其可以单独部署,位于应用服务器10和数据库20之间,也可以部署于应用服务器10一端实现,或者也可以部署于数据库20一端实现。

由于本申请提供的数据库操作方法需要基于对待执行事务进行预测执行产生的预测执行数据,因此在介绍本申请提供的数据库操作方法之前,首先对数据库预测执行装置对待执行事务进行预测执行的过程进行详细介绍。

数据库预测执行装置对待执行事务进行预测执行的过程具体如下:

数据库预测执行装置在应用服务器执行待执行事务的过程中,依次获取应用服务器执行到的待执行事务中的数据库操作指令;对所获取的数据库操作指令进行预测执行,将预测执行结果返回给应用服务器以供应用服务器确定下一个需要执行的数据库操作指令,并在本地记录数据库操作指令以及预测执行产生的预测执行数据。

首先说明,本实施例中的待执行事务主要包括用于对数据库进行操作的 操作指令,除数据库操作指令之外还包括一些用于控制目标事务执行状态的控制指令,例如事务开始指令、事务提交指令、事务回滚指令等。这些指令实际上是由数据库语言编写的语句。根据数据库语言的不同,这些指令可以是不同语言编写的语句。举例说明,若采用SQL,则上述数据库操作指令和控制指令实际上是一系列的SQL语句。

在上述预测执行过程中,应用服务器控制整个待执行事务的执行逻辑,可以按照现有方式执行待执行事务。数据库预测执行装置在应用服务器执行待执行事务的过程中,依次获取应用服务器执行到的待执行事务中的数据库操作指令。

在一可选实施方式中,应用服务器按照现有方式向待执行事务对应的目标分库发送数据库操作指令,以实现对目标分库的访问。数据库预测执行装置可以对应用服务器与目标分库之间的通信进行监控,以拦截应用服务器发往目标分库的数据库操作指令。为便于描述和区分,将本实施例涉及的待执行事务对应的分库称为目标分库,该目标分库是分布式数据库系统中的一个数据库。

在另一可选实施方式中,对应用服务器的处理逻辑进行稍微修改,将原来向待执行事务对应的目标分库发送数据库操作指令的逻辑改为向数据库预测执行装置发送。基于此,数据库预测执行装置可以接收应用服务器主动下发的数据库操作指令。

在此说明,若待执行事务是显式事务,则待执行事务中的首个指令是事务开始指令,如开始事务(begin transaction),基于此,数据库预测执行装置在获取应用服务器执行到的数据库操作指令之前,可以拦截应用服务器发往目标分库的待执行事务中的事务开始指令,根据该事务开始指令,获知需要执行待执行事务。或者,数据库预测执行装置在获取应用服务器执行到的数据库操作指令之前,可以接收应用服务器主动下发的待执行事务中的事务开始指令,根据该事务开始指令,获知需要执行待执行事务。若待执行事务是隐式事务,则待执行事务的首个指令就是数据库操作指令,不包括获取事务 开始指令的步骤。

数据库预测执行装置在获取应用服务器执行到的数据库操作指令后,对获取到的数据库操作指令进行预测执行,将预测执行结果返回给应用服务器,以供应用服务器确定下一个需要执行的数据库操作指令。其中,预测执行结果决定着待执行事务的执行路径,这里的执行路径是指数据库操作指令之间的跳转逻辑。通过将预测执行结果返回给应用服务器,从而达到由应用服务器控制整个待执行事务的执行逻辑的目的。

另外,数据库预测执行装置还需要在本地记录所获取到的数据库操作指令,以及记录对该数据库操作指令进行预测执行产生的预测执行数据。所述预测执行数据主要是指对数据库操作指令进行预测执行过程中的一些数据,例如待执行事务所需的目标数据的主键以及该目标数据在预测执行时的取值等。

例如,数据库预测执行装置可以在本地创建内存库,将所获取到的数据库操作指令以及预测执行数据存入内存库中。

其中,在本实施例中,数据库操作指令的主要目的是访问目标分库中的数据,则可以模拟数据库操作指令的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行。基于此,一种对数据库操作指令进行预测执行的方式可以是:在本地创建的内存库中模拟数据库操作指令所需的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行。

进一步,一种在本地创建的内存库中模拟数据库操作指令的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行的实施方式包括:

将获取到的数据库操作指令拆分为一个读指令和一个写指令,将读指令运行于真正的目标分库上,即在目标分库中执行该读指令以获取读数据集(ReadSet),将读数据集存入本地内存库中,以模拟数据库操作指令所需的数据环境。然后,将写指令作用于内存库上,以实现对数据库操作指令的预测执行,即在内存库中执行写指令以修改读数据集,例如对读数据集中的有关数据进行更新或查询处理等。其中,执行写指令以修改读数据集可以产生 结果数据集(affectRowInMemdb),该结果数据集包括预测执行结果。

在上述预测执行过程中,数据库预测执行装置可以在本地记录读指令所读取的读数据集以及执行写指令产生的结果数据集。所述预测执行数据可以包括读数据集和结果数据集,或者也可以包括读数据集和结果数据集中的部分数据,例如能够对在数据库中实际执行待执行事务产生有益效果的一些数据,例如待执行事务所需的目标数据的主键值以及该目标数据在预测执行时刻的取值等。

数据库预测执行装置对依次获取到的数据库操作指令分别执行上述预测操作,获得各数据库操作指令及其对应的预测执行数据存储到内存库中。

基于上述获得的待执行事务的预测执行数据,可以按照以下实施例提供的流程对待执行事务进行实际执行。

图3为本申请一实施例提供的数据库操作方法的流程示意图。如图3所示,该方法包括:

301、获取对待执行事务进行预测执行时产生的预测执行数据,该预测执行数据包括待执行事务所需的目标数据的主键值以及目标数据在预测执行时的取值。

302、根据目标数据的主键值,从待执行事务对应的目标分库中加载目标数据的当前取值。

303、判断目标数据的当前取值与目标数据在预测执行时的取值是否相同;若判断结果为否,即目标数据的当前取值与目标数据在预测执行时的取值不相同,则执行步骤304;若判断结果为是,在可以执行步骤306。

304、判断目标数据的当前取值是否影响待执行事务的业务逻辑;若判断结果为否,即目标数据的当前取值不影响待执行事务的业务逻辑,则执行步骤305;若判断结果为是,则执行步骤306。

305、将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上。

306、禁止将目标数据的当前取值作为待执行事务对应的版本数据记录 在目标分库上。

本实施例的提供的数据库操作方法可由数据库操作装置来执行,该数据库操作装置实际上是一种逻辑处理装置,其可以单独部署,位于应用服务器10和数据库20之间,或者也可以部署于数据库20一端实现,例如可以作为数据库20上的执行进程实现。

另外,本实施例的数据库操作装置与数据库预测执行装置可以作为两个独立装置实现,独立部署,则上述对待执行事务的预测执行过程由数据库预测执行装置实现。或者,本实施例的数据库操作装置与数据库预测执行装置也可以作为一个装置(例如数据库操作装置)实现,这意味着上述对待执行事务的预测执行过程可由数据库操作装置实现。

在一可选实施方式中,数据库预测执行装置还可以在获取到待执行事务中的事务提交指令时,根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的目标分库实际执行待执行事务。值得说明的是,数据库预测执行装置可以向数据库操作装置下发预测执行数据以及数据库操作指令,以指示数据库操作装置在目标分库上实际执行该待执行事务。对数据库操作装置来说,可以接收数据库预测执行装置下发的预测执行数据。另外,数据库操作装置还会接收数据库预测执行装置下发的数据库操作指令,并根据接收到的预测执行数据以及数据库操作指令,在目标分库上实际执行该待执行事务。

在获取预测执行数据之后,数据库操作装置可以根据预测执行数据中待执行事务所需的数据的主键值,从待执行事务对应的目标分库中加载该目标数据的当前取值;然后,将所加载的目标数据的当前取值与预测执行数据中该目标数据在预测执行时的取值进行比较,判断该目标数据的当前取值与该目标数据在预测执行时的取值是否相同。

若上述比较结果为目标数据的当前取值与该目标数据在预测执行时的取值不相同,说明数据出现冲突,于是进一步判断该目标数据的当前取值是否影响待执行事务的业务逻辑,即根据该目标数据的当前取值,该待执行事 务是否可以成功执行。

若上述判断结果为目标数据的当前取值不影响待执行事务的业务逻辑,说明数据虽然存在冲突但不影响待执行事务的正常执行,为了降低事务回滚概率,可以正常执行该待执行事务。但是,由于目标数据不一致,所以可能出现其他分库从目标分库获取目标数据时无法获取相应版本目标数据的问题,为此,本实施例需要为该待执行事务保存相应的版本数据,于是将该目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上,并根据目标数据的当前取值执行待执行事务,并根据待执行事务的执行结果更新目标分库中该目标数据的当前取值。

进一步,若判断出该目标数据的当前取值影响待执行业务的业务逻辑,说明该数据不仅出现冲突而且影响了待执行事务的业务逻辑,这个待执行事务需要回滚,因为该待执行事务需要回滚,所以其他分库在执行到该待执行事务时也要回滚,因此拿到这个待执行事务对应版本数据已经没有意义,显然在目标分库中记录该待执行事务对应的版本数据也就毫无意义。因此,数据库操作装置在判断出数据出现冲突且其当前取值影响待执行业务的业务逻辑时,禁止将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上,节约了存储开销,有利于减少目标分库所需的磁盘容量。另外,数据库操作装置还需要将该待执行事务进行回滚。再者,由于不需要向目标分库中写入待执行事务对应的版本数据,并且因为未写入所以也不需要执行相应的删除操作,减少了与目标分库之间的交互操作,有利于提高待执行事务的处理速度。

进一步,在上述判断过程中,若判断出目标数据的当前取值与目标数据在预测执行时的取值相同,则由于在预测执行时已经对该数据进行了记录或保存,当待执行事务出现错误时,可以通过预测执行时记录的数据进行恢复,所以可以不用在目标分库上再次对该数据进行记录。因此,数据库操作装置在判断出目标数据的当前取值与目标数据在预测执行时的取值相同时,禁止将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上, 节约了存储开销,有利于减少目标分库所需的磁盘容量。另外,数据库操作装置还需要根据目标数据的当前取值执行待执行事务,并根据待执行事务的执行结果更新目标分库中目标数据的当前取值。再者,由于只需对目标分库中目标数据的当前取值进行更新,而不需要向目标分库中写入待执行事务对应的版本数据,并且因为未写入所以也不需要执行相应的删除操作,减少了与目标分库之间的交互操作,有利于提高待执行事务的处理速度。

在上述需要根据目标数据的当前取值执行待执行事务的情况下,数据库操作装置还可以获取对待执行事务进行预测执行时确定的待执行事务中需要实际执行的数据库操作指令。例如,数据库操作装置可以接收数据库预测执行装置下发的上述待执行事务中需要实际执行的数据库操作指令。数据库操作装置具体根据待执行事务中需要实际执行的数据库操作指令,对目标数据的当前取值进行处理,以获得待执行事务的执行结果。这里对目标数据的当前取值进行处理的方式视待执行事务的业务逻辑而定,例如在入账情况下,可以是将该目标数据的当前取值增大50、30或100等;又例如,在减库存情况下,可以将目标数据的当前取值减少1、2或10等,等等。

以待执行事务为减库存事务为例,在一种假设情况中,在减库存事务的预测执行过程中读取到的库存量为10,而在减库存事务的实际执行过程中读取到库存量的当前取值为10,由于库存量并未发生变化,而且该库存量已经在预测执行过程中被记录或保存了,因此在减库存事务的实际执行过程中可以不再为该减库存事务记录相应版本的库存量,从而节约存储开销,减少与目标分库之间的交互操作,提高了事务处理速度。

以待执行事务为减库存事务为例,在一种假设情况中,在减库存事务的预测执行过程中读取到的库存量为10,但在减库存事务的实际执行过程中读取到库存量的当前取值为8。库存量的当前取值(即8)与预测执行时的取值(即10)不相同,于是,进一步判断库存量的当前取值是否影响待执行事务的业务逻辑。一种假设为:待执行事务是购买1件商品,其业务逻辑为在库存量大于或等于1时将库存量减1,则由于库存量的当前取值为8,不影 响该待执行事务的业务逻辑,于是可以将该库存量由8减去1变为7,同时将该库存量8作为该减库存事务的版本数据记录在目标分库中。另一种假设为:待执行事务是购买10件商品,其业务逻辑为在库存量大于或等于10时将库存量减10,则由于库存量的当前取值为8,影响该减库存事务的业务逻辑,这意味着该减库存事务无法成功执行,需要回滚该减库存事务,此时不需要在目标分库上记录该减库存事务对应的版本数据,有利于节约存储开销,减少目标分库所需的磁盘容量,另外,由于不需要向目标分库中写入减库存事务对应的库存量,并且因为未写入所以也不需要执行相应的删除操作,减少了与目标分库之间的交互操作,有利于提高减库存事务的处理速度。

由上述可见,数据库预测执行装置与应用服务器相互配合,在应用服务器执行待执行事务的过程加入预测执行过程,预先获得并记录待执行事务需要执行的全部数据库操作指令以及预测执行数据,为真实执行事务提供了条件,之后在根据记录的数据库操作指令以及预测执行数据实际执行该待执行事务时,可以提前获取有关数据信息并且可以减少指令之间的跳转等,有利于提高执行效率,增大事务吞吐量。

另外,在数据库操作装置执行实际待执行事务的过程中,基于预测执行过程时产生的预测执行数据判断数据是否出现冲突以及是否影响待执行事务的业务逻辑,进而只有在数据存在冲突且还要正常执行待执行事务的情况下才记录版本数据,有利于减少所记录的数据量,节约存储开销,减少数据库所需的磁盘容量。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有 详述的部分,可以参见其他实施例的相关描述。

图4为本申请另一实施例提供的数据库操作装置的结构示意图。如图4所示,该装置包括:获取模块41、加载模块42、判断模块43和版本数据处理模块44。

获取模块41,用于获取对待执行事务进行预测执行时产生的预测执行数据,该预测执行数据包括待执行事务所需的目标数据的主键值以及目标数据在预测执行时的取值。

加载模块42,用于根据获取模块41获取的目标数据的主键值,从待执行事务对应的目标分库中加载目标数据的当前取值。

判断模块43,用于在加载模块42加载的目标数据的当前取值与获取模块41获取的目标数据在预测执行时的取值不相同时,判断目标数据的当前取值是否影响待执行事务的业务逻辑。

版本数据处理模块44,用于在判断模块43判断出目标数据的当前取值不影响待执行事务的业务逻辑时,将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上。

在一可选实施方式中,版本数据处理模块44还用于:

在目标数据的当前取值与目标数据在预测执行时的取值相同时,禁止将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上。

在一可选实施方式中,如图5所示,该数据库操作装置还包括:事务执行模块45。

事务执行模块45,用于在判断模块43判断出目标数据的当前取值不影响待执行事务的业务逻辑时,或者在目标数据的当前取值与目标数据在预测执行时的取值相同时,根据目标数据的当前取值执行待执行事务,并根据待执行事务的执行结果更新目标分库中目标数据的当前取值。

可选的,获取模块41除了用于获取待执行事务的预测执行数据之外,还用于获取对待执行事务进行预测执行时确定的待执行事务中需要实际执行的数据库操作指令。例如,在对待执行事务的预测执行过程由不同于数据库 操作装置的其它装置实现的情况下,获取模块41具体可用于接收对待执行事务进行预测执行的装置下发的预测执行数据以及待执行事务中需要实际执行的数据库操作指令。

基于上述,事务执行模块45具体可用于:根据待执行事务中需要实际执行的数据库操作指令,对目标数据的当前取值进行处理,以获得待执行事务的执行结果。

在一可选实施方式中,版本数据处理模块44还用于:

在判断模块43判断出目标数据的当前取值影响待执行事务的业务逻辑,则禁止将目标数据的当前取值作为待执行事务对应的版本数据记录在目标分库上,并将待执行事务回滚。

在一可选实施方式中,如图5所示,该数据库操作装置还包括:预测执行模块46。

预测执行模块46,用于对待执行事务进行预测执行,以生成预测执行数据。

预测执行模块46具体用于:在应用服务器执行待执行事务的过程中,依次获取应用服务器执行到的待执行事务中的数据库操作指令;对所获取的数据库操作指令进行预测执行,将预测执行结果返回给应用服务器以供应用服务器确定下一个需要执行的数据库操作指令,并在本地记录数据库操作指令以及预测执行产生的预测执行数据。

本实施例提供的数据库操作装置,在执行实际待执行事务的过程中,基于预测执行过程时产生的预测执行数据判断数据是否出现冲突以及是否影响待执行事务的业务逻辑,进而只有在数据存在冲突且还要正常执行待执行事务的情况下才记录版本数据,有利于减少所记录的数据量,节约存储开销,减少数据库所需的磁盘容量。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1