数据同步的方法、装置、计算机设备及存储介质与流程

文档序号:36247189发布日期:2023-12-02 13:41阅读:24来源:国知局
数据同步的方法与流程

本发明涉及数据同步,具体涉及数据同步的方法、装置、计算机设备及存储介质。


背景技术:

1、随着计算机技术和信息技术的不断发展,海量数据的不断涌现,企业迫切需要对数据进行高效、准确、及时地分析,数据作为一种生产要素,其挖掘和分析价值越来越被重视,越来越多的客户在其数字化项目中都会引入数据分析相关的应用,这涉及数据同步技术。

2、数据同步指的是由源端数据库向目标端数据库定期同步数据,一般是按天、周或者月作为数据的更新周期,目标端数据库可以提供对历史数据的分析与查询,能够帮助决策者制定企业运营战略,但这种方式不能实时地反映企业商业信息的变化。为了能够及时将数据发送到决策者手中,为企业提供更有价值的战术型决策支持,因此以cdc(changedata capture,变化数据捕获)为桥梁的实时bi(business intelligence,商业智能)分析系统需求和建设应运而生。

3、源端数据库对数据进行dml(data manipulation language,数据操作语言)操作,例如插入操作(insert)、更新操作(update)、删除操作(delete),可以生成相应的dml数据;基于cdc能够实时捕获这些dml数据,所捕获的dml数据即为dml数据,这种方式可以尽可能高效地同步到目标端数据库中,尽可能提高目标端数据库中数据的实时性。

4、但基于cdc将源端的dml数据同步入库目标端时,需要频繁地进行i/o(inputoutput,输入输出)操作,导致数据在目标端的入库效率较低。


技术实现思路

1、有鉴于此,本发明提供了一种数据同步的方法、装置、计算机设备及存储介质,以解决数据入库时效率较低的技术问题。

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

3、将实时捕获的源端数据库的数据操作语言dml数据缓存至缓存队列;所述缓存队列用于缓存多条dml数据;

4、根据dml数据的操作类型,将所述缓存队列中非冗余的dml数据分类聚合为多个缓存子队列;所述非冗余的dml数据包括所述缓存队列中对应同一数据对象的最后一个dml数据,所述缓存子队列中的dml数据属于同一操作类型;

5、以所述缓存子队列为单位,向目标端数据库同步所述缓存队列的dml数据。

6、本发明将实时捕获的dml数据缓存至缓存队列,并基于dml数据的操作类型对缓存队列中的dml数据进行分类聚合,使得缓存子队列中的dml数据均对应同一种操作类型,从而在向目标端数据库进行数据同步时,只需一次i/o操作,即可将一个缓存子队列中的多个dml数据批量并行写入至目标端数据库,并最终实现整个缓存队列的快速入库;并且,只将非冗余的dml数据分类至缓存子队列,在以缓存子队列为单位进行同步时,可以有效保证目标端数据库与源端数据库相一致。与传统按序将dml数据同步至目标端数据库的目标端入库方案相比,该方法可以对同一操作类型的多个dml数据批量入库,只需少量i/o操作,可以减少数据时延,能够提升端到端数据同步的效率,保证实时性,且可以大幅度提升吞吐量。

7、在一些可选的实施方式中,所述根据dml数据的操作类型,将所述缓存队列中非冗余的dml数据分类聚合为多个缓存子队列,包括:

8、从所述缓存队列中按序取出需要分类的当前dml数据,根据所述当前dml数据的操作类型将所述当前dml数据分类至相应的缓存子队列,并删除与所述当前dml数据对应同一数据对象的之前的冗余dml数据,直至遍历所述缓存队列;其中,dml数据在所述缓存队列中的顺序,与所述源端数据库生成dml数据的顺序一致;

9、得到与插入操作相对应的插入缓存子队列,与更新操作相对应的更新缓存子队列以及与删除操作相对应的删除缓存子队列。

10、本发明以遍历缓存队列的方式,可以方便快速地将每个dml数据分类至相应的缓存子队列中。并且,可以将缓存队列分类为三个缓存子队列,基于较少的缓存子队列,可以较快地实现目标端数据入库;相较于传统入库方法,可以提高十倍以上的入库速率。

11、在一些可选的实施方式中,所述根据所述当前dml数据的操作类型将所述当前dml数据分类至相应的缓存子队列,并删除与所述当前dml数据对应同一数据对象的之前的冗余dml数据,包括:

12、确定所述当前dml数据的操作类型;

13、在所述当前dml数据的操作类型为插入操作的情况下,将所述当前dml数据推入至所述插入缓存子队列;

14、在所述当前dml数据的操作类型为更新操作的情况下,将所述当前dml数据推入至所述更新缓存子队列;

15、在所述当前dml数据的操作类型为删除操作的情况下,将所述当前dml数据推入至所述删除缓存子队列,并在所述插入缓存子队列存在第一dml数据的情况下,删除所述插入缓存子队列中的所述第一dml数据,在所述更新缓存子队列存在第二dml数据的情况下,删除所述更新缓存子队列中的所述第二dml数据;

16、其中,所述第一dml数据为对所述当前dml数据所操作的数据对象进行插入操作的dml数据;所述第二dml数据为对所述当前dml数据所操作的数据对象进行更新操作的dml数据。

17、本发明在当前dml数据的操作类型为更新操作或删除操作时,删除冗余的第一dml数据、第二dml数据,使得缓存子队列中只保存对数据对象的最后一次dml操作的数据,能够有效避免因源端数据库对同一数据对象进行多次dml操作,导致数据同步后源端与目标端数据不一致的问题。即使以缓存子队列为单位,将dml数据同步至目标端数据库,也可以有效保证源端数据库与目标端数据库的一致性。并且,删除冗余的dml数据后,可以有效降低目标端入库负载,减少目标端数据库的dml操作次数,能够进一步提高目标端的入库效率。经测试,在通用的交易型业务流的场景下,该方法能够去除10%~30%的dml数据冗余。

18、在一些可选的实施方式中,所述根据所述当前dml数据的操作类型将所述当前dml数据分类至相应的缓存子队列,还包括:

19、确定所述当前dml数据的唯一键;所述唯一键与dml数据所操作的数据对象相对应;

20、在所述当前dml数据的操作类型为插入操作的情况下,将所述当前dml数据的唯一键添加至键缓存队列;

21、在所述当前dml数据的操作类型为更新操作的情况下,将所述当前dml数据的唯一键添加至键缓存队列;

22、在所述当前dml数据的操作类型为删除操作的情况下,通过判断所述键缓存队列是否存在所述当前dml数据的唯一键,确定所述插入缓存子队列是否存在第一dml数据、或所述更新缓存子队列是否存在第二dml数据。

23、本发明利用唯一键是否位于键缓存队列中,可以方便快速地确定是否存在需要去冗余的dml数据,且基于该唯一键也可在缓存子队列中定位到需要去冗余的dml数据。

24、在一些可选的实施方式中,所述根据所述当前dml数据的操作类型将所述当前dml数据分类至相应的缓存子队列,还包括:

25、在所述当前dml数据的操作类型为删除操作、且所述键缓存队列存在所述当前dml数据的唯一键的情况下,删除所述键缓存队列中的所述当前dml数据的唯一键。

26、在一些可选的实施方式中,所述更新缓存子队列以键值对存储dml数据;所述键值对的键为dml数据的唯一键,所述键值对的值为dml数据;所述唯一键与dml数据所操作的数据对象相对应;

27、所述将所述当前dml数据推入至所述更新缓存子队列,包括:

28、在所述更新缓存子队列存在与所述当前dml数据具有相同唯一键的dml数据的情况下,以覆盖与所述当前dml数据具有相同唯一键的dml数据的方式,将所述当前dml数据推入至所述更新缓存子队列。

