CN106503027B - 数据库操作方法及装置 - Google Patents
数据库操作方法及装置 Download PDFInfo
- Publication number
- CN106503027B CN106503027B CN201510568369.7A CN201510568369A CN106503027B CN 106503027 B CN106503027 B CN 106503027B CN 201510568369 A CN201510568369 A CN 201510568369A CN 106503027 B CN106503027 B CN 106503027B
- Authority
- CN
- China
- Prior art keywords
- database
- database operation
- operation instruction
- instruction
- execution
- 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.)
- Active
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
-
- 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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种数据库操作方法及装置。方法包括:在应用服务器执行目标事务的过程中,依次获取应用服务器执行到的目标事务中的数据库操作指令;对数据库操作指令进行预测执行,将预测执行结果返回给应用服务器以供应用服务器确定下一个需要执行的数据库操作指令,并在本地记录数据库操作指令以及在数据库操作指令属于修改数据库类指令时记录预测执行产生的预测执行数据;当获取到目标事务中的事务提交指令时,根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务。本申请可以提高事务执行效率。
Description
【技术领域】
本申请涉及数据库技术领域,尤其涉及一种数据库操作方法及装置。
【背景技术】
数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。一个事务由一系列数据库操作指令构成,例如结构化查询语言(Structured Query Language,SQL)语句,这些数据库操作指令之间存在切分条件以及跳转等逻辑,意味着在一次执行过程中该事务中可能有部分数据库操作指令被跳过不执行。但在现有技术中,由于无法预先获知事务中需要执行的数据库操作指令,因此只能按照执行逻辑边执行边判断,依次执行事务中的语句,以实现对数据库的操作。这种事务执行方式效率较低,尤其是在事务设置读已提交隔离级别的情况下,其执行效率会更低,事务吞吐量较低。
【发明内容】
本申请的多个方面提供一种数据库操作方法及装置,用以提高事务执行效率并增大事务吞吐量。
本申请的一方面,提供一种数据库操作方法,包括:
在应用服务器执行目标事务的过程中,依次获取所述应用服务器执行到的所述目标事务中的数据库操作指令;
对所述数据库操作指令进行预测执行,将预测执行结果返回给所述应用服务器以供所述应用服务器确定下一个需要执行的数据库操作指令,并在本地记录所述数据库操作指令以及在所述数据库操作指令属于修改数据库类指令时记录所述预测执行产生的预测执行数据;
当获取到所述目标事务中的事务提交指令时,根据本地记录的所述数据库操作指令以及所述预测执行数据,控制所述应用服务器对应的数据库实际执行所述目标事务。
本申请的另一方面,提供一种数据库操作装置,包括:
获取模块,用于在应用服务器执行目标事务的过程中,依次获取所述应用服务器执行到的所述目标事务中的数据库操作指令;
预测执行模块,用于对所述数据库操作指令进行预测执行,将预测执行结果返回给所述应用服务器以供所述应用服务器确定下一个需要执行的数据库操作指令,并在本地记录所述数据库操作指令以及在所述数据库操作指令属于修改数据库类指令时记录所述预测执行产生的预测执行数据;
控制执行模块,用于当获取到所述目标事务中的事务提交指令时,根据本地记录的所述数据库操作指令以及所述预测执行数据,控制所述应用服务器对应的数据库实际执行所述目标事务。
在本申请中,数据库操作装置与应用服务器相互配合,在应用服务器执行目标事务的过程加入预测执行过程,预先获得并记录目标事务需要执行的全部数据库操作指令,并仅针对属于修改数据库类指令的数据库操作指令记录预测执行产生的预测执行数据以适应于读已提交隔离级别,为真实执行事务提供了条件,之后根据记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行该目标事务,有利于提高执行效率,进而增大事务吞吐量。
【附图说明】
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中数据库应用系统的部署图;
图2为本申请一实施例提供的数据库应用系统的部署图;
图3为本申请一实施例提供的数据库操作方法的流程示意图;
图4为本申请一实施例提供的数据库操作装置的结构示意图。
【具体实施方式】
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为现有技术中数据库应用系统的部署图。如图1所示,该系统包括:应用服务器10和数据库20。其中,数据库20可以为一个,也可以为多个。图1中仅示例性的示出一个数据库20。当需要以事务方式对数据库20进行访问时,应用服务器10执行事务逻辑,依次将事务中的数据库操作指令作用于数据库20上。由于无法预先获知事务中需要执行的数据库操作指令,导致事务执行效率较低,尤其是在配置读已提交隔离级别的情况下,其执行效率会更低,事务吞吐量较低。
针对现有技术存在的缺陷,本申请提供一种新的数据库应用系统,如图2所示。该系统在应用服务器10和数据库20之间增加数据库操作装置30。数据库操作装置30用以执行本申请提供的数据库操作方法,在读已提交这一隔离级别下实现一种新的事务执行逻辑,即先对事务进行预测执行,提前获得该事务中需要执行的数据库操作指令,实现执行路径的预测,并且结合读已提交这一隔离级别仅仅针对属于修改数据库类指令的数据库操作指令记录对其进行预测执行所产生的预测执行数据,进而基于预测执行得到的数据库操作指令以及预测执行数据在数据库20上实际执行事务,有利于提高事务执行效率,增大事务吞吐量。事务吞吐量是指单位时间内处理事务的数量。
值得说明的是,数据库操作装置30实际上是一种逻辑处理装置,其可以单独部署,位于应用服务器10和数据库20之间,也可以部署于应用服务器10一端实现,或者也可以部署于数据库20一端实现。
下面实施例将具体说明本申请技术方案的方法流程。
图3为本申请一实施例提供的数据库操作方法的流程示意图。如图3所示,该方法包括:
301、在应用服务器执行目标事务的过程中,依次获取应用服务器执行到的目标事务中的数据库操作指令。
302、对数据库操作指令进行预测执行,将预测执行结果返回给应用服务器以供应用服务器确定下一个需要执行的数据库操作指令,并在本地记录数据库操作指令以及在数据库操作指令属于修改数据库类指令时记录预测执行产生的预测执行数据。
303、当获取到目标事务中的事务提交指令时,根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务。
首先说明,为便于描述,本实施例将应用服务器需要执行的事务称为目标事务。目标事务主要包括用于对数据库进行操作的操作指令,除数据库操作指令之外还包括一些用于控制目标事务执行状态的控制指令,例如事务开始指令、事务提交指令、事务回滚指令等。这些指令实际上是由数据库语言编写的语句。根据数据库语言的不同,这些指令可以是不同语言编写的语句。举例说明,若采用SQL,则上述数据库操作指令和控制指令实际上是一系列的SQL语句。
本实施例提供的方法适用于对隔离级别为读已提交的数据库进行操作。其中,有些数据库默认是读已提交这一隔离级别,例如,Oracle数据库默认是读已提交这一隔离级别的,有些数据库默认不是读已提交这一隔离级别,例如MySQL数据库默认是可重复读这一隔离级别。基于此,在执行本实施例提供的方法之前,可以确定数据库的隔离级别是否是读已提交,若不是,则需要预先配置数据库为读已提交这一隔离级别。例如,可以在应用服务器执行目标事务之前,配置数据库为读已提交这一隔离级别。
在数据库的隔离级别为读已提交的前提下,可以执行本实施例提供的方法以在数据库中执行目标事务。具体流程如下:
应用服务器控制整个目标事务的执行逻辑,可以按照现有方式执行目标事务。数据库操作装置在应用服务器执行目标事务的过程中,依次获取应用服务器执行到的目标事务中的数据库操作指令。
在一可选实施方式中,应用服务器按照现有方式向数据库发送数据库操作指令,以实现对数据库的访问。数据库操作装置可以对应用服务器与数据库之间的通信进行监控,以拦截应用服务器发往数据库的数据库操作指令。
在另一可选实施方式中,对应用服务器的处理逻辑进行稍微修改,将原来向数据库发送数据库操作指令的处理逻辑改为向数据库操作装置发送。基于此,数据库操作装置可以接收应用服务器主动下发的数据库操作指令。
在此说明,若目标事务是显式事务,则目标事务中的首个指令是事务开始指令,如开始事务(begin transaction),基于此,数据库操作装置在获取应用服务器执行到的数据库操作指令之前,可以拦截应用服务器发往数据库的目标事务中的事务开始指令,根据该事务开始指令,获知需要执行目标事务。或者,数据库操作装置在获取应用服务器执行到的数据库操作指令之前,可以接收应用服务器主动下发的目标事务中的事务开始指令,根据该事务开始指令,获知需要执行目标事务。若目标事务是隐式事务,则目标事务的首个指令就是数据库操作指令,不包括获取事务开始指令的步骤。
数据库操作装置在获取应用服务器执行到的数据库操作指令后,对获取到的数据库操作指令进行预测执行,将预测执行结果返回给应用服务器,以供应用服务器确定下一个需要执行的数据库操作指令。其中,预测执行结果决定着目标事务的执行路径,这里的执行路径是指数据库操作指令之间的跳转逻辑。通过将预测执行结果返回给应用服务器,从而达到由应用服务器控制整个目标事务的执行逻辑的目的。
另外,数据库操作装置还需要在本地记录所获取到的数据库操作指令,以及在该数据库操作指令属于修改数据库类指令时记录对该数据库操作指令进行预测执行产生的预测执行数据。所述修改数据库类指令是指对数据库有修改的数据库操作指令,例如以update、insert等开头的指令;一般以select开头的指令不属于修改数据库类指令。所述预测执行数据主要是指对数据库操作指令进行预测执行过程中的一些数据。
例如,数据库操作装置可以在本地创建内存库,将所获取到的数据库操作指令以及预测执行数据存入内存库中。进一步,若预测执行数据不包括预测执行结果,则也可以将预测执行结果存入内存库中。
从本质而言,读已提交隔离级别只保证写入多个数据是原子的,不在读取的时候加锁,这样可以提升系统的并发度,提高事务执行效率。为了在预测执行这一核心思想的基础上实现对读已提交这一隔离级别的模拟,本实施例仅仅针对属于修改数据库类指令的数据库操作指令,记录其预测执行产生的预测执行数据,却不记录不属于修改数据库类指令的数据库操作指令对应的预测执行数据。由此可见,在实现读已提交这一隔离级别的情况下,所记录的数据量相对较少,这样在后续基于本地记录的数据库操作指令和预测执行数据在数据库中真实执行目标事务的过程中,所需处理的数据量相对较少,有利于进一步提高执行效率和性能,增大事务吞吐量。
其中,数据库操作指令对数据库的操作主要是访问数据库中的数据,则可以模拟数据库操作指令的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行。进一步,考虑到不属于修改数据库类指令的数据库操作指令不会引起数据库的变化,因此可以直接在数据库中对该数据库操作指令进行预测执行,这样可以节约模拟数据环境的操作,实现相对简单,有利于节约资源,提高执行效率。但是,对于属于修改数据库类指令的数据库操作指令,由于其会引起数据库的变化(主要是指数据库中的数据被改变),因此需要模拟数据环境,在所模拟的数据环境中进行预测执行。
基于上述分析,一种对数据库操作指令进行预测执行的方式可以是:
对获取到的数据库操作指令的类别进行识别;
若数据库操作指令属于修改数据库类指令,则在本地创建的内存库中模拟数据库操作指令的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行;
若数据库操作指令不属于修改数据库类指令,在数据库中执行该数据库操作指令,以对该数据库操作指令进行预测执行。
进一步,一种在本地创建的内存库中模拟数据库操作指令的数据环境,基于所模拟的数据环境对数据库操作指令进行预测执行的实施方式包括:
将获取到的数据库操作指令拆分为一个读指令和一个写指令,将读指令运行于真正的数据库上,即在数据库中执行该读指令以获取读数据集(ReadSet),将读数据集存入本地内存库中,以模拟数据库操作指令所需的数据环境。然后,将写指令作用于内存库上,以实现对数据库操作指令的预测执行,即在内存库中执行写指令以修改读数据集,例如对读数据集中的有关数据进行更新或查询处理等。其中,执行写指令以修改读数据集可以产生结果数据集(affectRowInMemdb),该结果数据集包括预测执行结果。
在上述预测执行过程中,若数据库操作指令属于修改数据库类指令,则数据库操作装置可以在本地记录读指令所读取的读数据集以及执行写指令产生的结果数据集。由此可见,所述预测执行数据可以包括读数据集和结果数据集,或者也可以包括读数据集和结果数据集中的部分数据,例如能够对在数据库中实际执行目标事务产生有益效果的一些数据,例如一些数值的各种索引,例如一级索引、二级索引、主键值等。
当数据库操作装置获取到目标事务中的事务提交指令(即应用服务器执行到事务提交指令)时,则可以根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务。
上述根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务的一种可选实施方式包括:
数据库操作装置向数据库下发本地记录的所述数据库操作指令,以指示数据库执行数据库操作指令,并接收数据库返回的数据库操作指令的实际执行结果;然后,将数据库操作指令的实际执行结果与预测执行结果进行比较,若实际执行结果与预测执行结果相同,向数据库下发事务提交指令,以供数据库提交该目标事务;若实际执行结果与预测执行结果不相同,向数据库下发事务回滚指令,以供数据库回滚该目标事务。
在上述实施方式中,考虑到事务的原子性,通过将实际执行结果与预测执行结果进行比较,可以避免事务执行过程出错,有利于提高事务执行的成功概率。
进一步,在现有技术中,由于无法预先知道事务需要执行的全部数据库操作指令,所以只能按照事务的执行逻辑依次执行数据库操作指令,这会导致应用服务器与数据库之间的频繁交互,这在远程应用场景中将会消耗大量网络资源。但在本实施例中,通过预测执行过程已经预先获得目标事务需要执行的全部数据库操作指令,即本地记录的数据库操作指令,因此在向数据库下发本地记录的数据库操作指令,以指示数据库执行数据库操作指令的过程中,可以将本地记录的数据库操作指令同时(或者一并)下发到数据库,有利于节约网络资源。另外,对于一些并行的数据库操作指令,数据库还可以并行操作,有利于进一步提高事务执行效率,增大事务吞吐量。
进一步,还可以将本地记录的所有数据库操作指令连同本地记录的预测执行数据一并下发给数据库。
进一步,在一种根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务的可选实施方式中,数据库操作装置可以根据本地记录的数据库操作指令,判断目标事务是否为单机事务;若判断结果为是,则根据本地记录的数据库操作指令以及预测执行数据,以单机事务处理逻辑控制数据库实际执行目标事务;若判断结果为否,则根据本地记录的数据库操作指令以及预测执行数据,以分布式事务处理逻辑控制数据库实际执行目标事务。
其中,基于预测执行过程中获得的数据库操作指令可以识别出目标事务是单机事务还是分布式事务。例如,可以判断本地记录的数据库操作指令的操作对象是否作用于同一物理设备上,若判断结果为是,则可以确定该目标事务为单机事务;若判断结果为否,则可以确定该目标事务为分布式事务。
由于分布式事务的处理逻辑和单机事务的处理逻辑有所不同,单机事务的处理逻辑相对简单,例如不涉及读写加锁等问题,所以所消耗的资源也相对较少。基于此,本实施例通过识别目标事务是否为单机事务,在识别为单机事务时采用单机事务的处理逻辑进行处理,而不是像现有技术那样统一采用分布式事务处理逻辑进行处理,有利于提高处理效率,节约处理成本。
在一可选实施方式中,若数据库操作装置获取到目标事务中的事务回滚指令(即应用服务器执行到事务回滚指令)时,可以删除本地记录的数据库操作指令以及预测执行数据,例如可以直接清空本地内存库,实现回滚操作。在该情况下,由于目标事务并未在数据库中真正执行,所以数据库无需执行回滚操作,可见,在事务回滚这种情况下,采用本实施例方法也可以提高事务执行效率。
由上述可见,在本实施例提供的方法中,数据库操作装置与应用服务器相互配合,在应用服务器执行目标事务的过程加入预测执行过程,在预测执行过程中,可以提前获得目标事务的执行路径,即真正需要执行的数据库操作指令,并仅针对属于修改数据库类指令的数据库操作指令记录预测执行产生的预测执行数据以适应于读已提交隔离级别,为真实执行事务提供了条件,之后在根据记录的数据库操作指令以及预测执行数据实际执行该目标事务时,例如基于预测执行数据可以提前获取有关数据信息并且可以减少指令之间的跳转等,因此可以提高执行效率,增大事务吞吐量。
下面以减库存事务为例,详细说明本申请技术方案的工作流程。其中,数据库的隔离级别为读已提交这一隔离级别。
减库存事务的SQL代码如下,括号内的文字为注释:
begin transaction(开始事务)
select*from inventory where itemId=?(用商品id查看当前库存,注意这里没有for update外部显示加锁)
if(item.inventory>0)
item.inventory--;
update inventory set item.inventory=$item.inventory where itemId=?
commit;
else
rollback;(如果当前库存大于0,则减少、更新商品库存并提交,否则回滚)
在实际执行过程中,应用服务器负责该减库存事务的整个逻辑,数据库操作装置(或者也可称为执行服务器)只会获取应用服务器执行到的开始事务,需要执行的SQL语句,以及提交/回滚指令。
首先,开始事务后,数据库操作装置在本地创建内存库;
当数据库操作装置获取到select*from inventory where itemId=?for update这条SQL语句时,识别出这条SQL语句不会修改数据库,因此将这条SQL语句直接作用在实际数据库中,即在数据库中执行该条SQL语句以获得查询结果,即读数据集,将全部查询结果返回给应用服务器,以供应用服务器确定下一个需要执行的SQL语句,并在本地内存库中记录这条SQL语句。由于是读已隔离级别,故不需要记录任何与执行该条SQL语句有关的数据。
应用服务器收到数据库操作装置返回的查询结果后,判断查询结果中当前库存量是否大于0,若判断结果为是,则将当前库存量减少,并执行更新语句,即update inventoryset item.inventory=$item.inventory where itemId=?;若判断结果为否,则执行rollback语句。
第一种情况,假设应用服务器执行了rollback语句,则数据库操作装置会获取到rollback语句。一旦数据库存储装置获取到rollback语句,则清空本地内存库,主要是指清空之前记录的select*from inventory where itemId=?for update这条SQL语句。在这种情况下,因为事务并没有在数据库中执行,所以无需数据库执行回滚操作。
第二种情况,假设应用服务器执行了update inventory set item.inventory=$item.inventory where itemId=?这条语句,则数据库操作装置会获取到updateinventory set item.inventory=$item.inventory where itemId=?这条语句。则数据库操作装置获取到update inventory set item.inventory=?where itemId=?这条SQL语句时,识别出该SQL语句会修改数据库,于是将这条SQL语句拆解为一个读指令,即select*from inventory where itemId=?和一个写指令,即update inventory setitem.inventory=?where itemId=?;接着,将select*from inventory where itemId=?这个语句下发到数据库中,获得读数据集,将读数据集中的数据写入本地内存库中;其中,读数据集中包括主键列表(itemId)和该主键对应的版本号信息(version)。然后,根据update inventory set item.inventory=?where itemId=?这个语句在本地内存库中进行更新操作,以获得结果数据集,并将结果数据集返回给应用服务器。该结果数据集可以是类似修改了几条记录这样的修改记录信息,例如,affectRow=1表示修改了一条记录;或者,结果数据集也可以是记录修改详细信息的修改详情信息。其中,结果数据集和读数据集构成预测执行数据。
应用服务器此时执行commit指令。
当数据库操作装置获取到commit指令后,基于本地内存库中的SQL语句以及预测执行数据,在数据库中执行该减库存事务,这次事务执行过程是真实执行的。例如,本地记录的SQL语句以及预测执行数据如下所示:
优选的,数据库操作装置可以一次性将本地内存库中的SQL语句全部提交到数据库中,数据库基于此进行执行,有利于节约传输SQL语句所消耗的网络资源。
这次真实执行也会返回执行结果,可以将预测执行结果与实际执行结果进行比较,例如可以先比较两个结果中的itemId和version,然后再比较两个结果中的affectRow;如果比较结果为相同,则可以在数据库中提交这次事务,而如果比较结果为不相同,则认为提交是失败的,由于在这种情况下,事务本身其实一直都没有真正的在数据库中执行提交,所以可以简单地回滚整个请求,让应用服务器重新提交即可。
其中,经过上述预测执行,已经获得了所有的需要执行的SQL语句,以及相应的预测执行数据,例如全部切分条件,数值的索引等,而这些数据足以让我们提前对事务是否是单机事务做出判断。基于此,可以采用相应的事务处理逻辑进行处理,有利于节约资源。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
图4为本申请一实施例提供的数据库操作装置的结构示意图。如图4所示,该装置包括:获取模块41、预测执行模块42和控制执行模块43。
获取模块41,用于在应用服务器执行目标事务的过程中,依次获取应用服务器执行到的目标事务中的数据库操作指令。
预测执行模块42,用于对数据库操作指令进行预测执行,将预测执行结果返回给应用服务器以供应用服务器确定下一个需要执行的数据库操作指令,并在本地记录数据库操作指令以及在数据库操作指令属于修改数据库类指令时记录预测执行产生的预测执行数据。
控制执行模块43,用于当获取到目标事务中的事务提交指令时,根据本地记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行目标事务。
在一可选实施方式中,该数据库操作装置还包括:配置模块,用于在应用服务器执行目标事务之前,配置数据库为读已提交隔离级别。
在一可选实施方式中,获取模块41具体可用于:拦截应用服务器发往数据库的数据库操作指令;或者,接收应用服务器主动下发的数据库操作指令。
在一可选实施方式中,获取模块41还用于:在获取应用服务器执行到的目标事务中的数据库操作指令之前,拦截应用服务器发往数据库的目标事务中的事务开始指令;或者,接收应用服务器主动下发的目标事务中的事务开始指令。
在一可选实施方式中,预测执行模块42具体可用于:
若获取模块41获取到的数据库操作指令属于修改数据库类指令,在本地创建的内存库中模拟数据库操作指令的数据环境,基于模拟的数据环境对数据库操作指令进行预测执行;
若获取模块41获取到的数据库操作指令不属于修改数据库类指令,在数据库中执行数据库操作指令,以对数据库操作指令进行预测执行。
进一步,在获取模块41获取到的数据库操作指令属于修改数据库类指令的情况下,预测执行模块42在执行在本地创建的内存库中模拟数据库操作指令的数据环境,基于模拟的数据环境对数据库操作指令进行预测执行的操作时,具体用于:
将数据库操作指令拆分为读指令和写指令;
在数据库中执行读指令以获取读数据集,将读数据集存入内存库中以模拟数据库操作指令的数据环境;
在内存库中执行写指令以修改读数据集。
在一可选实施方式中,控制执行模块43具体可用于:
向数据库下发本地记录的数据库操作指令,以指示数据库执行数据库操作指令,并接收数据库返回的数据库操作指令的实际执行结果;
若实际执行结果与预测执行结果相同,向数据库下发事务提交指令,以供数据库提交目标事务;
若实际执行结果与预测执行结果不相同,向数据库下发事务回滚指令,以供数据库回滚目标事务。考虑到事务的原子性,控制执行模块43通过将实际执行结果与预测执行结果进行比较,可以避免事务执行过程出错,有利于提高事务执行的成功概率。
进一步,控制执行模块43在向数据库下发本地记录的数据库操作指令时,具体可用于:将本地记录的数据库操作指令同时下发给数据库,有利于节约网络资源。
进一步,控制执行模块43可以将本地记录的所有数据库操作指令连同本地记录的预测执行数据一并下发给数据库,有利于节约网络资源。
在一可选实施方式中,控制执行模块43具体用于:
根据本地记录的数据库操作指令,判断目标事务是否为单机事务;
若判断结果为是,则根据本地记录的数据库操作指令以及预测执行数据,以单机事务处理逻辑控制数据库实际执行目标事务;
若判断结果为否,则根据本地记录的数据库操作指令以及预测执行数据,以分布式事务处理逻辑控制数据库实际执行目标事务。由于分布式事务的处理逻辑和单机事务的处理逻辑有所不同,单机事务的处理逻辑相对简单,例如不涉及读写加锁等问题,所以所消耗的资源也相对较少。基于此,控制执行模块43通过识别目标事务是否为单机事务,在识别为单机事务时采用单机事务的处理逻辑进行处理,有利于提高处理效率,节约处理成本。
在一可选实施方式中,预测执行模块42还用于:在获取到目标事务中的事务回滚指令时,删除本地记录的数据库操作指令以及预测执行数据。
本实施例提供的数据库操作装置,其可以单独部署,位于应用服务器和数据库之间,也可以部署于应用服务器一端实现,或者也可以部署于数据库一端实现。
本实施例提供的数据库操作装置,与应用服务器相互配合,在应用服务器执行目标事务的过程加入预测执行过程,预先获得并记录目标事务需要执行的全部数据库操作指令,并仅针对属于修改数据库类指令的数据库操作指令记录预测执行产生的预测执行数据以适应于读已提交隔离级别,为真实执行事务提供了条件,之后根据记录的数据库操作指令以及预测执行数据,控制应用服务器对应的数据库实际执行该目标事务,有利于提高执行效率,增大事务吞吐量。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (12)
1.一种数据库操作方法,其特征在于,包括:
在应用服务器执行目标事务的过程中,依次获取所述应用服务器执行到的所述目标事务中的数据库操作指令;
对所述数据库操作指令进行预测执行,将预测执行结果返回给所述应用服务器以供所述应用服务器确定下一个需要执行的数据库操作指令,并在本地记录所述数据库操作指令以及在所述数据库操作指令属于修改数据库类指令时记录所述预测执行产生的预测执行数据,所述预测执行结果决定所述目标事务的执行路径,所述执行路径是数据库操作指令之间的跳转逻辑;
当获取到所述目标事务中的事务提交指令时,根据本地记录的所述数据库操作指令以及所述预测执行数据,控制所述应用服务器对应的数据库实际执行所述目标事务。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述应用服务器执行所述目标事务之前,配置所述数据库为读已提交隔离级别。
3.根据权利要求1所述的方法,其特征在于,所述对所述数据库操作指令进行预测执行,包括:
若所述数据库操作指令属于修改数据库类指令,在本地创建的内存库中模拟所述数据库操作指令的数据环境,基于所述模拟的数据环境对所述数据库操作指令进行预测执行;
若所述数据库操作指令不属于修改数据库类指令,在所述数据库中执行所述数据库操作指令,以对所述数据库操作指令进行预测执行。
4.根据权利要求3所述的方法,其特征在于,所述在本地创建的内存库中模拟所述数据库操作指令的数据环境,基于所述模拟的数据环境对所述数据库操作指令进行预测执行,包括:
将所述数据库操作指令拆分为读指令和写指令;
在所述数据库中执行所述读指令以获取读数据集,将所述读数据集存入所述内存库中以模拟所述数据库操作指令的数据环境;
在所述内存库中执行所述写指令以修改所述读数据集。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述根据本地记录的所述数据库操作指令以及所述预测执行数据,控制所述应用服务器对应的数据库实际执行所述目标事务,包括:
向所述数据库下发本地记录的所述数据库操作指令,以指示所述数据库执行所述数据库操作指令,并接收所述数据库返回的所述数据库操作指令的实际执行结果;
若所述实际执行结果与所述预测执行结果相同,向所述数据库下发所述事务提交指令,以供所述数据库提交所述目标事务;
若所述实际执行结果与所述预测执行结果不相同,向所述数据库下发事务回滚指令,以供所述数据库回滚所述目标事务。
6.根据权利要求5所述的方法,其特征在于,所述向所述数据库下发本地记录的所述数据库操作指令,包括:
将本地记录的所述数据库操作指令同时下发给所述数据库。
7.一种数据库操作装置,其特征在于,包括:
获取模块,用于在应用服务器执行目标事务的过程中,依次获取所述应用服务器执行到的所述目标事务中的数据库操作指令;
预测执行模块,用于对所述数据库操作指令进行预测执行,将预测执行结果返回给所述应用服务器以供所述应用服务器确定下一个需要执行的数据库操作指令,并在本地记录所述数据库操作指令以及在所述数据库操作指令属于修改数据库类指令时记录所述预测执行产生的预测执行数据,所述预测执行结果决定所述目标事务的执行路径,所述执行路径是数据库操作指令之间的跳转逻辑;
控制执行模块,用于当获取到所述目标事务中的事务提交指令时,根据本地记录的所述数据库操作指令以及所述预测执行数据,控制所述应用服务器对应的数据库实际执行所述目标事务。
8.根据权利要求7所述的装置,其特征在于,还包括:
配置模块,用于在所述应用服务器执行所述目标事务之前,配置所述数据库为读已提交隔离级别。
9.根据权利要求7所述的装置,其特征在于,所述预测执行模块具体用于:
若所述数据库操作指令属于修改数据库类指令,在本地创建的内存库中模拟所述数据库操作指令的数据环境,基于所述模拟的数据环境对所述数据库操作指令进行预测执行;
若所述数据库操作指令不属于修改数据库类指令,在所述数据库中执行所述数据库操作指令,以对所述数据库操作指令进行预测执行。
10.根据权利要求9所述的装置,其特征在于,所述预测执行模块具体用于:
将所述数据库操作指令拆分为读指令和写指令;
在所述数据库中执行所述读指令以获取读数据集,将所述读数据集存入所述内存库中以模拟所述数据库操作指令的数据环境;
在所述内存库中执行所述写指令以修改所述读数据集。
11.根据权利要求7-10任一项所述的装置,其特征在于,所述控制执行模块具体用于:
向所述数据库下发本地记录的所述数据库操作指令,以指示所述数据库执行所述数据库操作指令,并接收所述数据库返回的所述数据库操作指令的实际执行结果;
若所述实际执行结果与所述预测执行结果相同,向所述数据库下发所述事务提交指令,以供所述数据库提交所述目标事务;
若所述实际执行结果与所述预测执行结果不相同,向所述数据库下发事务回滚指令,以供所述数据库回滚所述目标事务。
12.根据权利要求11所述的装置,其特征在于,所述控制执行模块具体用于:
将本地记录的所述数据库操作指令同时下发给所述数据库。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510568369.7A CN106503027B (zh) | 2015-09-08 | 2015-09-08 | 数据库操作方法及装置 |
PCT/CN2016/097266 WO2017041637A1 (zh) | 2015-09-08 | 2016-08-30 | 数据库操作方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510568369.7A CN106503027B (zh) | 2015-09-08 | 2015-09-08 | 数据库操作方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106503027A CN106503027A (zh) | 2017-03-15 |
CN106503027B true CN106503027B (zh) | 2020-02-21 |
Family
ID=58240569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510568369.7A Active CN106503027B (zh) | 2015-09-08 | 2015-09-08 | 数据库操作方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106503027B (zh) |
WO (1) | WO2017041637A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111198872B (zh) * | 2020-01-06 | 2021-06-11 | 中科驭数(北京)科技有限公司 | 数据库处理事务的方法及装置 |
CN111580938B (zh) * | 2020-03-27 | 2023-04-14 | 浪潮通用软件有限公司 | 一种工作单元的事务处理方法、装置、设备及介质 |
CN111930830B (zh) * | 2020-06-22 | 2024-04-16 | 心有灵犀科技股份有限公司 | 一种基于共享数据库的分布式事务数据处理方法及系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0318196D0 (en) * | 2003-08-02 | 2003-09-03 | Ibm | A method apparatus and computer program for processing a queue of messages |
US8224845B2 (en) * | 2008-01-21 | 2012-07-17 | International Business Machines Corporation | Transaction prediction modeling method |
CN101587447B (zh) * | 2008-05-23 | 2013-03-27 | 国际商业机器公司 | 基于预测的事务执行系统和方法 |
CN102203779B (zh) * | 2011-05-03 | 2013-04-17 | 华为技术有限公司 | 更新数据的方法和控制装置 |
US9477707B2 (en) * | 2013-01-29 | 2016-10-25 | Nec Corporation | System and methods for predicting query execution time for concurrent and dynamic database workloads |
CN106503007B (zh) * | 2015-09-08 | 2019-07-23 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
CN106897306B (zh) * | 2015-12-21 | 2019-04-30 | 阿里巴巴集团控股有限公司 | 数据库操作方法及装置 |
-
2015
- 2015-09-08 CN CN201510568369.7A patent/CN106503027B/zh active Active
-
2016
- 2016-08-30 WO PCT/CN2016/097266 patent/WO2017041637A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2017041637A1 (zh) | 2017-03-16 |
CN106503027A (zh) | 2017-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109271450B (zh) | 数据库同步方法、装置、服务器和存储介质 | |
US11500869B2 (en) | Method and apparatus for optimizing database transactions | |
CN106897123B (zh) | 数据库操作方法及装置 | |
CN111670433A (zh) | 查询优化器约束 | |
WO2017107811A1 (zh) | 数据库操作方法及装置 | |
EP2811792A1 (en) | A method for operating a mobile telecommunication device | |
EP4006740A1 (en) | Method for indexing data in storage engines, and related device | |
US20170161353A1 (en) | System, method and device for optimizing database operations | |
US20210240710A1 (en) | Query plan overrides | |
CN106503027B (zh) | 数据库操作方法及装置 | |
CN108255852B (zh) | Sql执行方法及装置 | |
CN103377292B (zh) | 数据库结果集缓存方法及设备 | |
TWI725110B (zh) | 資料庫操作方法及裝置 | |
CN115203217A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
TWI805544B (zh) | 資料庫操作方法及裝置 | |
US10929395B2 (en) | Data modification in hypothetical planning | |
US20240086387A1 (en) | Delta transition table for database triggers | |
KR20140098529A (ko) | 데이터에 대한 접근 패턴이 서로 상이한 olap 응용 및 oltp 응용을 동시에 효과적으로 지원하는 장치 및 방법 | |
CN116226092B (zh) | 数据库更新方法及装置 | |
US20160217190A1 (en) | System for extracting records from a non-relational database based on one or more relational database management system (rdbms) language statements | |
US20240220910A1 (en) | Building and executing machine learning models via a no-code toolkit | |
TW201828110A (zh) | 資料庫操作方法及裝置 | |
CN104699834B (zh) | 优化数据库数据访问的方法 | |
KR20210036177A (ko) | 데이터 가공을 통한 빅데이터 웨어하우스 데이터 마트 테이블 생성 방법 | |
TW201828116A (zh) | 資料庫操作方法及裝置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |