一种数据同步及故障恢复的方法和装置与流程

文档序号:37557622发布日期:2024-04-09 17:49阅读:20来源:国知局
一种数据同步及故障恢复的方法和装置与流程

本发明涉及数据同步,特别是涉及一种数据同步及故障恢复的方法和装置。


背景技术:

1、数据库管理系统使用日志文件保存数据的变更记录,当执行事件或动作时,包括执行数据变更操作,如写入数据、修改数据、删除数据等数据操纵语言(data manipulationlanguage,简写为dml)操作,还有如修改数据模式,如创建表、修改表等数据定义语言(datadefinition language,简写为ddl)操作,都会被数据库管理系统用文件追加的形式写入至日志文件。数据库管理系统意外崩溃后,重启时通过日志文件恢复数据,保证数据的一致性,这是日志文件被设计引入到数据库管理系统的最初用途。日志文件包含的数据变更的所有细节,这些信息可用于数据同步,特别是增量型数据同步;根据日志文件进行数据同步能够从根本上解决增量式数据同步的难题。

2、现有技术中基于事务日志的增量型数据同步系统一般局限于源端-目的端的架构,即包括源端和目的端两个服务部件,源端用于获取事务事件日志,并发送给目的端,目的端将事务事件日志转换成结构化查询语言(structured query language,简写为sql)或其它命令,提交给目的端数据库的目的服务器执行,进而达到与源数据库数据的一致,完成数据同步;这种架构通常用于实现一主一备或一主多备的数据完全一致的数据同步任务,即不支持数据转换操作,或通过比较复杂的属性文件配置实现一定形式的数据转换,不便于操作和维护。现有技术通过配置文件的形式或抽象的数据变换函数接口实现设计数据同步任务,对于复杂的数据同步任务,在任务设计上缺乏独立的、灵活可用的设计辅助支持。

3、由于日志文件中属于不同事务的事件日志交错存放,为了保证事务在操作同一个数据对象时不会出现错误,即确保源端数据库与目的端数据库的数据一致性和正确性,现有技术按照事件日志中的串行提交顺序执行数据同步。但串行执行不利于数据同步的性能,影响数据同步的实时性,极大地降低了同步效率,使得数据同步系统的实用性较差。

4、且在装载故障发生时往往直接停止整个数据同步任务,而因为源端服务器的日志文件一般只会保持一段时间,超时或超过设置的日志文件的体量阈值时,数据会被截断。如果不及时解析日志文件、读取其中的事件信息,遭遇日志文件截断会导致数据丢失。

5、鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。


技术实现思路

1、本发明要解决的技术问题是提供一种数据同步及故障恢复的方法和装置,其目的在于以组件化的方式设计复杂的数据同步任务,使得数据同步系统的可扩展性强,实现了对事务的并发冲突检测和优化了装载故障恢复策略,解决现有技术中基于事务日志增量的数据同步系统,通过属性文件配置实现数据转换操作易用性较低,使用串行执行的方法进行数据同步性能较差,且装载故障发生时停止整个数据同步任务导致数据丢失的问题。

2、本发明采用如下技术方案:

3、第一方面,本发明提供了一种数据同步及故障恢复的方法,包括:

4、将至少一个读取组件和至少一个装载组件进行组合,得到所需的数据同步任务;或,将至少一个读取组件、至少一个转换组件和至少一个装载组件进行组合,得到所需的数据同步任务;

5、通过读取组件获取所述数据同步任务所涉及的事务日志,根据所述事务日志是否已入库,选择性地对所述事务日志进行冲突事务释放或并发冲突检测;根据所述冲突事务释放的结果或所述并发冲突检测的结果,将事务日志传输至所述所有后续组件;其中,读取组件的后续组件为转换组件和装载组件;

6、当所述读取组件的后续组件为转换组件时,通过至少一个转换组件对所述事务日志进行转换,得到目标日志,将所述目标日志传输至所述装载组件;通过所述装载组件将所述目标日志入库;

7、当所述读取组件的后续组件为装载组件时,通过所述装载组件将所述目标日志入库;当装载故障发生时,根据所述并发冲突检测的结果恢复所述目标日志。

8、进一步地,所述通过读取组件获取所述数据同步任务所涉及的事务日志,根据所述事务日志是否已入库,选择性地对所述事务日志进行冲突事务释放或并发冲突检测;根据所述冲突事务释放的结果或所述并发冲突检测的结果,将事务日志传输至所述所有后续组件包括:

9、获取待检测事务的完整的事务日志后,将所述待检测事务作为完整事务顺序链表的最后一个事务,并将所述待检测事务作为传输就绪队列的最后一个就绪事务;

10、根据装载完成通知队列得到完成事务,将所述完成事务从所述完整事务顺序链表中去除,并将所述完成事务作为所述传输就绪队列的第一个就绪事务;其中,完整事务顺序链表中包括正在传输的事务和冲突事务队列中的事务;

11、从所述传输就绪队列中依次取出就绪事务,判断所述就绪事务的事务日志是否已入库;

12、当取出的就绪事务为完成事务时,从冲突事务队列中确定与就绪事务存在并发冲突的事务,以对所述完成事务进行冲突事务释放;将所述与就绪事务存在并发冲突的事务的事务日志传输至所述所有后续组件;

13、当取出的就绪事务不为完成事务时,判断就绪事务是否与完整事务顺序链表中的事务存在并发冲突,以对所述就绪事务进行并发冲突检测;根据并发冲突检测的结果,选择性地将所述就绪事务挂载至冲突事务队列,或者将所述就绪事务的事务日志传输至所述所有后续组件。

14、进一步地,所述当取出的就绪事务不为完成事务时,判断就绪事务是否与完整事务顺序链表中的事务存在并发冲突,以对所述就绪事务进行并发冲突检测;根据并发冲突检测的结果,选择性地将所述就绪事务挂载至冲突事务队列,或者将所述就绪事务的事务日志传输至所述所有后续组件包括:

15、从完整事务顺序链表中的最后一个事务开始,从后向前地依次将所述完整事务顺序链表中的事务与当前的就绪事务进行对比,判断所述当前的就绪事务操作的数据对象与所述完整事务顺序链表中的事务操作的数据对象是否存在交集;

16、当存在交集时,停止将所述当前的就绪事务与所述完整事务顺序链表中未进行对比的事务进行判断,将与所述当前的就绪事务存在交集的事务的事务id记为待释放id,使所述当前的就绪事务携带所述待释放id,将所述当前的就绪事务挂载至冲突事务队列;

17、当不存在交集时,将所述当前的就绪事务存放至执行事务队列,以根据所述执行事务队列将所述当前的就绪事务的事务日志传输至所述所有后续组件。

18、进一步地,所述当取出的就绪事务为完成事务时,从冲突事务队列中确定与就绪事务存在并发冲突的事务,以对所述完成事务进行冲突事务释放;将所述与就绪事务存在并发冲突的事务的事务日志传输至所述所有后续组件包括:

19、从冲突事务队列中的第一个事务开始,从前向后地依次将所述冲突事务队列中每一个事务携带的待释放id与所述完成事务的事务id进行对比,以判断所述完成事务是否对冲突事务队列中的事务造成冲突阻塞;

20、当所述待释放id与所述完成事务的事务id相同时,将所述待释放id对应的事务日志传输至所述所有后续组件,将所述待释放id存放至执行事务队列;

21、在将所述冲突事务队列中的所有事务判断完毕后,从执行事务队列中去除所述完成事务。

22、进一步地,所述当装载故障发生时,根据所述并发冲突检测的结果恢复所述目标日志包括:

23、当装载故障发生时,将目标日志写入发生所述装载故障的目的服务器的装载组件的文件系统中,得到本地文件;

24、当所述装载故障恢复时,根据所述本地文件中目标日志的事务id是否与并发冲突检测得到的待释放id相同,选择性地直接将所述事务id对应的目标日志入库,或者将所述事务id对应的事务存放至冲突事务队列后再将所述事务id对应的目标日志入库。

25、进一步地,所述当所述装载故障恢复时,根据所述本地文件中目标日志的事务id是否与并发冲突检测得到的待释放id相同,选择性地直接将所述事务id对应的目标日志入库,或者将所述事务id对应的事务存放至冲突事务队列后再将所述事务id对应的目标日志入库包括:

26、若所述事务id与所述待释放id不相同,则直接将所述事务id对应的目标日志入库至所述目的服务器;

27、若所述事务id与所述待释放id相同,则当所述事务id对应的事务已入库时,直接将所述事务id对应的目标日志入库至所述目的服务器;当所述事务id对应的事务未入库时,将所述事务id对应的事务存放至冲突事务队列;

28、每次事务成功入库至所述目的服务器后,从所述冲突事务队列的第一个事务开始,从前往后地依次判断是否存在携带的待释放id与当前成功入库的事务的事务id相同的事务。

29、进一步地,转换组件包括转换分发线程和执行转换线程;其中,一个转换组件对应一个转换分发线程,一个转换组件对应至少一个执行转换线程;所述通过至少一个转换组件对所述事务日志进行转换,得到目标日志包括:

30、通过转换分发线程获取事务日志后,在转换映射结构中,查询所述事务日志对应的事务是否已分配执行转换线程;

31、如果未分配,则通过转换分发线程为所述事务分配执行转换线程,并将所述事务与对应的执行转换线程写入所述转换映射结构;其中,当事务传输完毕后,从转换映射结构中删除所述事务;

32、如果已分配,则通过转换分发线程将所述事务日志传递给相应的执行转换线程;

33、通过执行转换线程处理已分配的事务日志,当所述事务日志与用户转换规则匹配时,对所述事务日志做相应的转换操作,得到目标日志。

34、进一步地,装载组件包括装载分发线程和执行装载线程;其中,一个装载组件对应一个装载分发线程,一个装载组件对应至少一个执行装载线程;所述通过所述装载组件将所述目标日志入库包括:

35、通过装载分发线程获取目标日志,在装载映射结构中查询所述目标日志对应的事务是否已分配数据库连接对象;

36、如果未分配,则当存在空闲的数据库连接对象时,通过装载分发线程将空闲的数据库连接对象分配给所述事务,并记录至装载映射结构;将所述空闲的数据库连接对象放到装载就绪队列,再次获取目标日志,直至不存在转换组件发送的目标日志;

37、如果已分配,则通过装载分发线程将所述目标日志传给相应的数据库连接对象;通过执行装载线程,所述数据库连接对象根据目标日志生成入库命令,执行所述入库命令,以将所述目标日志入库。

38、进一步地,所述将至少一个读取组件和至少一个装载组件进行组合,得到所需的数据同步任务;或,将至少一个读取组件、至少一个转换组件和至少一个装载组件进行组合,得到所需的数据同步任务包括:

39、根据事务事件日志的处理逻辑确定至少一个读取组件和至少一个装载组件的连接关系;或,根据事务日志事件的处理逻辑确定至少一个读取组件、至少一个转换组件和至少一个装载组件的连接关系;

40、根据连接关系将相应的组件通过有向箭头连线连接在一起,得到数据同步任务;

41、其中,一个读取组件能够与至少一个转换组件和/或至少一个装载组件连接,一个转换组件能够与至少一个转换组件和/或至少一个装载组件连接,至少一个所述装载组件能够与目的端数据库连接。

42、第二方面,本发明还提供了一种数据同步及故障恢复的装置,用于实现第一方面所述的数据同步及故障恢复的方法,所述装置包括:

43、至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的数据同步及故障恢复的方法。

44、第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的数据同步及故障恢复的方法。

45、区别于现有技术,本发明至少具有以下有益效果:

46、本发明通过将读取组件、转换组件和装载组件进行组合,得到所需的数据同步任务,使用功能组件以图形化的方式实现设计复杂的数据同步任务,提高了数据同步系统的可扩展性;通过读取组件获取所述数据同步任务所涉及的事务日志,根据并发冲突检测的结果将事务日志传输至所述转换组件;通过所述转换组件对所述事务日志进行转换得到目标日志,将所述目标日志传输至所述装载组件;通过所述装载组件将所述目标日志入库;当装载故障发生时,根据所述并发冲突检测的结果恢复所述目标日志。本发明建立了一套包含数据转换的事务同步流程,支持丰富的数据转换操作,使得数据同步系统的可扩展性强,实现了对事务的并发冲突检测和优化了装载故障恢复策略,解决现有技术中基于事务日志增量的数据同步系统,通过属性文件配置实现数据转换操作易用性较低,使用串行执行的方法进行数据同步性能较差,且装载故障发生时停止整个数据同步任务导致数据丢失的问题。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1