29、本发明利用键值对可以方便快速地去掉更新缓存子队列中重复的dml数据,只保存最后一个最后一次更新操作所对应的dml数据,可以去掉冗余的更新操作,在存在多个更新操作的情况下可以实现去冗余。

30、在一些可选的实施方式中,所述将所述当前dml数据推入至所述删除缓存子队列,包括:将所述当前dml数据的唯一键推入至所述删除缓存子队列;所述唯一键与dml数据所操作的数据对象相对应。本发明可以只将当前dml数据的唯一键推入至删除缓存子队列,即可以忽略当前dml数据的其他信息,从而可以减小删除缓存子队列所需的存储空间。

31、在一些可选的实施方式中,所述以所述缓存子队列为单位,向目标端数据库同步所述缓存队列的dml数据,包括:

32、以所述缓存子队列为单位,向目标端数据库依次同步所述删除缓存子队列、所述插入缓存子队列、所述更新缓存子队列。

33、本发明按照先同步删除缓存子队列,再同步插入缓存子队列或更新缓存子队列的方式,基于该同步顺序,可以将源端数据库的dml数据准确无误地同步至目标端数据库,能够保证源端与目标端的数据一致性。

34、在一些可选的实施方式中,所述根据dml数据的操作类型,将所述缓存队列中非冗余的dml数据分类聚合为多个缓存子队列,还包括:

35、确定与所述更新缓存子队列中的dml数据所对应的需要删除的旧dml数据以及需要插入的新dml数据;以及,

36、将所述旧dml数据推入至所述删除缓存子队列,并将所述新dml数据推入至所述插入缓存子队列;

37、所述以所述缓存子队列为单位,向目标端数据库同步所述缓存队列的dml数据,包括:

38、以所述缓存子队列为单位,向目标端数据库依次同步所述删除缓存子队列、所述插入缓存子队列。

39、本发明将更新操作分解为删除操作和插入操作,通过批量提交删除操作、插入操作,在目标端数据库为列式存储数据库时,也可实现对更新操作地批量入库。

40、在一些可选的实施方式中,所述根据所述当前dml数据的操作类型将所述当前dml数据分类至相应的缓存子队列,还包括:

41、在所述当前dml数据的操作类型为更新操作的情况下,若所述插入缓存子队列存在第一dml数据,删除所述插入缓存子队列中的所述第一dml数据。

42、在一些可选的实施方式中,所述将实时捕获的源端数据库的数据操作语言dml数据缓存至缓存队列,包括:

43、将实时捕获的源端数据库的dml数据缓存至流队列;

44、将所述流队列中不同数据表的dml数据缓存至相应数据表的缓存队列。

45、本发明在将dml数据缓存至流队列后,并不直接向目标端数据库同步,而是按表进行分类,确定每一数据表对应的缓存队列,后续能够以该缓存队列为基础进行入库。

46、在一些可选的实施方式中,所述将所述流队列中不同数据表的dml数据缓存至相应数据表的缓存队列,包括:

47、在所述流队列中数据表的dml数据的数量大于相应数据表的缓存队列的缓存量的情况下,将所述流队列中数据表的dml数据分批缓存至相应数据表的多个缓存队列。

48、第二方面,本发明提供了一种数据同步的装置,包括:

49、数据缓存模块,用于将实时捕获的源端数据库的数据操作语言dml数据缓存至缓存队列;所述缓存队列用于缓存多条dml数据;

50、分类聚合模块,用于根据dml数据的操作类型,将所述缓存队列中非冗余的dml数据分类聚合为多个缓存子队列;所述非冗余的dml数据包括所述缓存队列中对应同一数据对象的最后一个dml数据,所述缓存子队列中的dml数据属于同一操作类型;

51、同步模块,用于以所述缓存子队列为单位,向目标端数据库同步所述缓存队列的dml数据。

52、第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的数据同步的方法。

53、第四方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的数据同步的方法。

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