CN115827172A - 执行数据库事务的方法以及装置 - Google Patents
执行数据库事务的方法以及装置 Download PDFInfo
- Publication number
- CN115827172A CN115827172A CN202211393209.XA CN202211393209A CN115827172A CN 115827172 A CN115827172 A CN 115827172A CN 202211393209 A CN202211393209 A CN 202211393209A CN 115827172 A CN115827172 A CN 115827172A
- Authority
- CN
- China
- Prior art keywords
- transaction
- executed
- database
- unexecuted
- target database
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供执行数据库事务的方法以及装置,其中所述执行数据库事务的方法包括:确定目标数据库已执行操作对应的操作标识;利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。通过将事务拆分成操作实现了对中断断点的精准定位,在确定未执行操作对应的操作标识之后,可以继续执行在该位置中断的未执行操作,进一步实现对该事务的执行,并避免组成事务的操作的重复执行。
Description
技术领域
本说明书实施例涉及通信技术领域,特别涉及执行数据库事务的方法。
背景技术
为了避免源数据库发生故障,通常会设置备份数据库用于备份源数据库中的数据,具体而言,源数据库可以用于提供数据管理和数据查询等功能,备份数据库可以用于在源数据库发生故障时替代源数据库提供相应的功能。
具体的,在对源数据库的数据备份的过程中,通常会使备份数据库执行源数据库中已经执行成功的事务。然而,事务是由操作组成的,只有在组成该事务的所有操作均能正常执行的情况下才能提交该事务,以实现该事务的成功执行,只要其中任一操作执行失败,都会导致整个事务的回滚。在备份过程出现异常中断的情况下,事务无法执行成功,则会导致事务回滚,在事务的开始重新执行组成该事务的所有操作,造成操作的重复执行。因此,亟需一种有效的技术方案解决上述问题。
发明内容
有鉴于此,本说明书实施例提供了一种执行数据库事务的方法。本说明书一个或者多个实施例同时涉及一种执行数据库事务的装置,一种系统,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种执行数据库事务的方法,包括:
确定目标数据库已执行操作对应的操作标识;
利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;
基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
根据本说明书实施例的第二方面,提供了一种执行数据库事务的装置,包括:
确定模块,被配置为确定目标数据库已执行操作对应的操作标识;
获取模块,被配置为利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;
执行模块,被配置为基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
根据本说明书实施例的第三方面,提供了一种系统,包括:
源数据库,被配置为提供数据写服务,生成所述数据写服务对应的事务日志;
目标数据库,被配置为从所述源数据库获取所述事务日志,应用如本说明书任意实施例所述执行数据库事务的方法,执行所述事务日志中的事务。
根据本说明书实施例的第四方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现上述方法的步骤。
根据本说明书实施例的第六方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述方法的步骤。
本说明书一个实施例提供了一种执行数据库事务的方法,确定目标数据库已执行操作对应的操作标识;利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
上述方法通过利用组成事务的操作对应的操作标识,根据目标数据库已执行操作对应的操作标识,从源数据库事务日志中确定目标数据库未执行操作对应的操作标识,并在目标数据库上执行该未执行操作,通过将事务拆分成操作实现了对中断断点的精准定位,在确定未执行操作对应的操作标识之后,即确定了该事务在备份过程中中断的位置,可以继续执行在该位置中断的未执行操作,无需回滚到组成该事务的第一个操作重新执行该事务,进一步实现对该事务的执行,并避免组成事务的操作的重复执行。
附图说明
图1是本说明书一个实施例提供的一种执行数据库事务的方法的具体应用场景示意图;
图2是本说明书一个实施例提供的一种执行数据库事务的方法的流程图;
图3是本说明书一个实施例提供的一种执行数据库事务的方法的处理过程流程图;
图4是本说明书一个实施例提供的一种执行数据库事务的装置的结构示意图;
图5是本说明书一个实施例提供的一种系统的结构示意图;
图6是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
ExactlyOnce:恰好一次。
日志回放:获取数据源(数据库在线日志,事务日志备份集)事务日志中的DML,DDL去目标数据库中执行。
DML:英文全称为Data Manipulation Language,是一种数据操纵语言,用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。主要功能是访问数据。包括插入操作、删除操作、更新操作等。
DDL:英文全称为Data Definition Language,是一种数据库模式定义语言,是用于描述数据库中要存储的现实世界实体的语言。主要是和表结构相关的操作。
GTID:英文全称为Global Transaction ID,是一种全局事务标识,其由两部分组成,一部分是产生GTID的服务器,一部分是序列号,在每台服务器上都是从1开始自增长的顺序号,是事务的唯一标识。
GCTID:英文全称为Global Commit Transaction ID,是一种全局提交事务标识。其由源数据库事务日志中的事务ID、单个事务中根据表名计算的哈希值和单个事务中的序列号组成,每个表从1开始递增,可以是一个集合,也可以是一个区间。
MySQL:是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
事务日志:用于存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。
Varbinary:是一个可以改变长度的二进制数据。
Source线程:读取日志的线程
Sink线程:执行SQL,将数据写入目标数据库的线程。
SQL:英文全称为Structured Query Language,结构化查询语言,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
Dwriter线程:用于从消息队列中读取日志,将其转换为SQL,写入到目的数据库的进程。
Dstore:数据传输服务的消息队列,存储的是格式化的数据库事务日志。
实际应用中,在关系型数据库实施迁移、备份恢复等场景下,事务日志的回放通常只恰好执行一次,也即是说,事务日志中记载的事务只执行一次。当出现机器异常导致回放进程失败、用户行为触发的对回放进程的暂停重启或修改配置触发的进行重启的情况时,会导致回放过程的中断和重启。
当回放过程中断的情况下,无法精确定位日志回放过程的断点,在重启过程中,可以从重启之间的时间戳恢复任务,然而会存在同一个DML命令或DDL命令多次执行,事务日志回放过程(即事务执行过程)通常包括对数据的更新操作、插入操作和删除操作,插入操作重复执行会导致无主键表多数据,有主键或者唯一约束表发生冲突,在冲突规则配置为中断任务状况下任务会失败;删除操作重复执行会导致无主键表缺少数据;更新操作重复执行会导致数据状态回滚或覆盖数据状态。也即是说,重启进程会导致一条数据多次回放从而产生主键冲突、无主键表、多数据等问题。
另外,目前事务日志回放只能适用于同一类型的关系型数据库之间的主从复制,比如MySQL和MySQL之间的主从复制,不能直接复用到其他类型的数据库,并且,当一个事务涉及到数据库中的多个数据表时,上述事务无法进行拆分执行,导致无法满足数据传输过程中表粒度的同步任务场景的需求。因此,亟需一种有效的技术方案解决上述问题。
在本说明书中,提供了一种执行数据库事务的方法,本说明书同时涉及一种执行数据库事务的装置,一种系统,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
参见图1,图1示出了本说明书一个实施例提供的一种执行数据库事务的方法的具体应用场景示意图。
图1中包括源数据库和目标数据库,该目标数据库用于对源数据库进行数据备份。
具体实施时,源数据库的事务日志中记载其执行了目标事务1,该目标事务1由操作1(操作标识为1_1)、操作2(操作标识为1_2)、操作3(操作标识为1_3)和操作4(操作标识为1_4)组成,源数据库在执行该目标事务1时,按照顺序依次执行操作1、操作2、操作3和操作4,全部执行完毕后提交该目标事务1,写入源数据库的事务日志,表示源数据库中的目标事务1执行成功。
目标数据库在对源数据库进行数据备份时,从源数据库的事务日志中获取该目标事务1并按照顺序依次执行操作1、操作2、操作3和操作4。然而,当目标数据库执行该目标事务1时,发生异常中断之后,无法判断中断的断点位于哪个操作。
基于此,如图1所示,可以查询目标数据库的事务日志,确定目标数据库已经执行的操作对应的操作标识1_1、操作标识1_2,由此可以确定目标数据库已经执行了操作1和操作2。根据目标数据库已经执行的操作对应的操作标识1_1、操作标识1_2,可以从源数据库的事务日志中确定目标数据库在执行该目标事务1时未执行的操作对应的操作标识1_3、操作标识为1_4,由此可知,目标数据库在执行目标事务1时,只执行了操作1和操作2,并未执行操作3和操作4,由此确定断点在操作2和操作3之间。因此,目标数据库可以根据其获取的操作标识1_3、操作标识为1_4,执行操作3和操作4,从而完成对目标事务1的执行。实现断点的精确定位,并实现数据的同步备份,避免遗漏或重复执行。
参见图2,图2示出了根据本说明书一个实施例提供的一种执行数据库事务的方法的流程图,具体包括以下步骤。
步骤202:确定目标数据库已执行操作对应的操作标识。
其中,所述操作是指源数据库事务日志中,事务包含的操作。一个事务,可以理解为对数据库中数据进行访问并更新的一个执行单元,包含从事务开始执行到事务结束执行的一个或多个操作。目标数据库可以理解为用于对源数据库进行备份的备份数据库。目标数据库比如可以是关系型数据库,也可以是其他类型的数据库。目标数据库已执行操作可以理解为备份数据库已经执行的操作,操作可以理解为组成目标数据库执行的事务的操作。比如,目标数据库执行目标事务,该目标事务由插入操作1、更新操作2和删除操作3组成,目标数据库已执行操作可以是插入操作1和更新操作2。已执行操作对应的操作标识可以理解为对已执行操作的标识,其可以用于标识该已执行操作属于的事务和在事务中的执行顺序,比如更新操作2对应的操作标识为1X2,1可以是事务的序列号,2可以是该操作在事务中的执行顺序。
具体的,目标数据库在备份源数据库的数据时,会执行源数据库已经执行成功的事务。比如,源数据库执行了由插入操作1、更新操作2和删除操作3组成的目标事务,该目标事务执行成功后写入源数据库的事务日志。目标数据库从源数据库的事务日志中获取该目标事务并执行,该获取和执行过程也可以理解为前述日志回放过程。
基于此,可以确定备份数据库中已经执行的操作对应的操作标识,该操作标识用于表示该操作属于的事务和在该事务中的执行顺序。
以目标数据库执行由操作1、操作2、操作3、操作4和操作5组成的目标事务1为例,确定目标数据库已执行的操作1对应的操作标识1X1、操作2对应的操作标识1X2和操作3对应的操作标识1X3。
实际应用中,目标数据库在执行目标事务时,每执行一个事务,都会记录该事务的信息,因此,可以通过目标数据库执行事务的记录生成过滤单元,并通过查询该过滤单元确定已执行操作对应的操作标识,具体实现如下:
查询目标数据库的过滤单元,获得所述已执行操作对应的操作标识,其中,所述过滤单元根据所述目标数据库执行事务的记录生成。
具体的,目标数据库执行事务的记录中记载有目标数据执行事务的事务信息以及操作信息,因此,在生成过滤单元时,可以根据已执行操作所属事务的事务信息以及操作信息,确定已执行操作对应的操作标识,并将已执行操作对应的操作标识存储至该过滤单元。
其中,已执行操作所属事务的事务信息可以理解为目标数据库已经执行的操作属于的事务的标识信息,比如可以是GTID信息,或者可以是该事务的序列号。操作信息可以理解为该已执行操作对应的操作信息,比如可以是该已执行操作所操作的数据单元的单元标识,也可以是该已执行操作在对应的数据单元中的操作编号。数据单元可以理解为数据表。过滤单元可以理解为存储有已执行操作的操作标识的单元。目标数据库执行事务的记录可以理解为记载有目标数据库执行的事务的单元,比如可以是目标数据库的事务日志,也可以是设置的目标数据库的事务记录。
具体的,一个目标事务可能涉及多个数据表,例如,在目标事务1中,操作1和操作2用于对数据表1进行插入操作,操作3和操作4用于对数据表2进行更新操作。那么,目标事务1的GTID信息即为该操作1所属目标事务的事务信息,数据表1的哈希值即为该操作1或该操作2对应的操作信息。
基于此,可以通过查询过滤单元,获取目标数据库已执行操作对应的操作标识。
沿用上例,在生成过滤单元时,可以从目标数据库执行事务的记录中获取目标事务1,根据该目标事务1获取操作1所属的目标事务1对应的事务信息、以及该操作1所操作的数据表1的哈希值X、该操作1在该目标事务1中的操作编号1,确定该操作1对应的操作标识为1X1。
综上,通过根据已执行操作所属事务的事务信息和操作信息,确定已执行操作对应的操作标识,能够将事务内部的操作按照表粒度进行拆分,实现了单个事务涉及多个数据表时对组成事务的操作的拆分,进一步实现断点在哪个操作的精确定位。
步骤204:利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息。
具体的,在确定目标数据库已执行操作对应的操作标识之后,可以利用该已执行操作对应的操作标识,从源数据库事务日志中获取目标数据库为执行操作对应的操作标识。
其中,源数据库事务日志中存储有源数据库已经执行成功的事务以及组成该事务的操作对应的操作标识。
基于此,可以利用目标数据库已执行操作对应的操作标识,从源数据库事务日志中获取目标数据库未执行操作对应的操作标识。可以理解的是,目标数据库未执行操作即为源数据库已执行操作。
举例而言,源数据库事务日志中存储有其已经执行成功的事务1,以及组成该事务1的操作1、操作2和操作3分别对应的操作标识1、2、3。目标数据库在对源数据库进行备份时,执行了操作1、操作2后发生异常中断,此时目标数据库已执行操作为操作1和操作2,根据操作1的操作标识1、操作2对应的操作标识2,可以从源数据库事务日志中获取该目标数据库执行该事务1的过程中未执行的操作3的操作标识3,说明目标数据库未执行该操作3。
具体实施时,在利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识时,可以将源数据库事务日志中的目标数据库已执行操作对应的操作标识过滤,保留的即为目标数据库未执行操作对应的操作标识,具体实现方式如下:
根据所述已执行操作对应的操作标识,构建过滤单元;
根据所述过滤单元,从源数据库事务日志中过滤所述目标数据库已执行操作对应的操作标识,根据过滤结果确定所述目标数据库未执行操作对应的操作标识。
其中,过滤单元可以理解为存储有目标数据库已执行操作对应的操作标识的日志过滤表。
基于此,可以将目标数据库已执行操作对应的操作标识存储至过滤单元,根据该过滤单元,从源数据库事务日志中过滤目标数据库已执行操作对应的操作标识,过滤结果即为保留的目标数据库未执行操作对应的操作标识。
沿用上例,可以根据目标数据库已经执行的操作1对应的操作标识1和操作2对应的操作标识2构建过滤单元,根据过滤单元从源数据库事务日志中将操作1的操作标识1和操作2的操作标识2过滤,此时源数据库事务日志中保留有操作标识3,该操作标识3即为目标数据库未执行的操作3对应的操作标识。
综上,通过构建过滤单元对源数据库事务日志进行过滤,能够快速获得目标数据库未执行操作对应的操作标识,提高数据同步效率,并且能够精准定位断点。
具体的,操作信息可以包括:对应操作所操作的数据单元的单元标识;
其中,数据单元可以理解为数据库中的数据表,数据单元的单元标识可以理解为数据表的标识信息,比如可以是数据表的哈希值。
相应地,在目标数据库执行的第一事务由第一操作和第二操作组成、并且第一操作用于操作第一数据单元、第二操作用于操作第二数据单元的情况下,利用所述已执行操作的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作的操作标识,包括:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息以及第一数据单元的单元标识,且所述第二操作标识包含所述第一事务的事务信息以及第二数据单元的单元标识。
其中,第一操作可以理解为操作第一数据单元的操作,第二操作可以理解为操作第二数据单元的操作。
基于此,可以根据第一操作所属的第一事务的事务信息和第一操作所操作的第一数据单元的单元标识,确定第一操作对应的第一操作标识。可以根据第二操作所属的第一事务的事务信息和第二操作所操作的第二数据单元的单元标识,确定第二操作对应的第二操作标识。在过滤时,可以利用目标数据库已执行的第一操作的第一操作标识,从源数据库事务日志中获取目标数据库未执行的第二操作的第二操作标识。
综上,通过组成事务的每个操作对应的操作标识,从源数据库事务日志中获取未执行操作的操作标识,能够实现当单个事务涉及多个数据单元时对涉及每个数据单元的操作的拆分,实现了分表操作。
实际应用中,当第一事务涉及一个第三数据单元、并且由第一操作和第二操作组成的情况下,即第一事务中的第一操作和第二操作都用于操作同一个第三数据单元的情况下,还可以确定操作在其对应的数据单元中的操作编号,来确定操作的操作标识,其中,操作信息还包括:对应操作所操作的数据单元的单元标识以及所述对应操作在所述数据单元中的操作编号;
相应地,所述利用所述已执行操作的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作的操作标识,包括:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息、第三数据单元的单元标识以及所述第一操作在所述第三数据单元中的操作编号,且所述第二操作标识包含所述第一事务的事务信息、所述第三数据单元的单元标识以及所述第二操作在所述第三数据单元中的操作编号。
其中,第三数据单元可以理解为数据库中的数据表。第一操作在第三数据单元中的操作编号可以理解为第一操作对第三数据单元进行操作的操作顺序,比如,目标事务1中,首先对第三数据单元进行操作1,再进行操作2,操作1对第三数据单元进行操作的操作顺序为第一个,那么,1即为操作1在第三数据单元中的操作编号。
基于此,可以根据第一操作所属第一事务的事务信息、第一操作操作的第三数据单元的单元标识、以及该第一操作在第三数据单元中的操作顺序,确定第一操作对应的第一操作标识。可以根据第二操作所属第一事务的事务信息、第二操作操作的第三数据单元的单元标识、以及该第二操作在第三数据单元中的操作顺序,确定第二操作对应的第二操作标识。并根据已执行的第一操作的第一操作标识,从源数据库事务日志中获取目标数据库未执行的第二操作的第二操作标识。
综上,当数据库中的一个数据单元涉及多个操作时,可以根据每个操作在数据单元中的操作顺序确定该操作对应的操作标识,实现了对一个数据单元涉及的多个操作的拆分同步,为后续精确断点实现更细粒度的拆分。
步骤206:基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
具体的,在从源数据库事务日志中获取目标数据库未执行操作对应的操作标识后,即确定了目标数据库备份过程中的断点位置,此时可以在该断点位置继续执行目标数据库未执行操作。
具体实施时,可以设置待执行队列,通过待执行队列执行未执行操作,具体实现方式如下:
将所述未执行操作对应的操作标识加入待执行队列;
根据所述待执行队列,在所述目标数据库上执行所述未执行操作。
其中,待执行队列可以理解为存储有目标数据库还未执行、且即将执行的操作对应的操作标识的队列。
基于此,可以将目标数据库未执行操作对应的操作标识加入待执行队列,目标数据库根据该待执行队列,执行待执行队列中存储的未执行操作。
实际应用中,待执行队列中可以包含至少两个未执行操作分别对应的操作标识;
相应地,所述根据所述待执行队列,在所述目标数据库上执行所述未执行操作,包括:
对所述待执行队列中包含的至少两个未执行操作分别对应的操作标识进行合并压缩,获得合并结果;
根据所述合并结果,在所述目标数据库上执行所述未执行操作。
具体的,可以从待执行队列中获取至少两个未执行操作分别对应的操作标识,并对其进行合并压缩,获得合并结果。根据合并结果,在目标数据库上执行该未执行操作。
其中,合并结果可以是未执行操作的范围。比如,一个事务中对一个数据表的更新操作有1000条记录,那么这1000条记录的操作标识的合并结果可以是server_id:1:1-10000。
举例而言,待执行队列中包含未执行的操作3的操作标识3、操作4的操作标识4以及操作5的操作标识5,可以对操作标识3、操作标识4和操作标识5进行合并压缩,获得合并结果id_3-5,并根据该合并结果在目标数据库上依次执行操作3、操作4和操作5。
此外,未执行操作对应的操作标识可以选用varbinary字段存储,一行记录中可以包含多个未执行操作的操作标识。
综上,通过对未执行操作的操作标识进行合并压缩,能够降低存储成本。
此外,获得合并结果之后,还可以在所述待执行队列中删除合并前的至少两个未执行操作分别对应的操作标识。
并且,获得合并结果之后,还可以设置预设存储时长,将达到预设存储时长的合并结果从所述待执行队列中删除。
具体的,预设存储时长可以根据目标数据库的执行时间确定,在确定目标数据库执行完成合并结果中所有的操作标识对应的未执行操作的情况下,可以确定该合并结果达到预设存储时长,并将该合并结果从执行队列中删除。
综上,通过删除合并前的未执行操作对应的操作标识和达到预设存储时长的合并结果,能够实现对存储空间的清理,降低存储空间的占用,进而降低存储成本。
实际应用中,在根据所述待执行队列,在所述目标数据库上执行所述未执行操作时,为了保证事务执行的原子性,需要将未执行操作和已执行操作放在同一个事务中执行,执行完成未执行操作之后,提交该事务,表示该事务已经被完整执行成功,具体实现方式如下:
将所述目标数据库已执行操作和所述待执行队列中包含的未执行操作作为目标事务;
在所述目标数据库上执行所述目标事务中的未执行操作,执行结束后提交所述目标事务。
具体的,可以确定的目标数据库的已执行操作和从源数据库事务日志获取的目标数据库的未执行操作放入同一个事务,即目标事务,在目标数据库上执行该目标事务中的未执行操作,执行结束后提交该目标事务,表示该目标事务执行成功。
举例而言,目标数据库已执行操作为操作1、操作2和操作3,未执行操作为操作4和操作5,将该操作1、操作2、操作3、操作4和操作5放入同一个目标事务1,由于该目标事务1中的操作1、操作2和操作3已被执行,因此,可以直接执行该目标事务1中的操作4和操作4,执行结束后提交该目标事务1,表示该目标事务1执行成功。
综上,通过将目标数据库已执行操作和未执行操作放入同一个事务内执行,保证了事务执行的原子性,不仅能够避免操作的重复执行,也能够避免执行事务的遗漏或失败。
此外,在所述目标数据库上执行所述未执行操作之后,还可以将执行后的所述未执行操作对应的操作标识写入过滤单元,以实现后续根据该过滤单元对目标数据库已执行操作的过滤,避免目标数据库已执行操作的遗漏。
综上所述,上述方法通过利用组成事务的操作对应的操作标识,根据目标数据库已执行操作对应的操作标识,从源数据库事务日志中确定目标数据库未执行操作对应的操作标识,并在目标数据库上执行该未执行操作,通过将事务拆分成操作实现了对中断断点的精准定位,在确定未执行操作对应的操作标识之后,即确定了该事务在备份过程中中断的位置,可以继续执行在该位置中断的未执行操作,无需回滚到组成该事务的第一个操作重新执行该事务,进一步实现对该事务的执行,并避免组成事务的操作的重复执行。
下述结合附图3,以本说明书提供的执行数据库事务的方法在数据库备份的应用为例,对所述执行数据库事务的方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种执行数据库事务的方法的处理过程流程图,具体包括以下步骤。
步骤302:根据目标数据库执行事务的记录中记载的已执行操作所属事务的事务信息以及操作信息,生成已执行操作的操作标识,将已执行操作的操作标识存储至日志过滤表。
步骤304:通过source线程从Dstore获取源数据库的事务日志,根据日志过滤表对源数据库的事务日志进行过滤,将目标数据库已执行操作过滤,根据过滤结果确定目标数据库未执行操作的操作标识。
其中,操作标识可以是GCTID。
步骤306:将目标数据库未执行操作的操作标识加入待执行队列。
步骤308:对待执行队列中的未执行操作的操作标识进行合并压缩,得到合并结果。
步骤310:通过sink线程根据合并结果,在目标数据库上执行该未执行操作。
步骤312:通过清理线程从目标数据库查询已执行操作的操作标识。
步骤314:通过清理线程根据查询的已执行操作的操作标识将失效的合并结果删除。
综上所述,上述方法通过利用组成事务的操作对应的操作标识,根据目标数据库已执行操作对应的操作标识,从源数据库事务日志中确定目标数据库未执行操作对应的操作标识,并在目标数据库上执行该未执行操作,通过将事务拆分成操作实现了对中断断点的精准定位,在确定未执行操作对应的操作标识之后,即确定了该事务在备份过程中中断的位置,可以继续执行在该位置中断的未执行操作,无需回滚到组成该事务的第一个操作重新执行该事务,进一步实现对该事务的执行,并避免组成事务的操作的重复执行。
与上述方法实施例相对应,本说明书还提供了执行数据库事务的装置实施例,图4示出了本说明书一个实施例提供的一种执行数据库事务的装置的结构示意图。如图4所示,该装置包括:
确定模块402,被配置为确定目标数据库已执行操作对应的操作标识;
获取模块404,被配置为利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;
执行模块406,被配置为基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
一个可选的实施例中,所述确定模块402,进一步被配置为:
查询目标数据库的过滤单元,获得所述已执行操作对应的操作标识,其中,所述过滤单元根据所述目标数据库执行事务的记录生成。
一个可选的实施例中,所述装置还包括写入模块,被配置为:
将执行后的所述未执行操作对应的操作标识写入所述过滤单元。
一个可选的实施例中,所述获取模块404,进一步被配置为:
根据所述过滤单元,从源数据库事务日志中过滤所述目标数据库已执行操作,根据过滤结果确定所述目标数据库未执行操作对应的操作标识。
一个可选的实施例中,所述执行模块406,进一步被配置为:
将所述未执行操作对应的操作标识加入待执行队列;
根据所述待执行队列,在所述目标数据库上执行所述未执行操作。
一个可选的实施例中,所述待执行队列中包含至少两个未执行操作分别对应的操作标识;所述执行模块406,进一步被配置为:
对所述待执行队列中包含的至少两个未执行操作分别对应的操作标识进行合并压缩,获得合并结果;
根据所述合并结果,在所述目标数据库上执行所述未执行操作。
一个可选的实施例中,所述装置还包括删除模块,被配置为:
在所述待执行队列中删除合并前的至少两个未执行操作分别对应的操作标识。
一个可选的实施例中,所述删除模块,进一步被配置为:
将达到预设存储时长的合并结果从所述待执行队列中删除。
一个可选的实施例中,所述执行模块406,进一步被配置为:
将所述目标数据库已执行操作和所述待执行队列中包含的未执行操作作为目标事务;
在所述目标数据库上执行所述目标事务中的未执行操作,执行结束后提交所述目标事务。
一个可选的实施例中,所述操作信息包括:对应操作所操作的数据单元的单元标识;所述获取模块404,进一步被配置为:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息以及第一数据单元的单元标识,且所述第二操作标识包含所述第一事务的事务信息以及第二数据单元的单元标识。
一个可选的实施例中,所述操作信息还包括:对应操作所操作的数据单元的单元标识以及所述对应操作在所述数据单元中的操作编号;所述获取模块404,进一步被配置为:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息、第三数据单元的单元标识以及所述第一操作在所述第三数据单元中的操作编号,且所述第二操作标识包含所述第一事务的事务信息、所述第三数据单元的单元标识以及所述第二操作在所述第三数据单元中的操作编号。
综上所述,上述装置通过利用组成事务的操作对应的操作标识,根据目标数据库已执行操作对应的操作标识,从源数据库事务日志中确定目标数据库未执行操作对应的操作标识,并在目标数据库上执行该未执行操作,通过将事务拆分成操作实现了对中断断点的精准定位,在确定未执行操作对应的操作标识之后,即确定了该事务在备份过程中中断的位置,可以继续执行在该位置中断的未执行操作,无需回滚到组成该事务的第一个操作重新执行该事务,进一步实现对该事务的执行,并避免组成事务的操作的重复执行。
上述为本实施例的一种执行数据库事务的装置的示意性方案。需要说明的是,该执行数据库事务的装置的技术方案与上述的执行数据库事务的方法的技术方案属于同一构思,执行数据库事务的装置的技术方案未详细描述的细节内容,均可以参见上述执行数据库事务的方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了一种系统,图5示出了本说明书一个实施例提供的一种系统500的结构示意图。如图5所示,系统500包括:
源数据库502,被配置为提供数据写服务,生成所述数据写服务对应的事务日志;
目标数据库504,被配置为从所述源数据库获取所述事务日志,应用如本说明书任意实施例所述执行数据库事务的方法,执行所述事务日志中的事务。
具体的,目标数据库可以理解为源数据库的备份数据库,对于源数据库执行的事务,目标数据库也要执行相同的事务,实现目标数据库和源数据库中数据的同步。
图6示出了根据本说明书一个实施例提供的一种计算设备600的结构框图。该计算设备600的部件包括但不限于存储器610和处理器620。处理器620与存储器610通过总线630相连接,数据库650用于保存数据。
计算设备600还包括接入设备640,接入设备640使得计算设备600能够经由一个或多个网络660通信。这些网络的示例包括公用交换电话网(PSTN,Public SwitchedTelephone Network)、局域网(LAN,Local Area Network)、广域网(WAN,Wide AreaNetwork)、个域网(PAN,Personal Area Network)或诸如因特网的通信网络的组合。接入设备640可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC,networkinterface controller))中的一个或多个,诸如IEEE802.11无线局域网(WLAN,WirelessLocal Area Network)无线接口、全球微波互联接入(Wi-MAX,WorldwideInteroperability for Microwave Access)接口、以太网接口、通用串行总线(USB,Universal Serial Bus)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC,Near FieldCommunication)接口,等等。
在本申请的一个实施例中,计算设备600的上述部件以及图6中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图6所示的计算设备结构框图仅仅是出于示例的目的,而不是对本申请范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备600可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或个人计算机(PC,Personal Computer)的静止计算设备。计算设备600还可以是移动式或静止式的服务器。
其中,处理器620用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述执行数据库事务方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的执行数据库事务的方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述执行数据库事务的方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述执行数据库事务的方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的执行数据库事务的方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述执行数据库事务的方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述执行数据库事务的方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的执行数据库事务的方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述执行数据库事务的方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (14)
1.一种执行数据库事务的方法,包括:
确定目标数据库已执行操作对应的操作标识;
利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,其中,所述操作标识,包含对应操作所属事务的事务信息以及操作信息;
基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作。
2.根据权利要求1所述的方法,所述确定目标数据库已执行操作对应的操作标识,包括:
查询目标数据库的过滤单元,获得所述已执行操作对应的操作标识,其中,所述过滤单元根据所述目标数据库执行事务的记录生成。
3.根据权利要求2所述的方法,所述在所述目标数据库上执行所述未执行操作之后,还包括:
将执行后的所述未执行操作对应的操作标识写入所述过滤单元。
4.根据权利要求2所述的方法,所述利用所述已执行操作对应的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作对应的操作标识,包括:
根据所述过滤单元,从源数据库事务日志中过滤所述目标数据库已执行操作对应的操作标识,根据过滤结果确定所述目标数据库未执行操作对应的操作标识。
5.根据权利要求1所述的方法,所述基于所述未执行操作对应的操作标识,在所述目标数据库上执行所述未执行操作,包括:
将所述未执行操作对应的操作标识加入待执行队列;
根据所述待执行队列,在所述目标数据库上执行所述未执行操作。
6.根据权利要求5所述的方法,所述待执行队列中包含至少两个未执行操作分别对应的操作标识;
相应地,所述根据所述待执行队列,在所述目标数据库上执行所述未执行操作,包括:
对所述待执行队列中包含的至少两个未执行操作分别对应的操作标识进行合并压缩,获得合并结果;
根据所述合并结果,在所述目标数据库上执行所述未执行操作。
7.根据权利要求6所述的方法,所述获得合并结果之后,还包括:
在所述待执行队列中删除合并前的至少两个未执行操作分别对应的操作标识。
8.根据权利要求6所述的方法,所述获得合并结果之后,还包括:
将达到预设存储时长的合并结果从所述待执行队列中删除。
9.根据权利要求5所述的方法,所述根据所述待执行队列,在所述目标数据库上执行所述未执行操作,包括:
将所述目标数据库已执行操作和所述待执行队列中包含的未执行操作作为目标事务;
在所述目标数据库上执行所述目标事务中的未执行操作,执行结束后提交所述目标事务。
10.根据权利要求1所述的方法,所述操作信息包括:对应操作所操作的数据单元的单元标识;
相应地,所述利用所述已执行操作的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作的操作标识,包括:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息以及第一数据单元的单元标识,且所述第二操作标识包含所述第一事务的事务信息以及第二数据单元的单元标识。
11.根据权利要求1所述的方法,所述操作信息还包括:对应操作所操作的数据单元的单元标识以及所述对应操作在所述数据单元中的操作编号;
相应地,所述利用所述已执行操作的操作标识,从源数据库事务日志中获取所述目标数据库未执行操作的操作标识,包括:
利用已执行第一操作的第一操作标识,从源数据库事务日志中获取所述目标数据库未执行第二操作的第二操作标识;
所述第一操作标识包含第一事务的事务信息、第三数据单元的单元标识以及所述第一操作在所述第三数据单元中的操作编号,且所述第二操作标识包含所述第一事务的事务信息、所述第三数据单元的单元标识以及所述第二操作在所述第三数据单元中的操作编号。
12.一种系统,包括:
源数据库,被配置为提供数据写服务,生成所述数据写服务对应的事务日志;
目标数据库,被配置为从所述源数据库获取所述事务日志,应用如权利要求1-11任意一项所述执行数据库事务的方法,执行所述事务日志中的事务。
13.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至11任意一项所述方法的步骤。
14.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至11任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211393209.XA CN115827172A (zh) | 2022-11-08 | 2022-11-08 | 执行数据库事务的方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211393209.XA CN115827172A (zh) | 2022-11-08 | 2022-11-08 | 执行数据库事务的方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115827172A true CN115827172A (zh) | 2023-03-21 |
Family
ID=85527224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211393209.XA Pending CN115827172A (zh) | 2022-11-08 | 2022-11-08 | 执行数据库事务的方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115827172A (zh) |
-
2022
- 2022-11-08 CN CN202211393209.XA patent/CN115827172A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109101627B (zh) | 异构数据库同步方法及装置 | |
CN109271450B (zh) | 数据库同步方法、装置、服务器和存储介质 | |
WO2019154394A1 (zh) | 分布式数据库集群系统、数据同步方法及存储介质 | |
WO2016180160A1 (zh) | 数据快照的恢复方法和装置 | |
CN111078667B (zh) | 一种数据迁移的方法以及相关装置 | |
CN111813760B (zh) | 数据迁移方法以及装置 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
CN109542682B (zh) | 一种数据备份方法、装置、设备和存储介质 | |
JP2022013854A (ja) | 2フェーズコミット分散トランザクションを使用することによってデータベースを更新するための方法および装置 | |
US11748215B2 (en) | Log management method, server, and database system | |
EP3786802B1 (en) | Method and device for failover in hbase system | |
CN114661248B (zh) | 数据处理方法及装置 | |
CN111666266A (zh) | 一种数据迁移方法及相关设备 | |
CN113297159B (zh) | 数据存储方法以及装置 | |
CN111352766A (zh) | 一种数据库的双活实现方法及装置 | |
WO2021082925A1 (zh) | 一种交易处理的方法及装置 | |
CN116541469B (zh) | 数据同步的实现方法、装置、设备及存储介质 | |
CN111404737B (zh) | 一种容灾处理方法以及相关装置 | |
WO2018019310A1 (zh) | 一种大数据系统中数据备份方法、恢复方法和装置和计算机存储介质 | |
CN115658391A (zh) | 基于QianBase MPP数据库的WAL机制的备份恢复方法 | |
CN115827172A (zh) | 执行数据库事务的方法以及装置 | |
CN112699129A (zh) | 一种数据处理系统、方法及装置 | |
CN113946542A (zh) | 数据处理方法以及装置 | |
CN111897490A (zh) | 删除数据的方法以及装置 | |
CN112765126A (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 |