CN114661816B - 数据同步方法、装置、电子设备、存储介质 - Google Patents
数据同步方法、装置、电子设备、存储介质 Download PDFInfo
- Publication number
- CN114661816B CN114661816B CN202011549237.7A CN202011549237A CN114661816B CN 114661816 B CN114661816 B CN 114661816B CN 202011549237 A CN202011549237 A CN 202011549237A CN 114661816 B CN114661816 B CN 114661816B
- Authority
- CN
- China
- Prior art keywords
- transaction
- global transaction
- global
- sub
- log
- 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
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- 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
-
- 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
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
-
- 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
-
- 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
Abstract
本申请实施例涉及数据库领域,特别涉及一种数据同步方法、装置、电子设备、存储介质。本申请提出的数据同步方法,根据分片的事务日志获取待回放的子事务日志;根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库,避免了将未提交数据同步到下游数据库的问题,另外,本实施例以分片为粒度,分布式数据库中的分片根据全局事务快照表确定能够回放的子事务日志,便于实现各分片间的并发,提高数据同步的效率。
Description
技术领域
本申请实施例涉及数据库领域,特别涉及一种数据同步方法、装置、电子设备、存储介质。
背景技术
分布式数据库作为面向交易的处理系统(On-Line Transaction Processing,简称“OLTP”),需要定期将数据卸载到分析系统,如数据仓库,以供其他系统进行后续分析处理。分布式数据库中存在多个数据分片,分片间并发同步数据具有较高性能,分布式数据库将数据卸载到分析系统时,会将各分片产生的全局事务的子事务日志回放到下游数据库。
然而,在分布式数据库存在跨分片的全局事务,该跨分片的全局事务包括多个子事务,多个子事务在多个数据分片执行的情况下,若某分片上的跨分片全局事务对应的子事务已经产生日志,该跨分片全局事务中有部分子事务并未产生日志,即,该全局事务可能未提交或待回滚,相关技术会将分片中已经产生的子事务日志会回放到下游数据库,使得未提交的数据也会同步到下游数据库,即产生了未提交读的问题。
发明内容
本申请实施例的主要目的在于提出一种数据同步方法、装置、电子设备、存储介质,能够避免未提交的数据同步到下游数据库,解决未提交读的问题。
为实现上述目的,本申请实施例提供了一种数据同步方法,包括:根据分片的事务日志获取待回放的子事务日志;根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库。
为实现上述目的,本申请实施例还提供了一种数据同步装置,包括:子事务日志获取模块,用于根据分片的事务日志获取待回放的子事务日志;已提交全局事务判断模块,根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;回放模块,在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库。
为实现上述目的,本申请实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的数据同步方法。
为实现上述目的,本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据同步方法。
本申请提出的数据同步方法,根据分片的事务日志获取待回放的子事务日志;根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库,避免了将未提交数据同步到下游数据库的问题,另外,本实施例以分片为粒度,分布式数据库中的分片根据全局事务快照表确定能够回放的子事务日志,便于实现各分片间的并发,提高数据同步的效率。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定。
图1是根据本发明第一实施例中的数据同步系统的示意图;
图2是根据本发明第一实施例中的更新全局事务快照表的流程图;
图3是根据本发明第一实施例中的数据同步方法的流程图;
图4是根据本发明第一实施例中的事务日志解析示意图;
图5是根据本发明第二实施例中的数据同步方法的流程图;
图6是根据本发明第三实施例中的数据同步装置的流程图;
图7是根据本发明第四实施例中的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
本发明的第一实施例涉及一种数据同步方法。参照图1所示,可以用于实现本发明第一实施例中的数据同步方法的数据同步系统包括:上游数据库,即分布式数据库101,数据同步工具102,下游数据库103。
分布式数据库101中包括:全局事务管理器、计算节点、数据分片。数据分片,可以简称为分片。全局事务管理器(GTM,Global Transaction Manager)用于创建和释放全局事务编号(GTID),维护活跃全局事务列表,活跃全局事务列表也称为全局事务快照(snapshot),活跃全局事务为分布式数据库中处于启动但是未提交状态的全局事务。全局事务管理器记录了当前活跃全局事务列表,活跃全局事务列表包括当前分布式数据库中所有处于活跃状态的全局事务的全局事务编号(GTID)。当某个全局事务开始时,GTM会将其GTID记录到该列表中;当某个全局事务提交时,GTM将该事务对应的GTID从中剔除。计算节点用于分布式数据库中的全局事务解析和执行。数据分片是负责数据的本地存储和本地执行,生成本地的事务日志,该事务日志会记录分片中的表在修改前和修改后的数据行。
分布式数据库101支持复制表模式。关于复制表模式,分布式数据库可以按照一定规则将一个大表的数据分散到多个数据分片上,每个分片存储该表的一部分数据,且各不相同,除此之外,针对数据规模较小的表可以采用复制表模式,即每个数据分片上都保存该表完整数据,并且每个分片上的数据都是相同的。复制表更新也属于一种全局事务,复制表中的数据更新时,每个分片一起更新成功,否则所有分片均回滚到更新前状态。本实施例中的全局事务快照表采用复制表模式,即分布式数据库中的每个分片中均存有全局事务快照表,全局事务快照表用于表示全局事务的提交状态。全局事务快照表更新,相当于对分布式数据库101中的各数据分片的全局事务快照表的数据进行更新,在更新过程中,计算节点将全局事务管理器(GTM)上的数据更新到每个数据分片的全局事务快照表中,例如,计算节点向全局事务管理器查询当前的活跃全局事务列表,并将当前查询到的活跃全局事务列表更新到每个数据分片中。
值得一提的是,更新全局事务快照表也为分布式数据库的全局事务,在分片中的全局事务快照表更新时,每个分片会产生与更新全局事务快照表的全局事务对应的子事务日志,子事务日志记录修改前的记录行值和修改后的记录行值。分布式数据库101以预设周期更新全局快照表,每隔预设周期每个分片的日志流中会生成一个全局快照点,也就是说,全局快照点是定期更新全局事务快照表时,每个数据分片的日志流中产生的日志记录。当全局快照表更新时,每个数据分片产生一个子事务日志,该子事务日志记录全局快照表变更前后的数据行。数据同步工具解析该日志记录后,可以获得的当前全局事务快照表。由于该表是复制表,每个数据分片的日志流中均产生相同的日志记录,通过该日志记录中的信息,数据同步进程之间可以进行同步控制。每隔预设时长生成全局快照点的流程如图2所示。
步骤201,计算节点根据配置的预设周期,向全局事务管理器获取当前的活跃全局事务列表。
示例性的,计算节点根据配置的定时器,如配置5秒,即预设周期为5s,向全局事务管理器获取当前的活跃全局事务列表。
步骤202,计算节点将活跃全局事务列表写到各分片的全局事务快照表。
步骤203,每个数据分片在该事务提交时,向日志复制流写入全局事务快照表更新日志。更新日志记录了全局事务快照表更新前的行记录值和修改后的行记录值。
数据同步工具102中包括多个日志采集回放进程和分布式锁资源。每个日志采集回放进程分别一一对应分布式数据库101中的每个数据分片,接收数据分片的事务日志,并进行处理,将处理得到的SQL语句传输到下游数据库103,即进行回放。数据同步工具102中的分布式锁资源可以由ZoomKeeper等开源软件提供,多个日志采集回放进程向分布式锁资源争强主控制节点,获得主控权限的进程协调其他节点进行日志回放。
需要说明的是,图1中所示的数据同步工具102可以为独立的设备,也可以集成于分布式数据库101,或者下游数据库103。
下面以数据同步方法应用在数据同步工具102为例进行说明,数据同步工具可以应用在服务器,也可以是其他电子设备。本实施例的数据同步方法包括:根据分片的事务日志获取待回放的子事务日志;根据全局事务快照表检测所述子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;在确定所述子事务日志所属的全局事务属于已提交的全局事务后,将所述子事务日志回放到下游数据库。本实施例在全局事务提交时,子事务才会回放到下游数据库,避免了未提交读的问题,另外,本实施例可以分片为粒度,每个分片根据全局事务快照表确定能够回放的子事务日志,便于实现各分片间的并发,提高数据同步效率。
下面结合本发明第一实施例中的数据同步方法的流程图图3对本实施例中的数据同步方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
步骤301,根据分片的事务日志获取待回放的子事务日志。
在一个例子中,创建与分布式数据库中的各分片一一对应的进程,进程用于根据分片的事务日志获取待回放的子事务日志。该实现中,一个进程对应一个分片,进行对应分片的事务日志的解析,可以为数据库中的多个分片创建多个进程同时解析事务日志,便于实现分片间的并发。
示例性的,数据同步工具创建与分布式数据库中的各分片一一对应的日志采集回放进程,每个日志采集回放进程从分布式数据库101的对应分片节点中获取分片的事务日志并解析分片的事务日志,将从分片的事务日志中解析出来但未回放的子事务日志称为待回放的子事务日志,将待回放的子事务日志按解析顺序暂存起来,并标记每条待回放的子事务日志所属的全局事务编号GTID,所有待回放的子事务日志所属的全局事务编号构成的GTID列表,称为待回放列表。例如,如表1所示的待回放列表A,包含的GTID列表为7,8,9,10,11,12;待回放列表B,包含的GTID列表为4,5,6,7,8,9;待回放列表C,包含的GTID列表为1,2,3,4,5。
表1
待回放列表 | 待回放的子事务日志所属的全局事务编号 |
C:7,8,9,10,11,12 | 日志7,日志8,日志9,日志10,日志11,日志12 |
B:4,5,6,7,8,9 | 日志4,日志5,日志6,日志7,日志8,日志9 |
A:1,2,3,4,5 | 日志1,日志2,日志3,日志4,日志5 |
步骤302,根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务。
在一个例子中,进程用于根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务。
在一个例子中,全局事务快照表包括:活跃全局事务列表;活跃全局事务列表记录处于活跃状态的全局事务的编号;若所述待回放的子事务日志所属的全局事务的全局事务编号在所述活跃全局事务列表中,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务。该实现中,与活跃全局事务列表对比,确定未提交的全局事务编号。
在一个例子中,全局事务快照表还包括:更新本表的全局事务对应的全局事务编号。具体地说,更新全局事务快照表为一个分布式的全局事务,该全局事务的编号即为更新本表的全局事务对应的全局事务编号,值得一提的是,分布式数据库中自身有系统隐藏列,记录修改该记录行的全局事务编号,也就是说更新本表的全局事务对应的全局事务编号为系统列。
示例性的,日志采集回放进程在解析分片的事务日志时,也会解析到对全局事务快照表更新的子事务日志,将该子事务日志的GTID值,也就是更新本表的全局事务对应的全局事务编号作为全局事务快照表的标识,该标识用于唯一标识全局事务快照表,即不同的标识指示不同的全局事务快照表。同时也标识上述的全局快照点。由于全局事务快照表为复制表,因此每个日志采集回放进程均能解析到相同的全局事务快照表。日志采集回放进程将当前待回放列表与全局事务快照表中的活跃全局事务列表snapshot进行对比,如果一个全局事务编号出现在当前待回放列表中,也出现在全局事务快照,也就是活跃全局事务列表中,则表明该全局事务不属于已提交事务,如果一个全局事务编号出现在当前待回放列表中,未出现在全局事务快照,也就是活跃全局事务列表中,则表明该全局事务属于已提交事务该事务对应的子事务日志可以回放到下游数据库。
下面结合具体的例子简要阐述,如图4所示,图4中的圆形代表全局快照点对应的活跃全局事务列表snapshot,log代表解析出的待回放列表。全局事务编号1,2,3出现在待回放列表A中而未出现在snapshot2中,表明1,2,3这三个事务属于全局提交,而全局事务编号4,5出现在待回放列表A中,也出现在snapshot2中,则表明4,5不属于已提交全局事务。以此类推,全局事务编号4,5,6出现在待回放列表B中,而未出现在snapshot3中,表明在snapshot3产生前已全局提交,而全局事务编号7,8,9出现在待回放列表B中也出现在snapshot3中,则表明7,8,9不属于已提交的全局事务。全局事务编号7,8,9,10出现在待回放列表C中,而未出现在sanpshot4中,表明在snapshot4前已全局提交,而全局事务编号11,12出现在待回放列表C中也出现在snapshot4中,则表明11,12不属于已提交的全局事务。
在另一个例子中,全局事务快照表还包括:当前最大已提交的全局事务编号;若所述待回放的子事务日志所属的全局事务的全局事务编号不在所述活跃全局事务列表中,则判断所述待回放的子事务日志所属的全局事务的全局事务编号是否大于所述当前最大已提交的全局事务编号;若所述待回放的子事务日志所属的全局事务的全局事务编号大于所述当前最大已提交的全局事务编号,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务;否则,所述待回放的子事务日志所属的全局事务属于已提交的全局事务。
也就是说,通过全局事务快照表中的活跃全局事务列表确定未提交全局事务之后,对于未被确定的全局事务所属的全局事务编号还需与当前最大已提交的全局事务编号进行比较,确定已提交的全局事务编号,而不是将通过与活跃全局事务列表确定的未提交全局事务之外的全局事务都作为已提交的全局事务。该实现中,避免待回放列表中的子事务日志所属的全局事务的全局事务编号在当前的全局事务快照表之后产生,未记录到全局快照表中的情况,使得对已提交的全局事务的判断更加准确。全局事务编号按照全局事务产生的时间顺序先后进行编号的,在全局事务快照表之后产生的全局事务的全局事务标号比全局事务快照表中的任意出现的编号都大,即比当前最大已提交的全局事务编号大。
示例性的,全局事务快照表中当前最大已提交的全局事务标号为20,而在更新该全局事务快照表之后,产生了全局事务编号为21的全局事务,该全局事务也处于活跃状态,即未提交状态,但是因为在该全局事务快照表之后产生,所以不会在该全局事务快照表的活跃全局事务列表中,为避免将全局事务编号21的全局事务确定为已提交的全局事务,将全局事务编号与最大已提交全局事务编号对比,21大于最大已提交全局事务编号20,则全局事务编号21对应的全局事务为未提交全局事务。下表2为包括当前最大已提交的全局事务编号的全局快照表的表结构示意图。
表2
上表的数据规模较小,该表可以只有一条记录,采用复制表模式也不会过多占用硬件和软件资源,全局事务快照表的表结构如表2所示,以下结合表2,判断一个全局事务是否为全局提交的规则如下,另外,为了与表中出现的GTID区分,将待判断的全局事务编号记作GTID_1:
如果在GTIDLIST中找到GTID_1,则该GTID_1标识的全局事务为活跃状态,未全局提交,不属于已全局提交事务;否则,如果GTID_1大于MAXGTID,即当前最大已提交事务编号,则GTID_1标识的全局事务为活跃状态,未全局提交;否则,GTID_1小于等于MAXGTID,则该GTID_1已全局提交。
另外,全局事务快照表是以预设周期更新的,例如上例中5秒更新一次,每隔5秒计算节点会向全局事务管理器查询当前的GTIDLIST和MAXGTID,使用查询到的GTIDLIST和MAXGTID对全局事务快照表更新,并将更新全局快照表这一全局事务的全局事务编号,即全局更新快照表中的GTID也进行更新,将更新后的全局事务快照表更新前的行记录值和更新后的行记录值记录到分片的事务日志中,因此,每隔一段时间会从分片的事务日志中解析出一个更新的全局事务快照表,例如,在根据以预设周期更新的全局事务快照表检测待回放的子事务日志所属的全局事务是否属于已提交的全局事务时,使用的字段GTID为30全局事务快照表,过了一段时间,从分片事务日志中解析出字段GTID为40的全局事务快照表,此时,已经完成了根据字段GTID为30的全局事务快照表检测待回放的子事务日志所属的全局事务是否属于已提交的全局事务的步骤,接下来根据字段GTID为40的全局事务快照表检测待回放的子事务日志所属的全局事务是否属于已提交的全局事务。
步骤303,在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库。
在一个例子中,确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测;将根据所述同一全局事务快照表检测的属于已提交全局事务的待回放的子事务日志作为目标子事务日志;将所述目标子事务日志回放到下游数据库。该实现中,各分片将根据同一全局事务快照表检测得到的已提交的全局事务对应的子事务同步进行回放,避免各分片间回放数据不一致的问题,使分片间数据同步进度相同。例如:将数据同步到下游数据库。
需要说明的是,全局事务快照表标识只要能用于指示一个全局事务快照表即可,可以是该全局事务快照表的更新时间,也可以是全局事务快照表中的字段GTID的值,此处不做限制。本实施例以全局事务快照表标识为全局事务快照表中的字段GTID的值为例。
示例性的,日志采集回放进程基于某一全局事务快照表进行检测,检测完成之后,会发送检测完成通知,检测完成通知包括与该全局事务快照表对应的全局事务快照表标识,在数据同步工具创建一个模块,该模块用于获取各日志采集回放进程的发送的检测完成通知,根据检测完成通知确认分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测,之后,发出回放命令给各日志采集回放进程进程,回放命令包括上述的同一全局事务快照表的全局事务快照表标识,各日志采集回放进程会将根据同一全局事务快照表标识指示的全局事务快照表检测出的属于已提交全局事务的子事务日志回放到下游数据库。例如:根据全局事务快照表中GTID为30的全局事务快照表检测已提交全局事务已经完成,命令模块将包括GTID为30的命令发送给各进程,各进程会将根据GTID为30的全局事务快照表确定的已提交的全局事务对应的子事务日志回放到下游数据库,根据GTID为30的全局事务快照表确定的已提交全局事务为一个跨分片事务,在数据分片1和数据分片2同时变更数据,数据分片1产生子事务A,数据分片2产生子事务B。进程1同步数据分片1,解析回放子事务A日志,进程2同步数据分片2,解析回放子事务B日志,本实施例,各日志采集回放进程会响应回放命令,数据分片1会将子事务A日志,数据分片2会将子事务B日志同步回放到下游数据库,使得各分片产生的数据能够实现并发回放,避免了各分片回放时,属于同一已提交的全局事务对应的子事务日志回放到下游数据库进度不一致的问题,例如子事务A日志回放到下游数据库,而子事务B日志为回放到下游数据库,也就是说,解决了不一致读的问题,使得分片间数据同步进度相近,从而避免因为子事务数据同步进度差异导致的下游数据库脏读。
在相关技术中,为了解决不一致读问题,也提供了一种方法,相关技术将全局事务按照先后顺序进行排序,属于同一个全局事务的多个子事务一起回放到下游,相关技术需要对所有全局事务进行排序,而且要监控各分片的全局事务对应的子事务,判断全局事务是否已提交,性能开销大,同步效率低。本实施例根据分片的事务日志获取待回放的子事务日志,各分片根据以预设周期更新的全局事务快照表检测子事务日志所属的全局事务,是否属于已提交的全局事务,在确定子事务日志所属的全局事务属于已提交的全局事务后,将所述子事务日志回放到下游数据库,能以分片产生的事务日志为粒度对事务进行并行操作,分片间的误差控制在秒级别,无需对全局事务排序,性能开销小,使得各分片间能够让每个分片并行同步数据,提高了同步效率,而且还保证了只有已提交的全局事务才会同步到下游数据库,另外,将根据同一全局事务快照表检测的属于已提交全局事务的子事务日志作为目标子事务日志,对目标子事务进行回放,使得上游数据库和下游数据库读取的数据保持实时一致,即实现了每个数据分片并行同步数据到下游数据库,性能接近于并发同步,能够保证分片间数据同步一致性。
本发明的第二实施方式涉及一种数据同步方法。第二实施方式与第一实施方式大致相同,主要区别之处在于:在第一实施方式中,数据同步工具创建一个命令发送模块,将回放命令发送给日志采集回放进程。而在本发明第二实施方式中,各日志采集回放进程除了执行上述步骤301至303之外,还需要向分布式锁资源抢占主控权限,抢占到主控权限的进程获取各进程的检测完成通知,根据检测完成通知确定回放命令中的全局事务快照表标识。
本发明第一实施例中的数据同步方法的流程图如图5所示。
步骤501,启动时刻,向分布式锁资源抢占主控权限。具体地,日志采集回放进程启动时向分布式锁抢主控权限,获得主控权限则成为主控进程,在主控权限未被占用的情况下,都可以向分布式锁资源抢占主控权限。
在一个例子中,若所述主控权限抢占成功,则拥有主控权限的进程执行接收其他分片对应的进程分别发送的检测完成通知;若所述主控权限抢占失败,则向所述主控权限抢占成功的进程发送检测完成通知,所述检测完成通知携带已完成检测的全局事务快照表的标识。
在一个例子中,在抢占主控权限成功下的情况下,拥有主控权限的进程通知所述分布式数据库中的其他分片对应的进程将根据所述同一全局事务快照表检测的属于已提交全局事务的子事务日志作为目标子事务日志,回放到所述下游数据库。
在一个例子中,在抢占主控权限成功的情况下,接收所述分布式数据库中的其他分片对应的进程分别发送的检测完成通知,所述检测完成通知携带所述同一全局事务快照表的标识。
以下,以日志采集回放进程1抢占到主控权限,日志采集回放进程m未抢占到主控权限为例。
步骤502,未抢占到主控权限时,则查询当前主控进程。具体地,日志采集回放进程m未抢占到主控权限的进程查询抢占到主控权限的进程,以便与主控权限进行信息交互,即以便向主控权限发送完成通知,接收回放命令。回放命令用于通知所述分布式数据库中的其他分片对应的进程将根据所述同一全局事务快照表检测的属于已提交全局事务的子事务日志作为目标子事务日志,回放到所述下游数据库。
步骤503,解析分片的事务日志。本步骤就是根据本发明第一实施例中的步骤301至步骤302得到当前待回放的已提交全局事务。
步骤504,发送检测完成通知。
承上例的,若日志采集回放进程m根据全局事务快照表中GTI D为30的全局事务快照表检测已提交全局事务已经完成,向日志采集回放进程1发送完成通知,完成通知包括:GTI D为30。
步骤505,发送回放命令。
承上例的,日志采集回放进程根据各进程的发送完成通知中的全局事务快照表标识确定回放命令的全局事务快照表标识,例如,主控进程收到所有进程根据全局事务快照表中GTID为30的全局事务快照表检测已提交全局事务已经完成,则主控进程,即日志采集回放进程1发送回放命令,回放命令包括GTID为30。
步骤506,将目标子事务日志回放到下游数据库。
承上例,其他进程接收到命令,会将根据全局事务快照表中GTID为30的全局事务快照表检测到的已提交的全局事务对应的目标子事务日志回放到下游数据库,主控进程也会根据生成的回放命令,将目标子事务日志回放到下游数据库,所有进程将目标子事务日志回放到下游数据库后,就实现了将根据全局事务快照表中GTID为30的全局事务快照表检测到的已提交的全局事务回放到下游数据库。
在一个例子中,若所述抢占到主控权限的进程发生故障,则释放主控权限。具体地,当抢占到主控权限的进程运行出现问题,则释放主控权限,其他进程可以重新向分布式锁资源抢占主控权限。避免因进程故障导致的上游数据库和下游数据库中数据同步发生异常,提高了健壮性。
也就是说,主控进程是多个日志采集回放进程的协调者,负责接受其他进程回放进度通知;当所有进程都解析完某个日志快照点时,命令所有进程回放到下游数据库。通过上述通知-命令机制,主控进程可以协调多个日志采集回放进程在同一个时刻回放全局事务,解决了某些进程处理延迟导致进程之间回放进度偏差越来越大的问题,下游数据库的数据处于全局一致状态。主控进程本身也复制日志采集回放工作,如果主控制节点故障,其他进程可以重新抢主,继续工作,也提高了健壮性。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明第三实施方式涉及一种数据同步装置,如图6所示,包括:子事务日志获取模块601,用于根据分片的事务日志获取待回放的子事务日志;已提交全局事务检测模块602,用于根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;回放模块603,用于在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库。
子事务日志获取模块601进一步用于创建与所述分片一一对应的进程;所述进程用于执行所述根据分片的事务日志获取待回放的子事务日志、所述根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务,以及所述在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库。
回放模块603进一步用于确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测;所述将所述待回放的子事务日志回放到下游数据库,包括:将根据所述同一全局事务快照表检测的属于已提交全局事务的待回放的子事务日志作为目标子事务日志;将所述目标子事务日志回放到下游数据库。
回放模块603进一步用于通知所述分布式数据库中的其他分片对应的进程将根据所述同一全局事务快照表检测的属于已提交全局事务的待回放的子事务日志作为目标子事务日志,回放到所述下游数据库。
回放模块603进一步用于接收所述分布式数据库中的其他分片对应的进程分别发送的检测完成通知,所述检测完成通知携带所述同一全局事务快照表的标识。
回放模块603进一步用于抢占所述主控权限;若所述主控权限抢占成功,则执行所述接收所述其他分片对应的进程分别发送的检测完成通知;若所述主控权限抢占失败,则向所述主控权限抢占成功的进程发送检测完成通知,所述检测完成通知携带已完成检测的全局事务快照表的标识。
已提交全局事务检测模块602进一步用于若所述待回放的子事务日志所属的全局事务的全局事务编号在所述活跃全局事务列表中,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务;其中,所述全局事务快照表包括:活跃全局事务列表;所述活跃全局事务列表记录处于活跃状态的全局事务的编号。
已提交全局事务检测模块602进一步用于若所述待回放的子事务日志所属的全局事务的全局事务编号不在所述活跃全局事务列表中,则判断所述待回放的子事务日志所属的全局事务的全局事务编号是否大于所述当前最大已提交的全局事务编号;若所述待回放的子事务日志所属的全局事务的全局事务编号大于所述当前最大已提交的全局事务编号,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务;否则,所述待回放的子事务日志所属的全局事务属于已提交的全局事务;其中,所述全局事务快照表还包括:当前最大已提交的全局事务编号。
不难发现,本实施方式为与第一实施方式相对应的系统实施例,本实施方式可与第一实施方式互相配合实施。第一实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
本发明第四实施方式涉及一种电子设备,如图7所示,包括至少一个处理器701;以及,与所述至少一个处理器通信连接的存储器702;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的数据同步方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本发明第五实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (9)
1.一种数据同步方法,其特征在于,包括:
根据分片的事务日志获取待回放的子事务日志;
根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;
在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库;
在所述根据分片的事务日志获取待回放的子事务日志之前,包括:
创建与分布式数据库中的各分片一一对应的进程;所述进程用于执行所述根据分片的事务日志获取待回放的子事务日志、所述根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务,以及所述在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库;
在所述确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库之前,还包括:
确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测;
所述将所述待回放的子事务日志回放到下游数据库,包括:
将根据所述同一全局事务快照表检测的属于已提交全局事务的子事务日志作为目标子事务日志;
将所述目标子事务日志回放到下游数据库。
2.根据权利要求1所述的数据同步方法,其特征在于,在所述确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测后,还包括:
通知所述分布式数据库中的其他分片对应的进程将根据所述同一全局事务快照表检测的属于已提交全局事务的子事务日志作为目标子事务日志,回放到所述下游数据库。
3.根据权利要求1所述的数据同步方法,其特征在于,所述确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测,包括:
接收所述分布式数据库中的其他分片对应的进程分别发送的检测完成通知,所述检测完成通知携带所述同一全局事务快照表的标识。
4.根据权利要求3所述的数据同步方法,其特征在于,所述接收所述其他分片对应的进程分别发送的检测完成通知之前,还包括:
抢占主控权限;
若所述主控权限抢占成功,则执行所述接收所述其他分片对应的进程分别发送的检测完成通知;
若所述主控权限抢占失败,则向所述主控权限抢占成功的进程发送检测完成通知,所述检测完成通知携带已完成检测的全局事务快照表的标识。
5.根据权利要求1至4中任一项所述的数据同步方法,其特征在于,所述全局事务快照表包括:活跃全局事务列表;所述活跃全局事务列表记录处于活跃状态的全局事务的编号;
所述根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务,包括:
若所述待回放的子事务日志所属的全局事务的全局事务编号在所述活跃全局事务列表中,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务。
6.根据权利要求5所述的数据同步方法,其特征在于,所述全局事务快照表还包括:当前最大已提交的全局事务编号;
所述根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务,还包括:
若所述待回放的子事务日志所属的全局事务的全局事务编号不在所述活跃全局事务列表中,则判断所述待回放的子事务日志所属的全局事务的全局事务编号是否大于所述当前最大已提交的全局事务编号;
若所述待回放的子事务日志所属的全局事务的全局事务编号大于所述当前最大已提交的全局事务编号,则所述待回放的子事务日志所属的全局事务不属于已提交的全局事务;
否则,所述待回放的子事务日志所属的全局事务属于已提交的全局事务。
7.一种数据同步装置,其特征在于,包括:
子事务日志获取模块,用于根据分片的事务日志获取待回放的子事务日志;
已提交全局事务检测模块,用于根据以预设周期更新的全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务;其中,所述全局事务快照表用于记录全局事务的提交状态;
回放模块,用于在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库;
所述子事务日志获取模块,进一步用于创建与所述分片一一对应的进程;所述进程用于执行所述根据分片的事务日志获取待回放的子事务日志、所述根据全局事务快照表检测所述待回放的子事务日志所属的全局事务,是否属于已提交的全局事务,以及所述在确定所述待回放的子事务日志所属的全局事务属于已提交的全局事务后,将所述待回放的子事务日志回放到下游数据库;
所述回放模块,进一步用于确认所述分布式数据库中的各分片对应的进程均已完成基于同一全局事务快照表的检测;所述将所述待回放的子事务日志回放到下游数据库,包括:将根据所述同一全局事务快照表检测的属于已提交全局事务的待回放的子事务日志作为目标子事务日志;将所述目标子事务日志回放到下游数据库。
8.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至6中任一所述的数据同步方法。
9.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的数据同步方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011549237.7A CN114661816B (zh) | 2020-12-24 | 2020-12-24 | 数据同步方法、装置、电子设备、存储介质 |
PCT/CN2021/128408 WO2022134876A1 (zh) | 2020-12-24 | 2021-11-03 | 数据同步方法、装置、电子设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011549237.7A CN114661816B (zh) | 2020-12-24 | 2020-12-24 | 数据同步方法、装置、电子设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114661816A CN114661816A (zh) | 2022-06-24 |
CN114661816B true CN114661816B (zh) | 2023-03-24 |
Family
ID=82024881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011549237.7A Active CN114661816B (zh) | 2020-12-24 | 2020-12-24 | 数据同步方法、装置、电子设备、存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114661816B (zh) |
WO (1) | WO2022134876A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11669518B1 (en) * | 2021-12-14 | 2023-06-06 | Huawei Technologies Co., Ltd. | Method and system for processing database transactions in a distributed online transaction processing (OLTP) database |
CN115185787B (zh) * | 2022-09-06 | 2022-12-30 | 北京奥星贝斯科技有限公司 | 处理事务日志的方法及装置 |
CN117131071B (zh) * | 2023-10-26 | 2024-01-26 | 中国证券登记结算有限责任公司 | 一种数据处理方法、装置、电子设备及计算机可读介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073540A (zh) * | 2010-12-15 | 2011-05-25 | 北京新媒传信科技有限公司 | 分布式事务提交方法和装置 |
CN107045454A (zh) * | 2016-02-06 | 2017-08-15 | 华为技术有限公司 | 跨进程分布式事务控制方法及相关系统 |
CN109783578A (zh) * | 2019-01-09 | 2019-05-21 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
CN111433764A (zh) * | 2017-12-06 | 2020-07-17 | 华为技术有限公司 | 全局一致分片式oltp系统的高吞吐量分布式事务管理及其实现方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7890472B2 (en) * | 2007-09-18 | 2011-02-15 | Microsoft Corporation | Parallel nested transactions in transactional memory |
US8650155B2 (en) * | 2008-02-26 | 2014-02-11 | Oracle International Corporation | Apparatus and method for log based replication of distributed transactions using globally acknowledged commits |
CN103164219B (zh) * | 2013-01-08 | 2015-09-23 | 华中科技大学 | 去中心化架构中使用多类型副本的分布式事务处理系统 |
CN107797850B (zh) * | 2016-08-30 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 分布式事务处理的方法、装置与系统 |
US10942823B2 (en) * | 2018-01-29 | 2021-03-09 | Guy Pardon | Transaction processing system, recovery subsystem and method for operating a recovery subsystem |
CN109857802A (zh) * | 2018-12-12 | 2019-06-07 | 深圳前海微众银行股份有限公司 | 日志数据同步方法、装置、设备及计算机可读存储介质 |
-
2020
- 2020-12-24 CN CN202011549237.7A patent/CN114661816B/zh active Active
-
2021
- 2021-11-03 WO PCT/CN2021/128408 patent/WO2022134876A1/zh unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073540A (zh) * | 2010-12-15 | 2011-05-25 | 北京新媒传信科技有限公司 | 分布式事务提交方法和装置 |
CN107045454A (zh) * | 2016-02-06 | 2017-08-15 | 华为技术有限公司 | 跨进程分布式事务控制方法及相关系统 |
CN111433764A (zh) * | 2017-12-06 | 2020-07-17 | 华为技术有限公司 | 全局一致分片式oltp系统的高吞吐量分布式事务管理及其实现方法 |
CN109783578A (zh) * | 2019-01-09 | 2019-05-21 | 腾讯科技(深圳)有限公司 | 数据读取方法、装置、电子设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114661816A (zh) | 2022-06-24 |
WO2022134876A1 (zh) | 2022-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114661816B (zh) | 数据同步方法、装置、电子设备、存储介质 | |
US9965359B2 (en) | Log forwarding to avoid deadlocks during parallel log replay in asynchronous table replication | |
US9575849B2 (en) | Synchronized backup and recovery of database systems | |
US9727576B2 (en) | Method and system for efficient data synchronization | |
US9672244B2 (en) | Efficient undo-processing during data redistribution | |
WO2015154694A1 (en) | System and method for massively parallel processing database | |
US20050262170A1 (en) | Real-time apply mechanism in standby database environments | |
CN109522316B (zh) | 日志处理方法、装置、设备和存储介质 | |
US11748215B2 (en) | Log management method, server, and database system | |
US9990392B2 (en) | Distributed transaction processing in MPP databases | |
US10055445B2 (en) | Transaction processing method and apparatus | |
US11436110B2 (en) | Distributed database remote backup | |
WO2022002103A1 (zh) | 一种在数据节点上回放日志的方法、数据节点及系统 | |
CN109783578B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
CN113987078A (zh) | 数据同步方法、设备及计算机可读存储介质 | |
CN111930788B (zh) | 操作请求的处理方法、装置、设备、可读存储介质及系统 | |
CN112800060A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
CN110121712B (zh) | 一种日志管理方法、服务器和数据库系统 | |
CN116186082A (zh) | 基于分布式的数据汇总方法、第一服务器和电子设备 | |
CN114328749A (zh) | 业务数据处理方法及其装置、计算机可读存储介质 | |
WO2023193495A1 (zh) | 处理读请求的方法、分布式数据库与服务端 | |
CN113190281B (zh) | 一种基于rowid区间的初始化装载方法与装置 | |
CN117370454A (zh) | 数据处理方法 | |
CN117435574A (zh) | 改进的二阶段提交事务实现方法及系统、设备、存储介质 | |
CN114090609A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |