一种组件化的数据同步方法和装置与流程

文档序号:37557843发布日期:2024-04-09 17:50阅读:51来源:国知局
一种组件化的数据同步方法和装置与流程

本发明涉及数据同步,特别是涉及一种组件化的数据同步方法和装置。


背景技术:

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

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

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


技术实现思路

1、本发明要解决的技术问题是提供一种组件化的数据同步方法和装置,其目的在于建立一套包含数据转换的事务同步流程,支持丰富的数据转换操作,通过功能组件以图形化的方式,设计复杂的数据同步任务,使得数据同步系统的可扩展性强,解决现有技术中基于事务日志增量的数据同步系统,通过属性文件配置实现数据转换操作,不便于操作和维护,易用性较低,任务设计非常不灵活的问题。

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

3、第一方面,本发明提供了一种组件化的数据同步方法,包括:

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

5、通过读取组件获取所述数据同步任务所涉及的事务事件日志,将所述事务事件日志传输至所述读取组件的所有后续组件;其中,读取组件的后续组件为转换组件或装载组件;

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

7、当所述读取组件的后续组件为装载组件时,通过所述装载组件将所述目标数据入库。

8、进一步地,所述通过读取组件获取所述数据同步任务所涉及的事务事件日志,将所述事务事件日志传输至所述读取组件的所有后续组件包括:

9、获取属于同一事务的事务事件日志,将所述属于同一事务的事务事件日志存放至对应的预设缓存集合;其中,所述属于同一事务的事务事件日志为所述事务的全部的事务事件日志或部分连续的事务事件日志;

10、当事务事件日志为提交事件时,将与所述提交事件对应的事务事件日志从所述预设缓存集合添加至传输就绪队列,得到就绪事务;

11、根据传输就绪队列中的就绪事务是否存在并发冲突,选择性地将相应的就绪事务传输至所述所有后续组件;或者将相应的就绪事务挂载至冲突事务队列,直至与所述就绪事务存在并发冲突的事务执行完毕后,将所述就绪事务从所述冲突事务队列中取出并传输至所述所有后续组件;

12、当前事务的事务事件日志处理完毕后,再获取下一个事务的事务事件日志,直至收到停止获取指令。

13、进一步地,所述根据传输就绪队列中的就绪事务是否存在并发冲突,选择性地将相应的就绪事务传输至所述所有后续组件;或者将相应的就绪事务挂载至冲突事务队列包括:

14、依次判断执行事务队列中,是否有事务事件日志与当前的就绪事务存在并发冲突;当存在并发冲突时,在冲突事务队列中记录所有与所述当前的就绪事务存在并发冲突的事务事件日志,将所述当前的就绪事务挂载至冲突事务队列;

15、依次判断冲突事务队列中,是否有事务事件日志与当前的就绪事务存在并发冲突;当存在并发冲突时,在冲突事务队列中记录所有与所述当前的就绪事务存在并发冲突的事务事件日志,将所述当前的就绪事务挂载至冲突事务队列;

16、当当前的就绪事务不存在并发冲突时,将所述当前的就绪事务加入执行事务队列,根据所述执行事务队列将就绪事务传输给所述所有后续组件。

17、进一步地,所述当前事务的事务事件日志处理完毕后,再获取下一个事务的事务事件日志,直至收到停止获取指令包括:

18、获取装载完成通知队列中的完成事务,判断与当前的完成事务传输相同事务事件日志的所有装载组件是否均执行完毕;其中,当前事务的事务事件日志处理完毕后,当前事务为完成事务;

19、当所述所有装载组件均执行完毕时,清除所述当前的完成事务对应的预设缓存集合;从冲突事务队列中获取与所述当前的完成事务存在并发冲突的至少一个就绪事务,解除每个就绪事务与所述当前的完成事务之间的并发约束;

20、判断被获取的就绪事务是否还存在其他的并发约束,将不存在并发约束的就绪事务加入执行事务队列,根据所述执行事务队列将相应的就绪事务传输给所述所有后续组件;

21、从执行事务队列中去除所述当前的完成事务,获取下一个事务的事务事件日志,直至收到停止获取指令。

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

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

24、如果未分配,则通过转换分发线程为所述事务分配执行转换线程,并将所述事务与对应的执行转换线程写入所述转换映射结构;其中,一个执行转换线程处理一个事务的所有事务事件日志;

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

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

27、进一步地,所述将所述目标数据传输至所述装载组件包括:

28、如果并发的事务个数大于预设阈值,则通过执行转换线程将所述事务所有的事务事件日志对应的目标数据传输给目标消息队列,或者通过执行转换线程将所述事务中当前部分连续的事务事件日志对应的目标数据传输给目标消息队列;其中,一个事务对应至少一个事务事件日志;

29、如果并发的事务个数小于等于预设阈值,则通过执行转换线程将预设传递个数事务事件日志对应的目标数据传输给目标消息队列;

30、其中,将事务的提交事件对应目标数据传输完毕后,从转换映射结构中删除所述事务。

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

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

33、如果未分配,则当存在空闲的数据库连接对象时,将空闲的数据库连接对象分配给所述事务,并记录至装载映射结构;将所述空闲的数据库连接对象放到装载就绪队列,再次从所述目标消息队列中读取目标数据,直至所述目标消息队列为空;其中,一个执行装载线程处理一个事务的所有事务事件日志;

34、如果已分配,则将所述目标数据传给相应的数据库连接对象;当所述数据库连接对象在等待事务事件日志时,将所述数据库连接对象放到装载就绪队列,再次从所述目标消息队列中读取目标数据;当所述数据库连接对象未等待事务事件日志时,直接再次从所述目标消息队列中读取目标数据,直至所述目标消息队列为空;

35、通过执行装载线程从装载就绪队列取数据库连接对象,按照事务中事务事件日志的顺序,依次将对应的目标数据入库。

36、进一步地,所述通过执行装载线程从装载就绪队列取数据库连接对象,按照事务中事务事件日志的顺序,依次将对应的目标数据入库包括:

37、如果最后一条目标数据不为提交事件,则入库完毕后将当前的数据库连接对象放到等待连接队列,再次从所述装载就绪队列取数据库连接对象,直至所述装载就绪队列为空;

38、如果最后一条目标数据为提交事件,且所述装载组件为最后一个装载组件,则将所述事务加入对应读取组件的装载完成通知队列;若等待连接队列为空,则使所述当前的数据库连接对象空闲;若等待连接队列不为空,则将所述当前的数据库连接对象分配给等待连接队列中的头事务,并将分配后的数据库连接对象放到装载就绪队列,再次从所述装载就绪队列取数据库连接对象,直至所述装载就绪队列为空。

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

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

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

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

43、第二方面,本发明还提供了一种组件化的数据同步装置,用于实现第一方面所述的组件化的数据同步方法,所述装置包括:

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

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

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

47、本发明通过将读取组件、转换组件和装载组件进行组合,得到所需的数据同步任务,使用功能组件以图形化的方式实现设计复杂的数据同步任务;通过读取组件获取所述数据同步任务所涉及的事务事件日志,将所述事务事件日志传输至所述转换组件,通过所述转换组件对所述事务事件日志进行转换,得到目标数据,将所述目标数据传输至所述装载组件;通过所述装载组件将所述目标数据入库;本发明建立了一套包含数据转换的事务同步流程,支持丰富的数据转换操作,使得数据同步系统的可扩展性强,解决现有技术通过属性文件配置实现数据转换操作,不便于操作和维护,易用性较低,任务设计非常不灵活的问题。

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