CN116881371A - 数据同步方法、装置、设备及存储介质 - Google Patents
数据同步方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116881371A CN116881371A CN202311147251.8A CN202311147251A CN116881371A CN 116881371 A CN116881371 A CN 116881371A CN 202311147251 A CN202311147251 A CN 202311147251A CN 116881371 A CN116881371 A CN 116881371A
- Authority
- CN
- China
- Prior art keywords
- data
- synchronization
- position information
- stock
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 230000001360 synchronised effect Effects 0.000 claims abstract description 94
- 238000004458 analytical method Methods 0.000 claims description 49
- 238000013507 mapping Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 11
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 238000012217 deletion Methods 0.000 description 12
- 230000037430 deletion Effects 0.000 description 12
- 238000012545 processing Methods 0.000 description 12
- 238000007792 addition Methods 0.000 description 9
- 238000012986 modification Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000013481 data capture Methods 0.000 description 6
- 230000005291 magnetic effect Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 239000002131 composite material Substances 0.000 description 2
- 235000019800 disodium phosphate Nutrition 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 241000251323 Matthiola oxyceras Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011143 downstream manufacturing Methods 0.000 description 1
- 230000005294 ferromagnetic effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000002407 reforming Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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
-
- 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/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据同步方法、装置、电子设备及存储介质。该方法包括:确定源数据库至目标数据库的存量数据同步任务完成,则获取存量数据同步任务的同步结束时刻;基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据;基于增量同步数据,更新目标数据库。如此,在确定存量数据同步任务完成后,通过存量数据同步任务的同步结束时刻和源数据库的重做日志,更新目标数据库,完成增量数据同步,从而能够实现全量同步和增量同步的无缝衔接,避免产生重复数据,提升了数据同步效率。
Description
技术领域
本申请涉及网络信息处理领域,尤其涉及一种数据同步方法、装置、设备及存储介质。
背景技术
随着互联网技术的不断发展,为了实现数据共享,数据库之间会进行数据同步。一般来说,数据库之间的数据同步方案包括:先进行存量数据同步(又称为全量数据同步),然后再进行增量数据同步。存量数据同步是指将源数据库内的存量数据全部同步至目标数据库,增量数据同步是指在存量数据同步的基础上,捕获存量数据变化的数据即增量同步数据,并同步至目标数据库中。
但是,在实际应用中,在进行存量数据同步的过程中,部分存量数据也会进行增量数据同步。如此,在存量数据同步完成后,再进行增量同步数据的同步更新,就会出现对数据的重复更新,无法实现存量数据同步和增量数据同步的无缝衔接,降低了数据的同步效率。
发明内容
有鉴于此,本申请实施例提供了一种数据同步方法、装置、设备及存储介质,旨在有效提升数据的同步效率。
本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供了一种数据同步方法,所述方法包括:
确定源数据库至目标数据库的存量数据同步任务完成,则获取所述存量数据同步任务的同步结束时刻;
基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据;
基于所述增量同步数据,更新所述目标数据库。
在一些实施例中,所述基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据,包括:
基于所述同步结束时刻和预设的映射关系,确定第一位置信息,所述第一位置信息为所述同步结束时刻对应的重做日志的位置信息,所述预设的映射关系包括各时刻与所述重做日志的位置信息的对应关系;
基于所述第一位置信息,确定所述重做日志的起始解析位置信息;
基于所述重做日志的起始解析位置信息,对所述重做日志进行解析,生成解析结果,所述解析结果包括所述源数据库的存量数据的操作信息;
基于所述操作信息对所述源数据库的存量数据进行操作,生成所述源数据库的增量同步数据。
在一些实施例中,所述重做日志的日志类型包括未提交日志和已提交日志,所述基于所述第一位置信息,确定所述重做日志的起始解析位置信息,包括:
确定所述第一位置信息对应的重做日志的日志类型是否为未提交日志,若是,则获取第二位置信息并确定所述第二位置信息为所述重做日志的起始解析位置信息,所述第二位置信息为与所述未提交日志的位置相邻的已提交日志的位置信息;
若否,则确定所述第一位置信息为所述重做日志的起始解析位置信息。
在一些实施例中,所述存量数据同步任务包括多个子存量数据同步任务,所述基于所述同步结束时刻和预设的映射关系,确定第一位置信息,包括:
基于各所述子存量数据同步任务的同步结束时刻和预设的映射关系,确定第三位置信息集合,所述第三位置信息集合中各第三位置信息为各所述子存量数据同步任务的同步结束时刻对应的重做日志的位置信息;
基于所述第三位置信息集合和预设的位置信息选取规则,确定第一位置信息,所述第一位置信息为所述第三位置信息集合中满足所述预设的位置信息选取规则的位置信息。
在一些实施例中,所述操作信息包括所述存量数据的操作位置信息和所述操作位置信息对应的操作类型信息,所述基于所述操作信息对所述源数据库的存量数据进行操作,生成所述源数据库的增量同步数据,包括:
获取所述操作位置信息对应的操作类型信息,所述操作类型信息为以下之一:***操作信息、更新操作信息和删除操作信息;
基于所述操作类型信息,对所述操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成所述源数据库的增量同步数据。
在一些实施例中,所述存量数据同步任务包括多个子存量数据同步任务,所述确定源数据库至目标数据库的存量数据同步任务完成,包括:
针对所述存量数据同步任务中的每一子存量数据同步任务,获取所述子存量数据同步任务对应的子存量同步数据;
确定每一所述子存量同步数据均同步至所述目标数据库,则确定源数据库至目标数据库的存量数据同步任务完成。
在一些实施例中,所述源数据库的存量数据包括存量数据的标识信息,所述方法还包括:
基于所述标识信息,切割所述存量数据,生成至少一个存量数据块;
基于所述至少一个存量数据块、所述子存量数据同步任务的数量和预设的分配规则,确定各所述子存量数据同步任务对应的至少一个存量数据块;
所述获取所述子存量数据同步任务对应的子存量同步数据,包括:基于所述子存量数据同步任务对应的至少一个存量数据块,生成所述子存量数据同步任务对应的子存量同步数据。
第二方面,本申请实施例提供了一种数据同步装置,所述装置包括:
获取模块,用于确定源数据库至目标数据库的存量数据同步任务完成,则获取所述存量数据同步任务的同步结束时刻;
生成模块,用于基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据;
更新模块,用于基于所述增量同步数据,更新所述目标数据库。
第三方面,本申请实施例提供了一种数据同步设备,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,所述处理器,用于运行计算机程序时,执行上述第一方面所述方法的步骤。
第四方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现上述第一方面所述方法的步骤。
本申请实施例提供的技术方案,该方法包括:确定源数据库至目标数据库的存量数据同步任务完成,则获取存量数据同步任务的同步结束时刻;基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据;基于增量同步数据,更新目标数据库。如此,在确定存量数据同步任务完成后,通过存量数据同步任务的同步结束时刻和源数据库的重做日志,更新目标数据库,完成增量数据同步,从而能够实现全量同步和增量同步的无缝衔接,避免产生重复数据,提升了数据同步效率。
附图说明
图1为本申请一实施例提供的数据同步方法的流程示意图;
图2为本申请一应用示例提供的一数据同步***的部署架构图示意图;
图3为本申请一应用示例提供的又一数据同步***的部署架构图示意图;
图4为本申请一应用示例中数据同步方案的流程示意图;
图5为本申请一应用示例中同步区间块的划分示意图;
图6为本申请一应用示例中增量数据同步的流程示意图;
图7为本申请一应用示例中解析任务进行数据重整的流程示意图;
图8为本申请实施例提供的数据同步装置的结构示意图;
图9为本申请实施例提供的数据同步设备的结构示意图。
具体实施方式
下面结合附图及实施例对本申请再作进一步详细的描述。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请。
本申请实施例提供了一种数据同步方法,应用于数据同步设备,如图1所示,该方法包括以下步骤:
步骤110:确定源数据库至目标数据库的存量数据同步任务完成,则获取存量数据同步任务的同步结束时刻。
这里,源数据库存储存量同步数据,目标数据库用于存储从源数据库同步加载的存量同步数据和增量同步数据。数据库的类型包括但不限于以下至少之一:MySQL数据库、PostgreSQL数据库、Oracle数据库和达梦数据库。源数据库和目标数据库之间的同步可以是异构数据库之间的同步,也可以是同构数据库之间的同步。
这里,在确定源数据库至目标数据库的存量数据同步任务完成,源数据库的存量数据已经同步至目标数据库中,存量数据同步完成。此时,获取存量数据同步任务的同步结束时刻。
步骤120:基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据。
这里,重做日志也叫做redo日志。重做日志记录了每个事务对数据库所作的修改操作,保证事务提交成功以后,修改的数据绝对不会丢失。例如,在数据库还未更新修改后数据就宕机,可以通过redo日志的修改记录重做一遍,就可以恢复修改的数据,保证数据不会丢失。本申请中的数据同步设备以日志采集的方式采集redo日志。
这里,基于同步结束时刻、redo日志和源数据库的存量数据,进行增量同步数据的捕获,生成增量同步数据。对于不同的数据库,其对应的数据库的增量同步数据的捕获方案不同,例如,MySQL数据库和PostgreSQL数据库,由于其本身就具有顺序日志数据解析能力(只有提交的事务数据会出现在日志流里,且保证顺序性),其可以采用日志流的形式对增量数据进行捕获,日志流是指按照时间的先后顺序获取日志。但是在Oracle、达梦这样的数据库里,增量数据的捕获依赖redo日志,需要基于redo日志进行数据库的增量同步数据捕获。
步骤130:基于增量同步数据,更新目标数据库。
这里,在生成增量同步数据后,可以基于该增量同步数据,更新目标数据库。示例性地,源数据库至目标数据库的存量数据同步任务完成时,即源数据库已经将存量数据同步至目标数据库,在此基础上,基于该增量同步数据,完成对目标数据库的更新。
本申请实施例提供的技术方案,该方法包括:确定源数据库至目标数据库的存量数据同步任务完成,则获取存量数据同步任务的同步结束时刻;基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据;基于增量同步数据,更新目标数据库。如此,在确定存量数据同步任务完成后,通过存量数据同步任务的同步结束时刻和源数据库的重做日志,更新目标数据库,完成增量数据同步,从而能够实现全量同步和增量同步的无缝衔接,避免产生重复数据,提升了数据同步效率。
在一些实施例中,基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据,包括:
基于同步结束时刻和预设的映射关系,确定第一位置信息,第一位置信息为同步结束时刻对应的重做日志的位置信息,预设的映射关系包括各时刻与重做日志的位置信息的对应关系;
基于第一位置信息,确定重做日志的起始解析位置信息;
基于重做日志的起始解析位置信息,对重做日志进行解析,生成解析结果,解析结果包括源数据库的存量数据的操作信息;
基于操作信息对源数据库的存量数据进行操作,生成源数据库的增量同步数据。
这里,对于每个重做日志来说,都对应一个日志生成时刻和一个位置信息。示例性地,对于redo日志表来说,在该表中,每一条redo日志,都有其对应的位置信息。redo日志的位置信息可以为redo日志的位点信息。该预设的映射关系可以预先存储于数据同步设备中,该映射关系包括各日志生成时刻与重做日志的位置信息的对应关系。在该映射关系中,可以查找出同步结束时刻对应的redo日志的位置信息即第一位置信息。
这里,生成增量同步数据的过程中,在对日志进行解析之前,需要确定redo日志的起始解析位置信息,即从redo日志的哪个位置开始解析。这里,可以基于第一位置信息,确定重做日志的起始解析位置信息。
这里,在确定redo日志的起始解析位置后,可以对redo日志进行解析,源数据库一般都会有解析进程,该进程持续监控redo日志,并对redo日志进行的解析,解析出一系列的操作信息,得出相关的源数据库的存量数据的操作信息即解析结构。由于数据库中,可以多用户共同使用,所以每个用户连接成功后,可以分别独立开启事务进行增删改操作及提交,这些操作会随着用户的执行立即写入redo日志中。因此redo文件即redo日志解析出的事务在一段时间内会同时存在多个事务的情况,每个事务对应一个用户的连接,以Begin为起始,并随着用户的提交操作而以Commit结束。
这里,一般来说,redo日志是按照sql语句的执行时间进行排列,在解析的过程中,会生成redo日志对应的操作数据,该操作数据为源数据库的操作信息,操作信息对应不同的事务ID,为了保证增量数据同步的顺序性和时间性,可以对解析后的redo日志生成的操作信息按照事务ID提交时间的先后顺序进行排列。
这里,基于解析得出的操作信息对源数据库的存量数据进行操作,生成源数据库的增量同步数据,目标数据库设置有装载进程,基于该装载进程将增量同步数据装载到目标数据库中,更新目标数据库。
在一些实施例中,重做日志的日志类型包括未提交日志和已提交日志,基于第一位置信息,确定重做日志的起始解析位置信息,包括:
确定第一位置信息对应的重做日志的日志类型是否为未提交日志,若是,则获取第二位置信息并确定第二位置信息为重做日志的起始解析位置信息,第二位置信息为与未提交日志的位置相邻的已提交日志的位置信息;
若否,则确定第一位置信息为重做日志的起始解析位置信息。
这里,在数据同步的过程中,对于不依赖redo日志进行同步,并且提供了顺序日志数据解析能力的数据库来说,例如,MySQL、PostgreSQL等数据库,在进行增量数据捕获的数据库日志中,只能有已提交的事务,且严格按照事务提交的顺序记录。对于redo日志来说,其可能包括:已提交的redo日志和未提交的redo日志。这里的已提交是指事务的提交状态,一般以Commit表示日志已提交。
这里,为了避免在基于redo日志进行增量同步的过程中出现未提交的数据,影响增量数据的同步,保证数据同步的最终一致性和顺序性,在查找出同步结束时刻对应的redo日志的位置信息即第一位置信息时,确定第一位置信息对应的redo日志是否未提交,若是,则第一位置信息对应的redo日志为未提交日志,获取未提交日志的位置相邻的已提交日志的位置信息即第二位置信息,并确定该第二位置信息为redo日志的起始解析位置信息,即从第二位置信息处开始对redo日志进行解析。若否,则确定第一位置信息为重做日志的起始解析位置信息。
在一些实施例中,存量数据同步任务包括多个子存量数据同步任务,基于同步结束时刻和预设的映射关系,确定第一位置信息,包括:
基于各子存量数据同步任务的同步结束时刻和预设的映射关系,确定第三位置信息集合,第三位置信息集合中各第三位置信息为各子存量数据同步任务的同步结束时刻对应的重做日志的位置信息;
基于第三位置信息集合和预设的位置信息选取规则,确定第一位置信息,第一位置信息为第三位置信息集合中满足预设的位置信息选取规则的位置信息。
这里,在实际应用场景下,数据库表的存量数据可能达到数千万甚至数亿规模。在存量数据同步的过程中,如果采用单任务模式进行数据同步,数据同步的方式可以采用数据库快照技术进行同步。数据库快照是一个数据库的只读副本,它是数据库所有数据的映射,由快照被执行的时间点来决定它的内容,如果存量数据很大,读取时间很长,就需要消耗更多的资源用于维持快照,对于数据库性能有较大影响。当数据库的资源不足以维持快照的时候,甚至会出现读取失败,例如,Oracle会产生“ORA-01555: snapshot too old”异常。此外,数据库天生是为并发读取设计的。将存量数据按照某种方式进行区间划分,并交给不同的子任务进行读取,从读取效率上也会比单任务模式更佳。
这里,为了提高存量数据库的同步效率,存量数据同步任务包括多个子存量数据同步任务。在存量数据同步任务包括多个子存量数据同步任务时,各子存量数据同步任务的结束时刻不同的,基于各子存量数据同步任务的结束时刻和预设的映射关系,可以确定各子存量数据同步任务的同步结束时刻对应的redo日志的位置信息即第三位置组成的第三位置信息集合。
这里,预设的位置信息选取规则为选取第二位置信息集合中的最小位置信息。例如,位置信息为redo日志的位点信息,此时存量数据同步任务结束时刻对应的redo日志的位点信息为各子存量同步任务的结束时刻对应的redo日志的位点信息中的最小位点信息。这里的位点是指在生成redo日志时,都会给定了一个序列号,序列号从小到大递增,这个序列号也被称为位点,小的位点代表对应的为较久以前的写入的记录,大的位点代表为较新的写入日志。当读写节点将要执行写入操作时,需要先生成写入操作对应的日志记录,通过日志记录写入操作的执行步骤以及对应的数据变更等信息。生成日志记录时同样会确定当前操作对应的日志序列号(LSN),序列号的值越大,日志中记录的操作执行顺序越晚。本实施例中,当读写节点将要对共享存储进行写入操作时,第一日志写入位点为日志中记录的最新的写入操作对应的日志序列号LSN。
如此,通过基于最小位点信息确定第一位置信息,是因为这个位点之前的日志数据已经完成了增量数据的同步,无需重复处理,提高了数据的同步效率,避免了重读数据的产生。
在一些实施例中,操作信息包括存量数据的操作位置信息和操作位置信息对应的操作类型信息,基于操作信息对源数据库的存量数据进行操作,生成源数据库的增量同步数据,包括:
获取操作位置信息对应的操作类型信息,操作类型信息为以下之一:***操作信息、更新操作信息和删除操作信息;
基于操作类型信息,对操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成源数据库的增量同步数据。
这里,在执行源数据库的存量数据进行操作时,redo日志都是记录该操作对应的操作位置信息以及该操作位置信息对应的操作类型信息。操作类型信息为以下至少之一:***操作信息、更新操作信息和删除操作信息。
这里,操作类型信息由DML(Data Manipulation Language,数据操作语言)和DDL(Data Definition Language,数据定义语言)表示,DML操作是针对某一对象的操作,包括***INSERT、更新UPDATE和删除DELETE,DDL主要是用在定义或改变表的结构、数据类型、表之间的链接和约束等初始化工作。本申请实施例中,DDL包括表的创建、重命名、列的增加、列的修改、列的删除等操作,DML包括数据的增加、删除和修改。
这里,为了屏蔽源端数据库的类型差异,从而实现异构数据库之间的同步,在解析到DML和DDL后,可以将DDL和DML转换为统一的数据编码格式。
具体的实施例中,可以采用包括但不限于Avro的编码方式。Avro是Hadoop的一个数据序列化***,设计用于支持大批量数据交换的应用。Avro格式编码方法如下:Avro依赖"schema"(模式)来实现数据结构的定义,Avro格式由原始类型(也就是基本类型)(null、boolean、int、long、float、double、bytes和string)和复杂类型(record、enum、array、map、union和fixed)组成。通过原始类型和复杂类型的组合,Avro格式可以对任意结构化的数据进行编码。
假定本实施例中的源数据库的存量数据的源表是一张MySQL源的用户表(user_info)、包含三列姓名(name,varchar(50)类型)、年龄(age,int类型)、兴趣(interest,array类型)、创建时间(createTime,datetime类型),对应DML数据的Avro模式定义如下:其中,entity代表源端的表名,用于识别数据的隶属关系;mType代表数据类型,取值范围为DDL/DML。这主要是方便加载单元进行后继处理;op字段代表DML类型,取值范围为I/U/D,分别代表***、更新和删除;实际的数据放在data字段下,这是一个record复合类型,其中包括了name、age、interest和createTime的具体定义,这里使用字符串类型来进行时间类型的编码。
对于DDL,其结构定义如下:其中op代表DDL类型,对于表字段的增删改,该字段的值可以设置为“alter-table-column”。data字段为array类型,其中每一个item定义为符合结构,包括column(列名)、op(类型,I/U/D,分别对应列的增加、删除和修改)、def(具体的列定义,对于D类型可以为空)。
这里,基于操作类型信息,对操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成源数据库的增量同步数据。示例性地,可以应用DDL和DML进行***操作、更新操作或者删除操作,生成源数据库的增量同步数据,实现结构变化与数据同步。
在一些实施例中,存量数据同步任务包括多个子存量数据同步任务,确定源数据库至目标数据库的存量数据同步任务完成,包括:
针对存量数据同步任务中的每一子存量数据同步任务,获取子存量数据同步任务对应的子存量同步数据;
确定每一子存量同步数据均同步至目标数据库,则确定源数据库至目标数据库的存量数据同步任务完成。
这里,为了提高数据的存量同步效率,可以采用多任务同步模式进行同步。设置存量数据同步任务包括多个子存量数据同步任务,基于多个子存量数据同步任务进行同步。
这里,针对存量数据同步任务中的每一子存量同步数据同步任务,都有其对应的子存量同步数据。每一子存量同步数据同步任务的目标就是将其对应的子存量同步数据同步完成。通过确定每一子存量同步数据均同步至目标数据库,则确定源数据库至目标数据库的存量数据同步任务完成。
在一些实施例中,源数据库的存量数据包括存量数据的标识信息,该方法还包括:
基于标识信息,切割存量数据,生成至少一个存量数据块;
基于至少一个存量数据块、子存量数据同步任务的数量和预设的分配规则,确定各子存量数据同步任务对应的至少一个存量数据块;
获取子存量数据同步任务对应的子存量同步数据,包括:基于子存量数据同步任务对应的至少一个存量数据块,生成子存量数据同步任务对应的子存量同步数据。
这里,源数据库的存量数据都具备其唯一的标识信息,标识信息需要为数值或字符类型。例如,源数据据库的源表包括了源数据的存量数据,在源表中,标识信息可以为主键、联合主键,以及具备唯一索引的索引标识符。这里,数据同步设备以查询的方式获取存量数据。
这里,基于存量数据的标识信息和预设的切割规则,切割存量数据,生成至少一个存量数据块。示例性地,存量数据的标识信息为Key,Key的最小值为1、最大值为100。用户可以根据实际情况,将1到100的对应的存量数据进行切割,生成至少一个存量数据块。这里,在进行切割时,切割规则的确定,应该根据KEY值的范围和制定的子存量数据同步任务的数量,将数据相对均匀地分配给各个子任务,避免产生数据切斜为原则来进行设定。也可以根据需要设定。一般来说,存量数据同步任务小于或者等于存量数据块的数量。如果子存量同步任务的数量多于存量数据块的数量,那么有的子存量同步任务就不会被分配到存量数据块,处于闲置状态。
这里,在确定了至少一个子存量数据块以及子存量同步数据任务的数量后,基于预设的分配规则,确定分配至每一子存量数据同步任务对应的至少一个数据块。获取子存量数据同步任务对应的子存量同步数据,包括:基于子存量数据同步任务对应的至少一个存量数据块,生成子存量数据同步任务对应的子存量同步数据。
这里,预设的分配规则可以包括:1)将子存量同步任务从1开始顺序编号;2)将存量数据块从1开始顺序编号;3)将存量数据块按照编号顺序顺次分配给子任务,分配完一轮后循环分配下一轮,直到所有的同步区间块都被分配完成。如此,通过对存量数据进行分片,多线程同时实现存量数据同步,提升了数据库的同步效率。
下面,结合一应用示例对本申请实施例进行详细说明。
支持全量分片读取以及全/增量的无缝衔接是DP(Data Parallelism,数据并行)的产品功能特色之一。在DP的技术设计里,为了实现分片+全/增量无缝衔接,且不对数据库加表以上级别的锁。在相关技术中,提供了MySQL、PostgreSQL这种提供了顺序日志数据解析能力(只有提交的事务数据会出现在日志流里,且保证顺序性)的数据库的增量数据捕获方案,该方案有一个前提:用于进行增量数据捕获的数据库日志里,只能有已提交的事务,且严格按照事务提交的顺序记录。同样的,该方案也要求数据库日志只包含提交的事务且保证顺序一致性。但对于像Oracle这样通过redo日志(以及归档日志)来进行增量数据捕获的场景下就无法满足了。例如,Oracle、达梦这样的数据库里,增量数据的捕获依赖redo日志。redo日志中可能存在未提交的事务数据,并不满足上述方案的基本前提,需要一种新的方法来实现多分片场景下的存量和增量衔接问题,保证数据的最终一致性。
此外,在redo日志在进行增量捕获的场景下,因为在进行存量数据同步的过程中,部分存量数据也会进行增量数据同步。如此,在存量数据同步完成后,再进行增量同步数据的同步更新,就会出现对数据的重复更新,无法实现存量数据同步和增量同步数据同步的无缝衔接,降低了数据的同步效率。
基于此,本应用示例提供了一种利用redo日志来进行数据库增量捕获场景下的分片数据同步方案。用于实现以分片查询方式同步全量、以解析redo日志方式同步增量,并确保数据有唯一标识情况下,全量和增量的衔接不产生重复数据。
本应用示例提供的数据同步方案,可以应用于数据同步***中,根据源数据库获取redo日志的方式不同,对应不同的数据同步***部署架构。可以通过远程或者本地的方式来实现。
如图2所示,图2为源数据库远程获取redo日志的数据同步***的部署架构示意图。该数据同步***包括源端数据库宿主机201、目标端数据库宿主机202和数据同步装置宿主机203。源端数据库宿主机201装载数据库进程204,目标端数据库宿主机202装载数据库进程205,数据同步装置宿主机203装载数据同步***进程206。此外,数据同步装置宿主机203上还可以包括获取单元,例如MySQL,在该部署架构下,redo日志的获取单元可以运行在远程服务器上。
如图3所示,如果对日志的访问必须在数据库本地完成(例如Oracle的单机模式),该数据同步***包括至源端数据库宿主机201、目标端数据库宿主机202和数据同步装置宿主机203。源端数据库宿主机201装载数据库进程204,并且,获取redo日志可以单独以采集代理进程207运行在源端数据库宿主机201上。目标数据库宿主机202装载数据库进程205,并且单独以加载代理进程208运行在目标端数据库宿主机202上。数据同步装置宿主机203上装载数据同步进程206。
需要指出的是,图2和图3的两种部署架构代表了实施中的两种极端场景。此外,图3中的采集代理207进程和加载代理进程208可以根据需要自由组合实施,例如只采用采集代理进程207,或只采用加载代理进程208。
在本应用示例中,采用上述图2或者图3的数据同步***,数据同步***中的数据同步装置宿主机上还包括获取单元,获取单元用于从源端数据库以查询获取存量数据,或者以日志采集的方式获取日志数据。
本应用示例中,源数据库的源表数据为上述存量数据(又称为全量数据),参照图4,图4为数据同步方案的流程示意图,数据同步方案的具体实现包括以下步骤:
步骤401:数据同步***将源表按照唯一标识进行区间划分,构建出若干同步区间块。
基于标识信息,切割存量数据,生成至少一个存量数据块。
这里,源表为上述目标数据库的存量数据,数据同步***基于标识信息切割存量数据,生成至少一个存量你数据块即将源表按照唯一标识进行区间划分,构建出若干同步区间块chunk(即存量数据块)。在实际应用场景下,数据库表的存量数据可能达到数千万甚至数亿规模。在读取全量数据的过程中,数据库需要在查询结果完全返回给客户端之前维护数据快照。如果表很大,读取时间很长,数据就需要消耗更多的资源用于维持快照,对于数据库性能有较大影响。当数据库的资源不足以维持快照时候,甚至会出现读取失败,例如Oracle会产生“ORA-01555: snapshot too old”异常。此外,数据库天生是为并发读取设计的。在读取大表时,将数据按照某种方式进行区间划分,并交给不同的子任务(即子存量数据同步任务)进行读取,从读取效率上也会比单任务模式更佳。
这里,为了将数据表划分为同步区间块(即存量数据块),要求数据表必须具备唯一标识列(即数据的标识信息)。唯一标识列可以是主键、联合主键,以及具备唯一索引的列/列集合。唯一标识需要为数值或字符类型,可以被比较大小进行区间划分。在进行区间划分时,优选的,应根据值的范围和制定的子任务数量,将数据相对均匀地分配给各个子任务(即子存量数据同步任务),避免产生数据切斜。
图5给出了同步区间块(即存量数据块)划分的具体示例。在这个示例里,出于直观考虑,假定源表即存量同步数据只有两列:ID列为唯一标识列(以Key表示)、C1列为char型。在同步任务(即存量数据同步任务)启动时,整个表的标识信息Key的最小值为1、最大值为100。
示例性地,用户通过界面指定的同步区间块(即存量数据块)切分数量为10,并同时启动10个子存量同步任务进行源表的存量数据读取。在此设定下,如图5所示,最终每个同步区间块(即存量数据块)包含10个键值范围内的存量数据。
步骤402:数据同步***启动一定数量的存量同步任务,将同步区间块分配给同步任务。
基于至少一个存量数据块、子存量数据同步任务的数量和预设的分配规则,确定各子存量数据同步任务对应的至少一个存量数据块。
获取子存量数据同步任务对应的子存量同步数据,包括:基于子存量数据同步任务对应的至少一个存量数据块,生成子存量数据同步任务对应的子存量同步数据。
这里,子存量同步任务(即子存量数据同步任务)仅用于同步存量数据,子存量同步任务的数量可以少于同步区间块(即存量数据块)的数量。每一个子存量同步任务被分配1到多个同步区间块(即存量数据块)。如果子存量同步任务的数量多于同步区间块的数量,那么有的子存量同步任务就不会被分配到同步区间块,处于闲置状态。
这里,数据同步***可以采用如下方式分配存量数据至同步区间块,即基于预设的分配规则进行分配,确定各子存量同步任务对应的至少一个存量数据块:1)将子存量同步任务从1开始顺序编号;2)将同步区间块从1开始顺序编号;3)将同步区间块按照编号顺序顺次分配给子存量同步任务,分配完一轮后循环分配下一轮,直到所有的同步区间块都被分配完成。
步骤403:每个子存量同步任务记录日志的低位点,开始读取并缓存区间块数据,完成后记录此时的日志高位点。
这里,在各个子存量同步任务的执行过程中,通过查询的方式获取其对应的子存量数据。即通过构建出查询语句,读取子存量数据并将数据放入“区间块缓存”。在开始读取时,记录子存量同步任务的读取开始时刻(即子存量同步任务的同步开始时刻),记录该时刻对应的源数据库的redo日志位点,作为低位点(low-offset),在完成读取后(即子存量同步任务的结束时刻),记录此时的数据库日志位点作为高位点(high-offset)。子存量同步任务每同步完一个区间块数据(即子存量数据块),会生成一个:
形如<chunk-i,chunk-i-range,high-offset-i>的记录。其中chunk-i代表第i个同步区间块,chunk-i-range代表chunk-i的key值(即子存量数据的标识信息)范围,high-offset-i代表chunk-i的高位点。示例性地,例如子存量同步任务1对应两个同步区间块,为同步区间块1和同步区间块2,在同步区间块2同步完成后,会生成<chunk-2,chunk-2-range,high-offset-2>。
步骤404:每个子存量同步任务获取低位点和高位点间的日志数据,并根据数据唯一标识覆盖掉缓存中对应的数据,然后将数据发往处理下游。
示例性地,由于REDO日志中存在未提交的事务数据,因此该子存量同步任务的高低位点,需使用距离查询时刻最近的“已提交事务的位点”。即确定子存量同步任务的起止时刻对应的重做日志的日志类型为未提交日志,则确定子存量同步任务的起止时刻对应的重做日志的位点为与未提交日志相邻的已提交日志的位点信息。
在本应用示例中,为了避免多个子存量同步任务各自解析日志数据对数据库造成过多的IO压力,数据同步***针对一个源数据库只启动一个独立的日志解析任务,将日志中已提交的事务数据按事务提交时间发送到日志缓存中。各个存量同步子任务以及后继的增量同步子任务均从这个日志缓存中读取自己所需要的数据。
在本应用示例中,同步任务和redo日志的解析是异步进行的,因此在存量同步的过程中,会发生部分存量数据的增量数据同步即存量数据的覆盖。增量数据同步的流程,如图6所示,图6给出了具体的处理过程示例,假设某一子存量同步任务对应的至少一个同步区间块为chunk-1[1-10],其中,1-10为标识信息即键值,此时同步开始时刻对应的日志位点以chunk1-low-offset表示,同步结束时刻对应的日志位点为chunk1-high-offset。对于解析后的日志来说,日志位点从chunk1-low-offset到chunk1-high-offset对应的的解析结果为源数据库的操作信息,操作信息包括操作类型信息和操作位置信息,操作类型信息为以下之一:***操作信息、更新操作信息和删除操作信息,操作位置信息为源数据库的键值信息。其中,+(101,a)和+(102,w)对应的键值为101和102,在键值范围[1-10]以外,对+(101,a)和+(102,w)不做处理。chunk-1的读取结果为(1,a)、(2,b)、(3,c)、(4,d)、(7,e)、(8,f)、(7,g)。
子存量同步任务按照如下方式进行区间块缓存中的数据覆盖即基于操作类型信息,对操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成源数据库的增量同步数据:
1、如果日志数据为***或更新,且唯一键在区间块缓存中,则将区间块缓存中对应的键更新为日志数据中的值;例如:+(3,c)代表键值为3的***一条值为c的记录。其中+(7,e)代表键值为7的***一条值为e的记录,-(3,c),+(3,p)代表将键值为7的记录的值由c更新为p。
2、如果日志数据为删除,且唯一键在区间块缓存中,则删除区间块缓存对应的键值;例如,-(7,e)代表删除键值为7的记录。
3、其它情况,忽略日志数据。
如此,chunk-1经过上述操作的合并输出结果为(1,a)、(2,b)、(3,q)、(4,d)、(5,c)、(8,z)、(9,g)。
并且,为了保证数据同步的顺序性和一致性,由于REDO日志数据中可能存在未移交的事务,数据同步***的日志解析任务遇到一个事务开始标志时,需要将未提交的事务数据先进行缓存,当解析到该事务的提交记录时,再将解析后的数据按照提交时刻的顺序发往日志缓存。经过这个处理步骤,日志缓存中的数据都是按照事务的提交时刻有序排列的。图7给出了具体的处理过程示例。箭头的方向表示了时间的先后,离箭头越近,则表示提交顺序越晚,redo日志中包括事务tx-1、tex-2和tx-3,在redo日志中,对于各个事务,都是先将未提交的数据先进行缓存,已提交commit的数据后缓存。为了保证数据同步的顺序性和一致性,在redo日志的日志解析任务解析出解析结果后,会基于各个事务的提交顺序进行数据重整,生成数据重整后的结果。在图1中,事务tx-2的提交顺序最早,则重整后的数据按照事务2、事务3和事务1排列。各事务内部还是按照提交的先后进行排列。如此,将重整后的数据按照顺序发往日志缓存,保证日志缓存中的数据都是按照事务的提交时刻有序排列的。
这里,日志的解析结果可以包括在基于日志采集的获取模式下,数据同步***中的数据同步装置宿主机上还包括了解析单元,解析单元通过解析日志,获得明文化的数据定义语言(Data Definition Language,DDL);2)数据操作语言(Data ManipulationLanguage,DML)。
本应用示例关注的DDL包括表的创建、重命名、列的增加、列的修改、列的删除等操作,本应用示例下关注的DML包括数据的增加、删除和修改。
数据同步***中的数据同步装置宿主机上还包括了转换单元,转换单元用于在基于查询的获取方式下,解析单元将查询获得的明文数据发送给转换单元进行转换。这里的转换单元是指将DDL和DML转换为统一的数据编码格式。统一的数据编码可以屏蔽源端数据库的类型差异,从而实现异构数据库之间的同步。
在具体的实施例中,可以采用包括但不限于Avro的编码方式。Avro格式编码方法如下:Avro依赖"schema"(模式)来实现数据结构的定义,Avro格式原始类型(也就是基本类型)(null、boolean、int、long、float、double、bytes和string)和复杂类型(record、enum、array、map、union和fixed)组成。通过原始类型和复杂类型的组合,Avro格式可以对任意结构化的数据进行编码。假定本实施例中的源表是一张MySQL源的用户表(user_info)、包含三列姓名(name,varchar(50)类型)、年龄(age,int类型)、兴趣(interest,array类型)、创建时间(createTime,datetime类型),对应DML数据的Avro模式定义如下:其中,entity代表源端的表名,用于识别数据的隶属关系;mType代表数据类型,取值范围为DDL/DML。这主要是方便加载单元进行后继处理;op字段代表DML类型,取值范围为I/U/D,分别代表***、更新和删除;实际的数据放在data字段下,这是一个record复合类型,其中包括了name、age、interest和createTime的具体定义,这里使用字符串类型来进行时间类型的编码。
{
"type":"record",
"name":"userInfoDML",
"fields": [
{
"name": "entity",
"type": "string"
},
{
"name": "mType",
"type": "string"
},
{
"name": "op",
"type": "string"
},
{
"name": "data",
"type": {
"name": "dmlField",
"type": "record",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
},
{
"name": "interest",
"type": {
"type":"array",
"items": "string"
}
},
{
"name": "createTime",
"type": "string"
}
]
}
}
]
}
利用该模式定义编码成的数据如下所示。需要指出的是,Avro会利用Schema对数据进行二进制编码,下文仅代表其明文的表示形式。
{
"entity":"user_info",
"mType":"DML",
"op": "I",
"data": {
"name": "Alice",
"age": 20,
"interest": ["pop", "travel", "sports"],
"createTime": "2023-06-25 15:34:32"
}
}
对于DDL,其结构定义如下:其中op代表DDL类型,对于表字段的增删改,该字段的值可以设置为“alter-table-column”。data字段为array类型,其中每一个item定义为符合结构,包括column(列名)、op(类型,I/U/D,分别对应列的增加、删除和修改)、def(具体的列定义,对于D类型可以为空)。
{
"type":"record",
"name":"userInfoDDL",
"fields": [
{
"name": "entity",
"type": "string"
},
{
"name": "mType",
"type": "string"
},
{
"name": "op",
"type": "string"
},
{
"name": "data",
"type": "array",
"items": {
"name": "ddl-item",
"type": "record",
"fields": [
{
"name": "column",
"type": "string"
},
{
"name": "op",
"type": "string"
},
{
"name": "def",
"type": "string"
}
]
}
}
]
}
利用该模式定义编码成的数据如下所示,代表源端新增了address列和gender列。
{
"entity":"user_info",
"mType":"DDL",
"op": "alter-table-by-tmp",
"data": [
{
"column":"address",
"op":"I",
"def":"varchar(255)"
},
{
"column":"gender",
"op":"I",
"def":"varchar(10)"
}
]
}
这里,数据同步装置宿主机还包括了转换单元,用于在目标数据库应用DDL和DML,实现结构变化与数据同步。在目标数据库应用DDL和DML,实现结构变化与数据同步,取决于具体的写入方式,对目标数据库的写入可能通过远程或者本地的方式来实现。如果可以通过远程实现(例如JDBC写入方式),那么获取单元可以运行在远程服务器上。对应图2的部署运行架构;如果对目标数据库的写入必须在数据库本地完成(通常发生在需要以文件形式实现高性能写入,且目标数据库不支持远程文件流方式),那么加载单元需要单独以加载代理形式运行在数据库宿主机上,对应于图3的部署运行架构。
步骤405:数据同步***等待所有子存量同步任务完成,启动一个增量同步任务,从所有子存量任务的最小的高位点开始解析数据。
在确定每一子存量同步数据均同步至目标数据库,即确定源数据库至目标数据库的存量数据同步任务完成。在确定源数据库至目标数据库的存量数据同步任务完成,则启动一个增量同步任务,获取各子存量数据同步任务的同步结束时刻。在本应用示例中,增量同步任务是单线程进行的,而上述存量同步是多线程进行的。
基于各子存量同步任务的同步结束时刻和预设的映射关系,确定第三位置信息集合,第三位置信息集合中各第三位置信息为各子存量数据任务的同步结束时刻对应的重做日志的位置信息。由上可知,各子存量同步任务的同步结束时刻对应的高位点信息可以表示为high-offset-i即第三位置信息,其中i为子存量同步任务同步结束时刻对应的同步区间块。
基于第三位置信息集合和预设的位置信息选取规则,确定第一位置信息,第一位置信息为第三位置信息集合中满足预设的位置信息选取规则的位置信息。这里的预设位置信息选择规则为选取high-offset-i集合中位点信息最小的位点即所有子存量任务的最小的高位点。并且若REDO日志中存在未提交的事务数据,因此该子存量同步任务的高位点,需使用距离查询时刻最近的“已提交事务的位点”。即确定子存量同步任务的结束时刻对应的重做日志的日志类型为未提交日志,则确定子存量同步任务的起止时刻对应的重做日志的位点为与该未提交日志相邻的已提交日志的位点信息,此时该位点信息为重做日志的起始解析位置信息。若否,则确定第一位置信息为重做日志的起始解析位置信息。
即数据同步***遍历所有子存量同步任务上报的<chunk-i,chunk-i-range,high-offset-i>,选择其中最小的high-offset-i作为增量任务的同步起点(即预设的位置信息选取规则)。这里的增量任务的同步起点即重做日志的起始解析位置,之所选择最小的high-offset-i,是因为这个点之前的日志数据已经完成了和存量数据的合并即部分的存量数据的更新,无需重复处理。而各个子存量同步任务是独立进行处理的,它们之间可能存在一些日志数据没有被进行合并进存量数据,需要在S406步骤中进行处理。如此,保证了避免了未提交日志对日志解析的影响和数据同步的一致性。
基于重做日志的起始解析位置信息,对重做日志进行解析,生成解析结果,解析结果包括源数据库的存量数据的操作信息;
基于操作信息对源数据库的存量数据进行操作,生成源数据库的增量同步数据;
基于增量同步数据,更新目标数据库。
基于上述的最小的high-offset-i对应的位点信息,对重做日志进行解析,生成解析结果,解析结果包括源数据库的存量数据的操作信息。基于图6所示的,上述增量数据同步的流程,生成增量数据,并基于增量同步数据,更新目标数据库。
步骤406:增量同步任务利用存量同步任务记录的位点信息,过滤掉重复数据,并将新增数据发往处理下游。
这里,增量同步任务解析到数据后,首先根据操作信息中的操作位置,例如键值判断是否属于各子存量任务的chunk范围。如果不属于,那么直接发往处理下游;如果属于chunk-i,则进一步判断其位点是否低于high-offset-i。如果低于则忽略,高于则发往处理下游。当增量同步任务处理的日志数据位点已经高于所有子存量任务的最大高位点后,可以更改任务内部的标识,无需再逐条进行判断过滤。因此高于此位点后,所有解析到的日志数据均和存量同步任务无交集。
为了实现本申请实施例的方法,本申请实施例还提供一种数据同步装置,该数据同步装置与上述数据同步方法对应,上述数据同步方法实施例中的各步骤也完全适用于本数据同步装置实施例。
如图8所示,该数据同步装置800包括:获取模块810、生成模块820和更新模块830,获取模块810用于确定源数据库至目标数据库的存量数据同步任务完成,则获取存量数据同步任务的同步结束时刻;生成模块820用于基于同步结束时刻、源数据库的重做日志和源数据库的存量数据,生成源数据库的增量同步数据;更新模块830用于基于增量同步数据,更新目标数据库。
在一些实施例中,数据同步装置还包括确定模块840和解析模块850,确定模块840用于基于同步结束时刻和预设的映射关系,确定第一位置信息,第一位置信息为同步结束时刻对应的重做日志的位置信息,预设的映射关系包括各时刻与重做日志的位置信息的对应关系;基于第一位置信息,确定重做日志的起始解析位置信息;解析模块850还用于基于重做日志的起始解析位置信息,对重做日志进行解析,生成解析结果,解析结果包括源数据库的存量数据的操作信息;生成模块820还用于基于操作信息对源数据库的存量数据进行操作,生成源数据库的增量同步数据。
在一些实施例中,重做日志的日志类型包括未提交日志和已提交日志,确定模块840还用于确定第一位置信息对应的重做日志的日志类型是否为未提交日志,若是,则获取第二位置信息并确定第二位置信息为重做日志的起始解析位置信息,第二位置信息为与未提交日志的位置相邻的已提交日志的位置信息;若否,则确定第一位置信息为重做日志的起始解析位置信息。
在一些实施例中,确定模块840还用于基于各子存量数据同步任务的同步结束时刻和预设的映射关系,确定第三位置信息集合,第三位置信息集合中各第三位置信息为各子存量数据同步任务的同步结束时刻对应的重做日志的位置信息;基于第三位置信息集合和预设的位置信息选取规则,确定第一位置信息,第一位置信息为第三位置信息集合中满足预设的位置信息选取规则的位置信息。
在一些实施例中,操作信息包括存量数据的操作位置信息和操作位置信息对应的操作类型信息,获取模块810还用于获取操作位置信息对应的操作类型信息,操作类型信息为以下之一:***操作信息、更新操作信息和删除操作信息;生成模块820还用于基于操作类型信息,对操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成源数据库的增量同步数据。
在一些实施例中,存量数据同步任务包括多个子存量数据同步任务,获取模块810还用于针对存量数据同步任务中的每一子存量数据同步任务,获取子存量数据同步任务对应的子存量同步数据;确定模块840还用于确定每一子存量同步数据均同步至目标数据库,则确定源数据库至目标数据库的存量数据同步任务完成。
在一些实施例中,生成模块820还用于基于标识信息,切割存量数据,生成至少一个存量数据块;确定模块840还用于基于至少一个存量数据块、子存量数据同步任务的数量和预设的分配规则,确定各子存量数据同步任务对应的至少一个存量数据块;
获取子存量数据同步任务对应的子存量同步数据,包括:基于子存量数据同步任务对应的至少一个存量数据块,生成子存量数据同步任务对应的子存量同步数据。
实际应用时,获取模块810、生成模块820、更新模块830、确定模块840及解析模块850,可以由数据同步装置中的处理器来实现。当然,处理器需要运行存储器中的计算机程序来实现它的功能。
需要说明的是:上述实施例提供的数据同步装置在进行数据同步时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供数据同步装置与数据同步方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供一种数据同步设备。图9仅仅示出了该数据同步设备的示例性结构而非全部结构,根据需要可以实施图9示出的部分结构或全部结构。
如图9所示,本申请实施例提供的数据同步设备900包括:至少一个处理器901、存储器902、用户接口903和至少一个网络接口904。数据同步设备900中的各个组件通过总线***905耦合在一起。可以理解,总线***905用于实现这些组件之间的连接通信。总线***905除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线***905。
其中,用户接口903可以包括显示器、键盘、鼠标、轨迹球、点击轮、按键、按钮、触感板或者触摸屏等。
本申请实施例中的存储器902用于存储各种类型的数据以支持数据同步设备的操作。这些数据的示例包括:用于在数据同步设备上操作的任何计算机程序。
本申请实施例揭示的数据同步方法可以应用于处理器901中,或者由处理器901实现。处理器901可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,数据同步方法的各步骤可以通过处理器901中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器901可以是通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器901可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器902,处理器901读取存储器902中的信息,结合其硬件完成本申请实施例提供的数据同步方法的步骤。
在示例性实施例中,数据同步设备可以被一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,ProgrammableLogic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程逻辑门阵列(FPGA,Field Programmable Gate Array)、通用处理器、控制器、微控制器(MCU,Micro Controller Unit)、微处理器(Microprocessor)、或者其他电子元件实现,用于执行前述方法。
可以理解,存储器902可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体可以是计算机可读存储介质,例如包括存储计算机程序的存储器902,上述计算机程序可由数据同步设备的处理器901执行,以完成本申请实施例方法的步骤。计算机可读存储介质可以是ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器。
需要说明的是:“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
另外,本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请披露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (10)
1.一种数据同步方法,其特征在于,所述方法包括:
确定源数据库至目标数据库的存量数据同步任务完成,则获取所述存量数据同步任务的同步结束时刻;
基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据;
基于所述增量同步数据,更新所述目标数据库。
2.根据权利要求1所述的方法,其特征在于,所述基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据,包括:
基于所述同步结束时刻和预设的映射关系,确定第一位置信息,所述第一位置信息为所述同步结束时刻对应的重做日志的位置信息,所述预设的映射关系包括各时刻与所述重做日志的位置信息的对应关系;
基于所述第一位置信息,确定所述重做日志的起始解析位置信息;
基于所述重做日志的起始解析位置信息,对所述重做日志进行解析,生成解析结果,所述解析结果包括所述源数据库的存量数据的操作信息;
基于所述操作信息对所述源数据库的存量数据进行操作,生成所述源数据库的增量同步数据。
3.根据权利要求2所述的方法,其特征在于,所述重做日志的日志类型包括未提交日志和已提交日志,所述基于所述第一位置信息,确定所述重做日志的起始解析位置信息,包括:
确定所述第一位置信息对应的重做日志的日志类型是否为未提交日志,若是,则获取第二位置信息并确定所述第二位置信息为所述重做日志的起始解析位置信息,所述第二位置信息为与所述未提交日志的位置相邻的已提交日志的位置信息;
若否,则确定所述第一位置信息为所述重做日志的起始解析位置信息。
4.根据权利要求2所述的方法,其特征在于,所述存量数据同步任务包括多个子存量数据同步任务,所述基于所述同步结束时刻和预设的映射关系,确定第一位置信息,包括:
基于各所述子存量数据同步任务的同步结束时刻和预设的映射关系,确定第三位置信息集合,所述第三位置信息集合中各第三位置信息为各所述子存量数据同步任务的同步结束时刻对应的重做日志的位置信息;
基于所述第三位置信息集合和预设的位置信息选取规则,确定第一位置信息,所述第一位置信息为所述第三位置信息集合中满足所述预设的位置信息选取规则的位置信息。
5.根据权利要求2所述的方法,其特征在于,所述操作信息包括所述存量数据的操作位置信息和所述操作位置信息对应的操作类型信息,所述基于所述操作信息对所述源数据库的存量数据进行操作,生成所述源数据库的增量同步数据,包括:
获取所述操作位置信息对应的操作类型信息,所述操作类型信息为以下之一:***操作信息、更新操作信息和删除操作信息;
基于所述操作类型信息,对所述操作位置信息对应的存量数据进行***操作、更新操作或者删除操作,生成所述源数据库的增量同步数据。
6.根据权利要求1所述的方法,其特征在于,所述存量数据同步任务包括多个子存量数据同步任务,所述确定源数据库至目标数据库的存量数据同步任务完成,包括:
针对所述存量数据同步任务中的每一子存量数据同步任务,获取所述子存量数据同步任务对应的子存量同步数据;
确定每一所述子存量同步数据均同步至所述目标数据库,则确定源数据库至目标数据库的存量数据同步任务完成。
7.根据权利要求6所述的方法,其特征在于,所述源数据库的存量数据包括存量数据的标识信息,所述方法还包括:
基于所述标识信息,切割所述存量数据,生成至少一个存量数据块;
基于所述至少一个存量数据块、所述子存量数据同步任务的数量和预设的分配规则,确定各所述子存量数据同步任务对应的至少一个存量数据块;
所述获取所述子存量数据同步任务对应的子存量同步数据,包括:基于所述子存量数据同步任务对应的至少一个存量数据块,生成所述子存量数据同步任务对应的子存量同步数据。
8.一种数据同步装置,其特征在于,所述装置包括:
获取模块,用于确定源数据库至目标数据库的存量数据同步任务完成,则获取所述存量数据同步任务的同步结束时刻;
生成模块,用于基于所述同步结束时刻、所述源数据库的重做日志和所述源数据库的存量数据,生成所述源数据库的增量同步数据;
更新模块,用于基于所述增量同步数据,更新所述目标数据库。
9.一种数据同步设备,其特征在于,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,其中,
所述处理器,用于运行计算机程序时,执行权利要求1至7任一项所述方法的步骤。
10.一种计算机存储介质,所述计算机存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311147251.8A CN116881371B (zh) | 2023-09-07 | 2023-09-07 | 数据同步方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311147251.8A CN116881371B (zh) | 2023-09-07 | 2023-09-07 | 数据同步方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116881371A true CN116881371A (zh) | 2023-10-13 |
CN116881371B CN116881371B (zh) | 2023-11-14 |
Family
ID=88266686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311147251.8A Active CN116881371B (zh) | 2023-09-07 | 2023-09-07 | 数据同步方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116881371B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120179653A1 (en) * | 2009-09-04 | 2012-07-12 | Yoshiaki Araki | Data synchronization system and data synchronization method |
CN109189852A (zh) * | 2018-08-01 | 2019-01-11 | 武汉达梦数据库有限公司 | 一种数据同步的方法及用于数据同步的装置 |
CN111694840A (zh) * | 2020-04-29 | 2020-09-22 | 平安科技(深圳)有限公司 | 数据同步方法、装置、服务器及存储介质 |
CN113468135A (zh) * | 2021-09-01 | 2021-10-01 | 阿里云计算有限公司 | 数据迁移方法、***、设备及产品 |
CN114579534A (zh) * | 2020-11-18 | 2022-06-03 | 北京金山云网络技术有限公司 | 数据迁移方法、装置及电子设备 |
CN115374102A (zh) * | 2021-07-30 | 2022-11-22 | 北京大杏科技有限责任公司 | 数据处理方法及*** |
-
2023
- 2023-09-07 CN CN202311147251.8A patent/CN116881371B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120179653A1 (en) * | 2009-09-04 | 2012-07-12 | Yoshiaki Araki | Data synchronization system and data synchronization method |
CN109189852A (zh) * | 2018-08-01 | 2019-01-11 | 武汉达梦数据库有限公司 | 一种数据同步的方法及用于数据同步的装置 |
CN111694840A (zh) * | 2020-04-29 | 2020-09-22 | 平安科技(深圳)有限公司 | 数据同步方法、装置、服务器及存储介质 |
CN114579534A (zh) * | 2020-11-18 | 2022-06-03 | 北京金山云网络技术有限公司 | 数据迁移方法、装置及电子设备 |
CN115374102A (zh) * | 2021-07-30 | 2022-11-22 | 北京大杏科技有限责任公司 | 数据处理方法及*** |
CN113468135A (zh) * | 2021-09-01 | 2021-10-01 | 阿里云计算有限公司 | 数据迁移方法、***、设备及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN116881371B (zh) | 2023-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bacon et al. | Spanner: Becoming a SQL system | |
CN105144080B (zh) | 用于元数据管理的*** | |
CN101127034B (zh) | 数据组织、查询、呈现、存档、恢复、删除、提炼方法及装置和*** | |
KR101149994B1 (ko) | 외부 메타데이터 프로세싱 방법 및 시스템 | |
US10146837B1 (en) | RLE-aware optimization of SQL queries | |
CN105556519A (zh) | 对oracle存储器中数据库的存储器中快照存储的多版本并行控制 | |
CN105556520A (zh) | 在存储器中镜像盘中的数据以提高查询性能 | |
Chavan et al. | Survey paper on big data | |
Sreemathy et al. | Data integration in ETL using TALEND | |
CN103460208A (zh) | 用于将数据加载到时态数据仓库的方法和*** | |
US20230367767A1 (en) | High frequency data management (hfdm) | |
US10296542B2 (en) | Integration database framework | |
US20190034453A1 (en) | Flexible synchronous file system replication | |
CN111736964A (zh) | 事务处理方法、装置、计算机设备及存储介质 | |
EP3958142A1 (en) | Projections for big database systems | |
CN116804994B (zh) | 数据同步方法、***、装置、电子设备及存储介质 | |
CN115827660B (zh) | 数据更新方法、装置、电子设备及非易失性存储介质 | |
CN111651519A (zh) | 数据同步方法、数据同步装置、电子设备及存储介质 | |
CN105353988A (zh) | 一种元数据读写方法及装置 | |
CN114153809A (zh) | 基于数据库日志并行实时增量统计的方法 | |
CN115373889A (zh) | 数据同步中的数据比对校验及数据修复的方法及装置 | |
Sreemathy et al. | Data validation in ETL using TALEND | |
CN116955510B (zh) | 基于数据湖的空间数据版本化管理方法 | |
CN116881371B (zh) | 数据同步方法、装置、设备及存储介质 | |
JP2023546818A (ja) | データベースシステムのトランザクション処理方法、装置、電子機器、及びコンピュータプログラム |
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 |