CN114356508A - 事务回放方法以及装置 - Google Patents
事务回放方法以及装置 Download PDFInfo
- Publication number
- CN114356508A CN114356508A CN202111464744.5A CN202111464744A CN114356508A CN 114356508 A CN114356508 A CN 114356508A CN 202111464744 A CN202111464744 A CN 202111464744A CN 114356508 A CN114356508 A CN 114356508A
- Authority
- CN
- China
- Prior art keywords
- transaction
- played back
- target queue
- playback
- timestamp
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- 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
- G06F16/2322—Optimistic concurrency control using timestamps
Abstract
本说明书实施例提供事务回放方法以及装置,其中事务回放方法包括:获取待回放事务、以及待回放事务的开始时间戳;确定待回放事务待插入的第一目标队列;在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放,其中,第二目标队列与第一目标队列分别记录有进行回放的事务和事务的提交时间戳,第二目标队列与第一目标队列之间的事务并行回放。本方案可以提高事务回放的效率。
Description
技术领域
本说明书实施例涉及数据库技术领域,特别涉及一种事务回放方法。
背景技术
逻辑复制是一种将对象及对象的更改进行复制的方法,被广泛用于数据库的主备复制、分布式数据库的数据在线迁移、以及数据库在线升级等场景。在上述场景中,用于实现对象更改的操作可以是事务(Transaction):访问及更新数据库中各数据项的一个程序执行单元(unit)。例如,在关系数据库中,一个事务可以是一条结构化查询语言(SQL,Structured Query Language)语句,一组SQL语句或整个程序。因此,对所复制对象的更改可以包括:获取所复制对象的事务,针对所复制对象对所获取的事务进行回放,在回放完成时提交该事务。
在具体应用中,逻辑复制中事务的数量往往为多个。并且,不同事务之间可能存在读写依赖关系:某一事务需要在另一事务回放结束后才能进行回放。对此,通常对多个事务进行串行回放。但是,在上述关于数据库的应用场景中通常存在大量并发的事务,上述串行回放的方式容易导致事务回放的效率大幅降低。因此,需要提供更快速的方案。
发明内容
有鉴于此,本说明书施例提供了一种事务回放方法。本说明书一个或者多个实施例同时涉及一种事务回放装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种事务回放方法,包括:
获取待回放事务、以及所述待回放事务的开始时间戳;
确定所述待回放事务待插入的第一目标队列,所述第一目标队列中记录的事务与所述待回放事务存在串行回放的执行关系;
在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,其中,所述第二目标队列与所述第一目标队列分别记录有进行回放的事务和事务的提交时间戳,所述第二目标队列与所述第一目标队列之间的事务并行回放。
可选地,所述指定提交时间戳包括:所述第二目标队列中所有未完成回放的事务的提交时间戳;
所述在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,包括:
分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳;
若所述待回放事务的开始时间戳不大于所述第二目标队列中所有未完成回放的事务的提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
可选地,在所述分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳之后,还包括:
若所述第二目标队列中存在未完成回放的第一事务的提交时间戳小于所述待回放事务的开始时间戳,则等待所述第一事务完成回放。
可选地,所述指定提交时间戳为:所述第二目标队列中未完成回放的事务的最小提交时间戳;
所述在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,包括:
比较所述待回放事务的开始时间戳与所述最小提交时间戳;
若所述待回放事务的开始时间戳不大于所述最小提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
可选地,在所述比较所述待回放事务的开始时间戳与所述最小提交时间戳之后,还包括:
若所述待回放事务的开始时间戳大于所述最小提交时间戳,则等待所述第二目标队列中未回放完成的事务完成回放。
可选地,所述确定所述待回放事务待插入的第一目标队列,包括:
获取所述待回放事务的目标对象标识;
从各队列中查找所述目标对象标识对应的第一目标队列。
可选地,在所述将所述待回放事务插入所述第一目标队列进行回放之后,还包括:
若在达到预设时长阈值时,未对所述待回放事务执行回放,则从所述第二目标队列中,确定回放总时长最短的第三目标队列,其中,任一队列的回放总时长为该队列中未回放事务均完成回放所需的总时长;
从当前的第一目标队列中取出所述待回放事务,并插入所述第三目标队列。
可选地,所述获取待回放事务,包括:
获取对目标对象生成快照的快照时间戳、以及所述目标对象的数据库日志;
解析所述数据库日志,获得提交时间戳大于或者等于所述快照时间戳的事务,作为所述待回放事务。
可选地,任一事务对应有一个事务标识;
在解析所述目标对象的数据库日志的过程中,若解析得到中止信息,则获取所述中止信息对应的事务标识;
从缓存区中删除所述事务标识对应的事务。
根据本说明书实施例的第二方面,提供了一种事务回放装置,包括:
数据获取模块,被配置为获取待回放事务、以及所述待回放事务的开始时间戳;
队列确定模块,被配置为确定所述待回放事务待插入的第一目标队列,所述第一目标队列中记录的事务与所述待回放事务存在串行回放的执行关系;
事务回放模块,被配置为在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,其中,所述第二目标队列与所述第一目标队列分别记录有进行回放的事务和事务的提交时间戳,所述第二目标队列与所述第一目标队列之间的事务并行回放。
可选地,所述指定提交时间戳包括:所述第二目标队列中所有未完成回放的事务的提交时间戳;
所述事务回放模块,进一步被配置为:
分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳;
若所述待回放事务的开始时间戳不大于所述第二目标队列中所有未完成回放的事务的提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
可选地,所述事务回放模块,进一步被配置为:
在所述分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳之后,若所述第二目标队列中存在未完成回放的第一事务的提交时间戳小于所述待回放事务的开始时间戳,则等待所述第一事务完成回放。
可选地,所述指定提交时间戳为:所述第二目标队列中未完成回放的事务的最小提交时间戳;
所述事务回放模块,进一步被配置为:
比较所述待回放事务的开始时间戳与所述最小提交时间戳;
若所述待回放事务的开始时间戳不大于所述最小提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
可选地,所述事务回放模块,进一步被配置为:
在所述比较所述待回放事务的开始时间戳与所述最小提交时间戳之后,若所述待回放事务的开始时间戳大于所述最小提交时间戳,则等待所述第二目标队列中未回放完成的事务完成回放。
可选地,所述事务回放模块,还被配置为:
在所述将所述待回放事务插入所述第一目标队列进行回放之后,若在达到预设时长阈值时,未对所述待回放事务执行回放,则从所述第二目标队列中,确定回放总时长最短的第三目标队列,其中,任一队列的回放总时长为该队列中未回放事务均完成回放所需的总时长;
从当前的第一目标队列中取出所述待回放事务,并插入所述第三目标队列。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令时实现任意一项所述事务回放方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现任意一项所述事务回放方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述事务回放方法的步骤。
本说明书一个实施例实现了获取待回放事务、以及待回放事务的开始时间戳;确定待回放事务待插入的第一目标队列,在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放。其中,第一目标队列中记录的事务与待回放事务存在串行回放的执行关系;第二目标队列与第一目标队列分别记录有进行回放的事务和事务的提交时间戳,第二目标队列与第一目标队列之间的事务并行回放。因此,若待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳,则表明待回放事务无法看到第二目标队列记录的事务,待回放事务与第二目标队列记录的事务之间不存在读写依赖关系,待回放事务与第二目标队列记录的事务可以并行执行。并且,第二目标队列与第一目标队列之间的事务并行回放。因此,将待回放事务插入第一目标队列进行回放,可以保证事务回放效率的提高。并且,第一目标队列记录的事务存在串行回放的执行关系,可以保证存在读写依赖关系的事务能够准确执行。因此,本方案可以兼顾事务回放准确度的保证和效率的提高。
附图说明
图1是逻辑复制的流程示例图;
图2是本说明书一个实施例提供的一种事务回放方法的流程图;
图3是本说明书一个实施例提供的一种事务回放方法中,事务的执行时序示例图;
图4是本说明书一个实施例提供的一种应用于目的节点的事务回放方法的处理过程示例图;
图5是本说明书一个实施例提供的一种事务回放方法的处理过程流程图;
图6是本说明书一个实施例提供的一种事务回放装置的结构示意图;
图7是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
记录(Tuple):数据库存储的表的“行”称为“记录”,“列”称为“字段”。数据库按页面的形式存储表的Tuple以及索引项。
多版本事务并发控制机制(MVCC,Multi-version Concurrency Control):MVCC数据库中,一个写事务对表中任意一行记录的修改会产生一个新版本的记录,并以该写事务的提交时间戳进行提交。另一个事务例如读事务对该表中记录进行读的时候,读取对该读事务的开始时间戳可见的版本,即读取提交时间戳小于该读事务的开始时间戳的版本中,最新版本的记录。
快照隔离(SI,Snapshot Isolation):一个事务只能看到在该事务开始前提交的另一事务。为了支持快照隔离,在事务开始时为该事务分配一个提交时间戳,在事务提交的时候分配一个提交时间戳。因此,事务T1可以看到提交事务T2的修改,当且仅当事务T1的开始时间戳大于事务T2的提交时间戳。
WAL(Write-ahead logging):数据库采用的一种先写日志再写磁盘的机制,可以保证持久化和可故障恢复。
数据操纵语言(DML,Data Manipulation Language):以插入(INSERT,意指新增或创建)更新(UPDATE,修改)和删除(DELETE,销毁)三种指令为核心,对数据库其中的对象和数据运行访问工作的编程语句。
数据库模式定义语言(DDL,Data Definition Language):对数据库中的表进行操作的语言,可以用于对数据库中的表进行创建、修改、删除等操作。
为了便于理解,下面以本说明书图1逻辑复制的流程示例图为例,对逻辑复制的过程进行具体说明。示例性的,如图1所示,以将某一数据库也就是发送方存储的对象和针对该对象产生的事务,复制至另一数据库也就是接收方为例。其中,作为发送方的数据库的物理结构和作为接收方的数据库的物理结构可以相同或者不同。发送方和接收方可以属于同一物理设备,例如,分别为同一计算机中的两个不同虚拟机;或者,发送方和接收方可以分别属于不同物理设备,例如,分别为节点n1和节点n2。并且,对于发送方和接收方分别为节点的情况,发送方可以称为源节点,接收方可以称为目的节点,任一节点具体可以包括一个计算设备或者多个计算设备。这都是合理的。具体的,逻辑复制的流程可以包括如下阶段中的步骤:
阶段1(未在图1中示出):在确定进行逻辑复制的情况下,发送方针对待逻辑复制的一个或多个表生成发布,发送该发布至接收方,接收方订阅该发布,实现发送方和接收方之间的逻辑复制通道的建立,逻辑复制的阶段2和阶段3通过该通道进行。并且,接收方接收发送方发送的目标对象,例如,待逻辑复制的一个或多个表。后续阶段2和阶段3中的待回放事务与目标对象对应。其中,在对待回放事务进行回放时,该待回放事务的输入为相应的待目标对象。例如,目标对象为记录TP1,待回放事务T1为修改记录TP1中的指定字段,则对待回放事务T1进行回放可以包括:调用函数修改记录TP1中的指定字段。
阶段2:发送方对待逻辑复制的对象进行修改产生源事务,并将该源事务写入数据库日志。因此,发送方在进行逻辑复制时,从数据库日志中读取关于源事务的信息,并从所读取的信息中提取指定信息也就是关键信息,得到用于逻辑复制的待回放事务;对待回放事务进行插入、更新、准备及提交等处理,得到用于发送的数据流;将数据流发送至接收方。
阶段3:接收方在确定进行逻辑复制的情况下,进行事务回放的准备,该准备用于配置逻辑复制的环境、启动线程等;进行所接收的待回放事务的回放;该回放完成进行写入,也就是将该回放的输出写入表。
并且,在发送方发送的待回放事务并发很高的场景下,接收方中待回放事务需要等待,导致事务的回放与发送方中事务的产生差异较大,导致比较大的回放落后,影响逻辑复制的效果。因此,对逻辑复制而言,事务回放的效率至关重要。对此,可以对不存在读写依赖关系的待回放事务进行并行回放。
示例性的,可以记录每个DML操作产生的当前tuple版本对应的行号RVID(After-update)以及上一个版本对应的行号Before-update RVID。在进行逻辑复制时,将待回放事务对应目标对象的RVID发送至接收方。接收方进行待回放事务的并行回放时,先确定待回放事务是否为用于进行目标对象的更新或者删除。若确定是,则检查待回放事务对应目标对象的RVID是否等于Before-update RVID。如果不等于,说明存在与待回放事务为读写依赖关系的事务还没有回放完成,睡眠一段时间后重试对该待回放事务的回放操作,直至成功回放。如果等于;则将待回放事务加入并行回放的事务中。
但是,上述并行回放中睡眠重试的开销比较大:需要睡眠一定时间后,再重试回放操作,且需要确定待回放事务是否用于进行目标对象的更新或者删除,浪费时间及计算资源。并且,睡眠时间的设置不够便捷:如果睡眠时间短,不断重复扫描比较版本容易增加不同回放线程之间对同一表的锁竞争,降低各回放线程的回放速度。如果睡眠时间设置过长,则会大大降低需要睡眠的回放线程的回放速度。
另外,上述并行回放还会增加额外的存储开销:需要对表中每行记录额外保存8字节的RVID。同时每个表需要维护一个原子递增的序列号来生成RVID,并且序列号需要持久化和可故障恢复。
为了提供更快速的方案,在本说明书中,提供了一种事务回放方法,本说明书同时涉及一种事务回放装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图2示出了根据本说明书一个实施例提供的一种事务回放方法的流程图,具体包括以下步骤。
S202,获取待回放事务、以及待回放事务的开始时间戳。
其中,待回放事务是指在逻辑复制中,发送方发送至接收方的事务中未进行回放的事务。并且,待回放事务的开始时间戳是指在该事务在发送方中开始执行的情况下,生成的时间戳。在一种情况中,可以在发送方执行数据库本身的快照隔离机制,无需额外设置生成开始时间戳和结束时间戳的机制。可以减少计算资源和存储资源的开销。这样,在进行逻辑复制时,可以将目标对象的快照发送至接收方作为待回放事务针对的对象;并且,发送方在该事务在发送方中开始执行的情况下可以生成该事务的开始时间戳,在该事务在发送方中执行完成并提交的情况下可以生成该事务的提交时间戳。
在具体应用中,获取待回放事务的方式可以是多种的。示例性的,可以直接接收发送方发送的待回放事务,或者,可以从缓存池中读取发送方发送的待回放事务。并且,获取待回放事务的开始时间戳的方式可以是多种的。示例性的,若待回放事务包含开始时间戳,则可以从待回放事务中提取开始时间戳,或者,若开始时间戳和待回放事务共同发送,则可以接收发送方发送的待回放事务的开始时间戳。任何可以获取待回放事务、以及待回放事务的开始时间戳的方式均可用于本说明书,本实施例对此不作限制。
S204,确定待回放事务待插入的第一目标队列,第一目标队列中记录的事务与待回放事务存在串行回放的执行关系。
在具体应用中,任一队列中的待回放事务按照该待回放事务插入至该队列的顺序先后进行回放,因此,对于存在串行回放的执行关系的事务,可以插入同一队列中。这样,在对队列中的待回放事务进行回放时,无需对队列中各待回放事务的回放顺序进行额外确定,可以提高事务回放的效率。示例性的,如图3本说明书一个实施例提供的一种事务回放方法中,事务的执行时序示例图所示:事务T3的开始时间戳大于事务T1的提交时间戳,事务T3可以看到事务T1对目标对象的处理,因此,事务T3对事务T1存在读写依赖关系。在进行回放时必须保证事务T3在事务T1完成回放的情况下才能进行回放。因此,事务T3和事务T1之间为串行回放的执行关系。类似的,事务T1与事务T4之间为串行回放的执行关系,事务T1与事务T5之间为串行回放的执行关系。另外,对于并行回放的执行关系在后续步骤S206中进行说明。
并且,确定待回放事务待插入的第一目标队列的方式可以是多种的,为了便于理解和合理布局,后续以可选实施例的形式进行具体说明。
S206,在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放,其中,第二目标队列与第一目标队列分别记录有进行回放的事务和事务的提交时间戳,第二目标队列与第一目标队列之间的事务并行回放。
其中,事务的提交时间戳是指事务在发送方中执行完成并提交的情况下生成的时间戳。并且,任一时间戳在计算机中的存储形式具体为数值,时间戳表征的时间越早该数值越小,时间戳表征的时间越晚该数值越大。第一目标队列和第二目标队列组成多个队列,第二目标队列为多个队列中与第一目标队列不同的队列。多个队列的个数具体可以预先设置,这样接收方可以在事务回放准备时建立预设数量个队列。并且,在第二目标队列为多个时,各第二目标队列可以为不同队列,任一第二目标队列中事务的数量可以为一个或者多个。在第二目标队列中存在多个事务时,第二目标队列中的各事务间为串行回放的执行关系,以保证存在读写依赖关系的事务能够准确执行。示例性的,如图3本说明书一个实施例提供的一种事务回放方法中,事务的执行时序示例图所示:事务T1的开始时间戳小于或等于事务T2的提交时间戳,事务T1和事务T2互不可见对方对目标对象的处理,因此,事务T2和事务T1之间不存在读写依赖关系,可以并行执行。相应的,在进行事务回放时,事务T2和事务T1之间存在并行回放的执行关系。类似的,事务T3、事务T4和事务T5之间存在并行回放的执行关系。
另外,多个事务并行执行如果存在写写冲突:同时修改同一个表的行,则只有一个会提交成功,其它均会被中止。并且,为了获得提交时间戳,事务在发送方提交后才会发送至接收方。因此,接收方获取的各事务必然没有写写冲突,进一步保证本实施例中各并行回放的事务不存在依赖关系。因此,本实施例提供的事务回放方法的正确性可以进一步得到保证。
在具体应用中,第二目标队列与第一目标队列间的事务并行回放是指:不同队列分别对应有一个回放线程,调用该回放线程对相应队列中的待回放事务进行回放,各回放线程并行调用。例如,队列Q1和队列Q2间的事务并行回放,则队列Q1中的事务af1与队列Q2中的事务af2之间为并行回放的执行关系。在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放的方式,可以是多种的。为了便于理解和合理布局,后续以可选实施例的形式进行具体说明。
本说明书一个实施例中,第一目标队列中记录的事务与待回放事务存在串行回放的执行关系;第二目标队列与第一目标队列分别记录有进行回放的事务和事务的提交时间戳,第二目标队列与第一目标队列之间的事务并行回放。因此,若待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳,则表明待回放事务无法看到第二目标队列记录的事务,待回放事务与第二目标队列记录的事务之间不存在读写依赖关系,待回放事务与第二目标队列记录的事务可以并行执行。并且,第二目标队列与第一目标队列之间的事务并行回放。因此,将待回放事务插入第一目标队列进行回放,可以保证事务回放效率的提高。并且,第一目标队列记录的事务存在串行回放的执行关系,可以保证存在读写依赖关系的事务能够准确执行。因此,本方案可以兼顾事务回放准确度的保证和效率的提高。
在一种可选的实施方式中,上述指定提交时间戳可以包括:第二目标队列中所有未完成回放的事务的提交时间戳;
相应的,上述在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放,具体可以包括如下步骤:
分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳;
若待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳,则将待回放事务插入第一目标队列进行回放。
在具体应用中,待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳,表明待回放事务和第二目标队列中所有未完成回放的事务之间为并行回放的执行关系。并且第二目标队列与第一目标队列间的事务并行回放。因此,可以将待回放事务插入第一目标队列进行回放。本实施例通过分别比较第二目标队列中所有未完成回放的事务的提交时间戳与待回放事务的开始时间戳,可以准确确定待回放事务与第二目标队列中的事务是否为并行回放的执行关系,从而提高事务回放的准确度。
在一种情况中,为了进一步提高事务回放的效率,可以在分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳之前,确定第二目标队列是否为空,若为空,则确定待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳。或者,示例性的,可以为每个队列维护一个未完成回放的事务的提交时间戳集合。具体的,在将一个待回放事务插入某一队列时,可以将该待回放事务的提交时间戳插入该队列的提交时间戳集合。并且,在待回放事务完成回放时,将该待回放事务的提交时间戳从该待回放事务所属队列的提交时间戳集合中删除。在此基础上,分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳,可以包括:确定第二目标队列的提交时间戳集合是否为空,若为空,则确定待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳;若不为空,则比较待回放事务的开始时间戳和第二目标队列的提交时间戳集合中的各提交时间戳,若均不大于,则确定待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳。
在一种可选的实施方式中,在上述分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳之后,本说明书实施例提供的事务回放方法,还可以包括如下步骤:
若第二目标队列中存在未完成回放的第一事务的提交时间戳小于待回放事务的开始时间戳,则等待第一事务完成回放。
为了保证第二目标队列与第一目标队列间事务的并行回放,若第二目标队列中存在未完成回放的第一事务的提交时间戳小于待回放事务的开始时间戳,则等待第一事务完成回放。这样,可以保证能够将待回放事务可以插入第一目标队列。示例性的,等待第一事务完成回放可以包括:调用函数wait_for_dependency()等待第一事务完成回放,从而保证第二目标队列中未完成回放的事务的提交时间戳均满足大于或等于待回放事务的开始时间戳。
本实施例通过等待第一事务完成回放,可以保证第二目标队列与第一目标队列间事务的并行回放。
在一种可选的实施方式中,上述指定提交时间戳为:第二目标队列中未完成回放的事务的最小提交时间戳;
相应的,上述在待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将待回放事务插入第一目标队列进行回放,具体可以包括如下步骤:
比较待回放事务的开始时间戳与最小提交时间戳;
若待回放事务的开始时间戳不大于最小提交时间戳,则将待回放事务插入第一目标队列进行回放。
其中,第二目标队列中未完成回放的事务的最小提交时间戳是指:第二目标队列中各未完成回放的事务的提交时间戳中,最小的提交时间戳。例如,第二目标队列中未完成回放的事务包括事务af1、事务af2和事务af3;事务af1的提交时间戳ts1>事务af2的提交时间戳ts2>事务af3的提交时间戳ts3,则第二目标队列中未完成回放的事务的最小提交时间戳为ts3。这样,可以减少无需与待回放事务的开始时间戳进行比较的提交时间戳的数量,进一步提高事务回放的效率。
另外,与上述关于分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳的实施例类似的,为了进一步提高事务回放效率,可以在比较待回放事务的开始时间戳与最小提交时间戳之前,确定第二目标队列是否为空,若为空,则确定待回放事务的开始时间戳不大于最小提交时间戳,若不为空,则比较待回放事务的开始时间戳与最小提交时间戳。或者,在第二目标队列中未回放完成的事务回放完成时,删除该第二目标队列的最小时间戳。这样,如果第二目标队列中不存在未完成回放的事务,则第二目标队列的最小时间戳为空。
在一种可选的实施方式中,在比较待回放事务的开始时间戳与最小提交时间戳之后,本说明书实施例提供的事务回放方法,还可以包括如下步骤:
若待回放事务的开始时间戳大于最小提交时间戳,则等待第二目标队列中未回放完成的事务完成回放。
本实施例与上述关于等待第一事务完成回放的实施例类似,区别在于所等待的是具有最小提交时间戳的事务完成回放。对于相同部分可见上述关于等待第一事务完成回放的实施例的描述,在此不再赘述。这样,本实施例可以保证第二目标队列与第一目标队列间事务的并行回放。
在一种可选的实施方式中,确定待回放事务待插入的第一目标队列,具体可以包括如下步骤:
获取待回放事务的目标对象标识;
从各队列中查找目标对象标识对应的第一目标队列。
在具体应用中,针对同一目标对象的不同事务之间很可能为并行回放的执行关系。并且,针对同一目标对象的事务具有相同的对象标识。并且,各队列指第一目标队列和第二目标队列组成的多个队列。因此,本实施例从各队列中查找目标对象标识对应的第一目标队列,相当于将针对同一目标对象的事务插入同一队列中。这样,针对同一目标对象的不同事务可以串行回放。因此,本实施例可以高效确定第一目标队列,进一步提高事务回放的效率。
在另一种可选的实施方式中,上述确定待回放事务待插入的第一目标队列,具体可以包括如下步骤:
将各队列中满足回放效率条件的队列,确定为待回放事务待插入的第一目标队列,其中,回放效率条件包括以下条件中的任一种:
该队列中不存在未完成回放的事务、该队列中未完成回放的事务的个数最少、该队列中未完成回放的事务均完成回放所需的总时长最短、及该队列中未完成回放的事务的提交时间戳最小。
本实施可以保证待回放事务插入之第一目标队列后可以尽可能快的完成回放,进一步提高事务回放的效率。并且,这样可以保证将待回放事务插入至负载相对最少的队列中,在一定程度上实现队列的负载均衡。
在一种可选的实施方式中,在将待回放事务插入第一目标队列进行回放之后,本说明书实施例提供的事务回放方法,还可以包括如下步骤:
若在达到预设时长阈值时,未对待回放事务执行回放,则从第二目标队列中,确定回放总时长最短的第三目标队列,其中,任一队列的回放总时长为该队列中未回放事务均完成回放所需的总时长;
从当前的第一目标队列中取出待回放事务,并插入第三目标队列。
其中,第三目标队列为第二目标队列中回放总时长最短的队列。并且,达到预设时长阈值时未对待回放事务执行回放,则表明第一目标队列的负载相对过高。因此,从当前的第一目标队列中取出待回放事务,并插入第三目标队列,可以对队列间需要进行回放的事务进行调整,相当于减轻第一目标队列的负载,实现队列的负载均衡,进一步提高事务回放的效率。在一种情况中,为了保证队列间事务为并行回放的执行关系,以进一步提高事务回放的准确度,可以在确定待回放事务的开始时间戳不大于第四目标队列的指定提交时间戳的情况下,将待回放事务插入第三目标队列。其中,所述第四目标队列与第三目标队列以外的任一队列。指定时间戳包括:第四目标队列中所有未完成回放的事务的提交时间戳,或者第四目标队列中未完成回放的事务的最小提交时间戳。也就是说,将待回放事务插入第三目标队列之前,可以进行与将待回放事务插入第一目标队列之前所进行的处理类似的处理,区别在于所判断和等待回放完成的事务为第四目标队列中的事务。因此,若第四目标队列中存在未完成回放的第二事务的提交时间戳小于待回放事务的开始时间戳,则等待第二事务完成回放;或者,若待回放事务的开始时间戳大于上述最小提交时间戳,则等待第四目标队列中未回放完成的事务完成回放。对于相同部分在此不再赘述,详见上述关于将待回放事务插入第一目标队列之前所进行处理的实施例的描述。
另外,为了进一步提高事务回放的效率,可以根据时间片轮转调度算法,调整各队列分别对应的线程对计算资源的占用,以减少不同队列之间对计算资源的竞争导致的事务回放效率降低。其中,时间片轮转调度算法可以为每个线程被分配一个时间段,称作该线程的时间片:该线程被允许运行的时长。如果在时间片结束时线程还在运行,则计算资源将被剥夺并分配给另一个线程。如果线程在时间片结束前阻塞或结束,则当即进行资源切换:将该线程占用的计算资源分配给另一线程。
在一种可选的实施方式中,上述获取待回放事务,具体可以包括如下步骤:
解析数据库日志,获得待回放事务。
在具体应用中,数据库可能为空数据库,不存在目标对象,也就不涉及生成目标对象的快照,相应的,不存在提交时间戳小于快照时间戳的第三事务。这样,在进行逻辑复制时,数据库日志中记载的事务均为新增事务,新增事务均可以回放。因此,可以解析数据库日志,获得待回放事务。例如,源节点解析数据库日志,获得待回放事务,将待回放事务发送至目的节点。这样,本实施例可以对数据库为空的情况实现准确的逻辑复制。
在另一种可选的实施方式中,上述获取待回放事务,具体可以包括如下步骤:
获取对目标对象生成快照的快照时间戳、以及目标对象的数据库日志;
解析数据库日志,获得提交时间戳大于或者等于快照时间戳的事务,作为待回放事务。
为了进一步降低资源开销,若利用快照隔离生成事务的开始时间戳和提交时间戳,则发送方可以对目标对象生成快照,作为对目标对象的复制结果发送至接收方。并且,在对目标对象生成快照时,会相应生成一个快照时间戳,且提交时间戳小于快照时间戳的事务用于得到目标对象的快照,也就无需进行回放。因此,可以将提交时间戳大于或者等于快照时间戳的事务作为待回放事务。其中,解析数据库日志,获得提交时间戳大于或者等于快照时间戳的事务,具体可以包括:读取数据库日志中的事务及事务的提交时间戳,比较所读取事务的提交时间戳与快照时间戳,得到提交时间戳大于或者等于快照时间戳的事务。
并且,对目标对象生成快照包括:对目标对象生成快照时间戳,该快照时间戳可以是指定的;利用目标对象的快照时间戳读取数据库中目标对象的数据状态;将所读取的数据状态生成为目标对象的快照。具体的,从数据库所存储目标表的每行记录的版本中,读取对目标对象的快照时间戳可见的版本,将所读取的版本生成为目标对象的快照。其中,目标表是指目标对象所在的表。对目标对象的快照时间戳可见的版本即提交时间戳小于目标对象的快照时间戳的版本也就是记录。这样,本实施例中,基于快照时间戳生成的目标对象的快照中包含提交时间戳小于快照时间戳的第三事务的修改也就是第三事务的执行结果,因此,第三事务不需要被回放。因此,本实施例提供的获取待回放事务的方式,可以减少对无需回放的第三事务进行重复回放造成的回放结果异常、资源浪费和回放效率的降低。
在一种可选的实施方式中,任一事务对应有一个事务标识;
相应的,在上述解析目标对象的数据库日志之后,本说明书实施例提供的事务回放方法,还可以包括如下步骤:
在解析目标对象的数据库日志的过程中,若解析得到中止信息,则获取中止信息对应的事务标识;
从缓存区中删除事务标识对应的事务。
在具体应用中,事务是指访问及更新数据库中各数据项的一个程序执行单元。例如,在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。因此,为了保证事务的完整性和准确度,发送方可以为任一事务生成一个事务标识。在此基础上,发送方在缓存区中针对每个事务标识创建一个缓存集合,该缓存集合中缓存事务包含的DML操作和/或者DDL操作。这样,该缓存集合即可看作一个事务。并且,若解析得到中止信息,表明针对某一对象的事务被中止,因此,为了提高效率和降低资源占用,可以从缓存区中删除事务标识对应的事务。示例性的,中止信息具体可以为abort(中止)记录。另外,缓存集合中的元素存在执行顺序,因此,缓存集合具体可以为队列的形式。
下述结合附图4,以本说明书提供的事务回放方法在目的节点的应用为例,对事务回放方法进行进一步说明。图4是本说明书一个实施例提供的一种应用于目的节点的事务回放方法的处理过程示例图,该处理过程包括如下阶段1至阶段2:
阶段1:目的节点接收源节点发送的目标快照和针对该快照产生的待回放事务。其中,目标快照相当于上述基于目标对象的快照时间戳,生成的快照,具体可以参见上述关于获取待回放事务实施例中对目标对象生成快照的步骤的描述,在此不再赘述。并且,待回放事务为提交时间戳大于或者等于快照时间戳的事务,该事务具体可以包括DML操作和/或者DDL操作。目标对象可以为源节点的表中待复制的记录也就是行。或者,目标对象可以为源节点中的一个或多个表。源节点获取目标快照和针对该快照产生的待回放事务,具体可以包括:解析数据库日志,并在缓存区构建具有事务标识的缓存集合;比较数据库日志的提交记录中事务的提交时间戳和快照时间戳大小,如果事务的提交时间戳大于或等于快照时间戳,则将该事务包含的DML操作和/或者DDL操作缓存至具有该事务的事务标识的缓存集合。另外,缓存集合中还可以缓存事务包含的DML操作的操作类型(例如更新,删除或插入)和/或者DDL操作的操作类型(例如创建、修改、或删除)、操作值、以及所操作的行的标识例如键值也就是主键值。并且,该缓存集合中缓存的信息均可作为待回放事务的一部分,与待回放事务共同发送至目的节点。
阶段2:若对于待回放事务的每个修改为DML操作,则目的节点根据该DML操作对应的主键值定位到待修改的表的行(tuple),进而对所定位的行中的记录回放该DML操作,从而实现对所定位的行中的记录的修改。若对于待回放事务的每个修改为DDL操作,则目的节点根据该DDL操作对应的表的标识,定位到待修改的表,进而对所定位的表回放该DDL操作,从而实现对所定位表的修改。当待回放事务回放完成后,目的节点可以对该待回放事务进行提交,将回放结果存储至表中。具体的,目的节点创建多个队列,为每个队列启动一个线程,例如线程thr1至thrn,该线程用于从队列中读取并回放待回放事务。为了实现基于快照隔离的并行回放,目的节点将某一事务T1插入至某一队列前,要等待第二目标队列满足的时间戳条件:第二目标队列中未回放完成的事务的提交时间戳均大于或等于事务T1的开始时间戳。当时间戳条件满足,则从队列Q1至队列Qn中确定第一目标队列,并将待回放事务插入第一目标队列。
为了便于理解,下面示例性说明的形式对上述部分实施例进行整合描述。示例性的,如图5所示,本说明书一个实施例提供的一种事务回放方法的处理过程流程图,包括如下步骤:
S502,获取待回放事务的目标对象标识,从各队列中查找目标对象标识对应的第一目标队列。执行S504至S508,或者,S510至S514。
S504,分别比较待回放事务的开始时间戳与第二目标队列中所有未完成回放的事务的提交时间戳。
S506,若待回放事务的开始时间戳不大于第二目标队列中所有未完成回放的事务的提交时间戳,则将待回放事务插入第一目标队列进行回放。
S508,若第二目标队列中存在未完成回放的第一事务的提交时间戳小于待回放事务的开始时间戳,则等待第一事务完成回放。
S510,比较待回放事务的开始时间戳与最小提交时间戳。
S512,若待回放事务的开始时间戳不大于最小提交时间戳,则将待回放事务插入第一目标队列进行回放。
S514,若待回放事务的开始时间戳大于最小提交时间戳,则等待第二目标队列中未回放完成的事务完成回放。
本实施例与上述部分实施例中描述相同的步骤为同一步骤,在此不再赘述,详见上述实施例的描述。
与上述方法实施例相对应,本说明书还提供了事务回放装置实施例,图6示出了本说明书一个实施例提供的一种事务回放装置的结构示意图。如图6所示,该装置包括:
数据获取模块602,被配置为获取待回放事务、以及所述待回放事务的开始时间戳;
队列确定模块604,被配置为确定所述待回放事务待插入的第一目标队列,所述第一目标队列中记录的事务与所述待回放事务存在串行回放的执行关系;
事务回放模块606,被配置为在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,其中,所述第二目标队列与所述第一目标队列分别记录有进行回放的事务和事务的提交时间戳,所述第二目标队列与第一目标队列之间的事务并行回放。
本说明书一个实施例中,第一目标队列中记录的事务与待回放事务存在串行回放的执行关系;第二目标队列与第一目标队列分别记录有进行回放的事务和事务的提交时间戳,第二目标队列与第一目标队列之间的事务并行回放。因此,若待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳,则表明待回放事务无法看到第二目标队列记录的事务,待回放事务与第二目标队列记录的事务之间不存在读写依赖关系,待回放事务与第二目标队列记录的事务可以并行执行。并且,二目标队列与第一目标队列之间的事务并行回放。因此,将待回放事务插入第一目标队列进行回放,可以保证事务回放效率的提高。并且,第一目标队列记录的事务存在串行回放的执行关系,可以保证存在读写依赖关系的事务能够准确执行。因此,本方案可以兼顾事务回放准确度的保证和效率的提高。
在一种可选的实施方式中,所述指定提交时间戳包括:所述第二目标队列中所有未完成回放的事务的提交时间戳;
所述事务回放模块606,进一步被配置为:
分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳;
若所述待回放事务的开始时间戳不大于所述第二目标队列中所有未完成回放的事务的提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
在一种可选的实施方式中,所述事务回放模块606,进一步被配置为:
在所述分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳之后,若所述第二目标队列中存在未完成回放的第一事务的提交时间戳小于所述待回放事务的开始时间戳,则等待所述第一事务完成回放。
在一种可选的实施方式中,所述指定提交时间戳为:所述第二目标队列中未完成回放的事务的最小提交时间戳;
所述事务回放模块606,进一步被配置为:
比较所述待回放事务的开始时间戳与所述最小提交时间戳;
若所述待回放事务的开始时间戳不大于所述最小提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
在一种可选的实施方式中,所述事务回放模块606,进一步被配置为:
在所述比较所述待回放事务的开始时间戳与所述最小提交时间戳之后,若所述待回放事务的开始时间戳大于所述最小提交时间戳,则等待第二目标队列中未回放完成的事务完成回放。
在一种可选的实施方式中,所述事务回放模块606,还被配置为:
在所述将所述待回放事务插入所述第一目标队列进行回放之后,若在达到预设时长阈值时,未对所述待回放事务执行回放,则从所述第二目标队列中,确定回放总时长最短的第三目标队列,其中,任一队列的回放总时长为该队列中未回放事务均完成回放所需的总时长;
从当前的第一目标队列中取出所述待回放事务,并插入所述第三目标队列。
在一种可选的实施方式中,所述数据获取模块602,进一步被配置为:
获取对目标对象生成快照的快照时间戳、以及所述目标对象的数据库日志;
解析所述数据库日志,获得提交时间戳大于或者等于所述快照时间戳的事务,作为所述待回放事务。
在一种可选的实施方式中,任一事务对应有一个事务标识;
所述数据获取模块602,还被配置为:
在解析所述目标对象的数据库日志的过程中,若解析得到中止信息,则获取所述中止信息对应的事务标识;
从缓存区中删除所述事务标识对应的事务。
在一种可选的实施方式中,所述队列确定模块604,进一步被配置为:
获取所述待回放事务的目标对象标识;
从各队列中查找所述目标对象标识对应的第一目标队列。
上述为本实施例的一种事务回放装置的示意性方案。需要说明的是,该事务回放装置的技术方案与上述的事务回放方法的技术方案属于同一构思,事务回放装置的技术方案未详细描述的细节内容,均可以参见上述事务回放方法的技术方案的描述。
图7示出了根据本说明书一个实施例提供的一种计算设备700的结构框图。该计算设备700的部件包括但不限于存储器710和处理器720。处理器720与存储器710通过总线730相连接,数据库750用于保存数据。
计算设备700还包括接入设备740,接入设备740使得计算设备700能够经由一个或多个网络760通信。这些网络的示例包括公用交换电话网(PSTN,Public SwitchedTelephone Network)、局域网(LAN,Local Area Network)、广域网(WAN,Wide AreaNetwork)、个域网(PAN,Personal Area Network)或诸如因特网的通信网络的组合。接入设备740可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC,NetworkInterface Controller))中的一个或多个,诸如IEEE802.11无线局域网(WLAN,WirelessLocal Area Networks)无线接口、全球微波互联接入(Wi-MAX,WorldwideInteroperability for Microwave Access)接口、以太网接口、通用串行总线(USB,Universal Serial Bus)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC,Near FieldCommunication)接口,等等。
在本说明书的一个实施例中,计算设备700的上述部件以及图7中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图7所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备700可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备700还可以是移动式或静止式的服务器。
其中,处理器720用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述事务回放方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的事务回放方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述事务回放方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述事务回放方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的事务回放方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述事务回放方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述事务回放方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的事务回放方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述事务回放方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (13)
1.一种事务回放方法,包括:
获取待回放事务、以及所述待回放事务的开始时间戳;
确定所述待回放事务待插入的第一目标队列,所述第一目标队列中记录的事务与所述待回放事务存在串行回放的执行关系;
在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,其中,所述第二目标队列与所述第一目标队列分别记录有进行回放的事务和事务的提交时间戳,所述第二目标队列与所述第一目标队列之间的事务并行回放。
2.根据权利要求1所述的方法,所述指定提交时间戳包括:所述第二目标队列中所有未完成回放的事务的提交时间戳;
所述在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,包括:
分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳;
若所述待回放事务的开始时间戳不大于所述第二目标队列中所有未完成回放的事务的提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
3.根据权利要求2所述的方法,在所述分别比较所述待回放事务的开始时间戳与所述第二目标队列中所有未完成回放的事务的提交时间戳之后,还包括:
若所述第二目标队列中存在未完成回放的第一事务的提交时间戳小于所述待回放事务的开始时间戳,则等待所述第一事务完成回放。
4.根据权利要求1所述的方法,所述指定提交时间戳为:所述第二目标队列中未完成回放的事务的最小提交时间戳;
所述在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,包括:
比较所述待回放事务的开始时间戳与所述最小提交时间戳;
若所述待回放事务的开始时间戳不大于所述最小提交时间戳,则将所述待回放事务插入所述第一目标队列进行回放。
5.根据权利要求4所述的方法,在所述比较所述待回放事务的开始时间戳与所述最小提交时间戳之后,还包括:
若所述待回放事务的开始时间戳大于所述最小提交时间戳,则等待所述第二目标队列中未回放完成的事务完成回放。
6.根据权利要求1至5任一项所述的方法,所述确定所述待回放事务待插入的第一目标队列,包括:
获取所述待回放事务的目标对象标识;
从各队列中查找所述目标对象标识对应的第一目标队列。
7.根据权利要求1至5任一项所述的方法,在所述将所述待回放事务插入所述第一目标队列进行回放之后,还包括:
若在达到预设时长阈值时,未对所述待回放事务执行回放,则从所述第二目标队列中,确定回放总时长最短的第三目标队列,其中,任一队列的回放总时长为该队列中未回放事务均完成回放所需的总时长;
从当前的第一目标队列中取出所述待回放事务,并插入所述第三目标队列。
8.根据权利要求1至5任一项所述的方法,所述获取待回放事务,包括:
获取对目标对象生成快照的快照时间戳、以及所述目标对象的数据库日志;
解析所述数据库日志,获得提交时间戳大于或者等于所述快照时间戳的事务,作为所述待回放事务。
9.根据权利要求8所述的方法,任一事务对应有一个事务标识;还包括:
在解析所述目标对象的数据库日志的过程中,若解析得到中止信息,则获取所述中止信息对应的事务标识;
从缓存区中删除所述事务标识对应的事务。
10.一种事务回放装置,包括:
数据获取模块,被配置为获取待回放事务、以及所述待回放事务的开始时间戳;
队列确定模块,被配置为确定所述待回放事务待插入的第一目标队列,所述第一目标队列中记录的事务与所述待回放事务存在串行回放的执行关系;
事务回放模块,被配置为在所述待回放事务的开始时间戳不大于第二目标队列的指定提交时间戳的情况下,将所述待回放事务插入所述第一目标队列进行回放,其中,所述第二目标队列与所述第一目标队列分别记录有进行回放的事务和事务的提交时间戳,所述第二目标队列与所述第一目标队列之间的事务并行回放。
11.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至9任意一项所述事务回放方法的步骤。
12.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至9任意一项所述事务回放方法的步骤。
13.一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行权利要求1至9任意一项所述事务回放方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111464744.5A CN114356508A (zh) | 2021-12-02 | 2021-12-02 | 事务回放方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111464744.5A CN114356508A (zh) | 2021-12-02 | 2021-12-02 | 事务回放方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114356508A true CN114356508A (zh) | 2022-04-15 |
Family
ID=81097728
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111464744.5A Pending CN114356508A (zh) | 2021-12-02 | 2021-12-02 | 事务回放方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356508A (zh) |
-
2021
- 2021-12-02 CN CN202111464744.5A patent/CN114356508A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10990610B2 (en) | Synchronization on reactivation of asynchronous table replication | |
US11360998B2 (en) | Database management system and method of operation | |
US11327958B2 (en) | Table replication in a database environment | |
CN108932282B (zh) | 一种数据库迁移方法、装置和存储介质 | |
CN102402596B (zh) | 一种主从分离数据库的读写方法和系统 | |
CN111797121B (zh) | 读写分离架构业务系统的强一致性查询方法、装置及系统 | |
US9020916B2 (en) | Database server apparatus, method for updating database, and recording medium for database update program | |
US20150149409A1 (en) | Dml replication with logical log shipping | |
WO2022017347A1 (zh) | 分布式数据库系统及数据处理方法 | |
JP2022531867A (ja) | データ読み取り方法、装置、コンピュータ装置及びコンピュータプログラム | |
US11640411B2 (en) | Data replication system | |
CN113204571B (zh) | 涉及写入操作的sql执行方法、装置及存储介质 | |
CN116108057B (zh) | 一种分布式数据库访问方法、装置、设备及存储介质 | |
TWI774643B (zh) | 資料庫操作方法及裝置 | |
US7194486B2 (en) | Method and system for data processing with data replication for the same | |
CN115509694A (zh) | 一种事务处理方法、装置、电子设备及存储介质 | |
CN110955719B (zh) | 一种数据存取处理设备、系统和方法 | |
CN113946628A (zh) | 一种基于拦截器的数据同步方法及装置 | |
CN113139017A (zh) | 一种数据同步方法、装置、电子设备及存储介质 | |
CN113760902A (zh) | 数据拆分方法、装置、设备、介质及程序产品 | |
CN114356508A (zh) | 事务回放方法以及装置 | |
CN114741453A (zh) | 数据同步的方法、系统及计算机可读存储介质 | |
CN113297320B (zh) | 分布式数据库系统及数据处理方法 | |
CN111240891A (zh) | 基于数据库多表间数据一致性的数据恢复方法及装置 | |
CN118035255A (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 |