一种并行同步增量数据的方法和系统与流程
- 国知局
- 2024-11-18 18:13:53
本发明涉及数据同步,尤其涉及一种并行同步增量数据的方法和系统。
背景技术:
1、随着国产数据库技术与产品的完善,越来越多的机构或企业转向使用国产数据库opengauss,在替换数据库的过程中,需要将源库的数据完整地迁移到新库中,业务端要求数据库的迁移不影响业务数据的正常写入和查询,因此数据在做全量迁移过程中发生的增量数据也需要尽快地同步至目标库中,以尽可能短的时间拉齐两侧数据库中的数据,方便业务进行割接切换。另外某些数据库可能会有较大的增量数据产生,在增量同步的过程中,需要尽可能实时将数据写入目标库中,以满足业务并轨运行的需求。
2、在实际应用中,由于要保证事务写入的顺序和完整性,需要以串行的方式将采集到的增量数据写入到目标数据库中,以保证在目标库中数据的一致性和完整性。即在任意时间查询目标库,均为源端数据库曾经发生的快照数据,且当出现数据异常时,目标库也不会被写入和提交不完整的事务。但使用串行方式写入目标库会导致同步速度慢,无法在业务割接窗口期完成所有的增量数据同步;并且由于同步速度慢,源库和目标库的数据差异大,也无法达到业务并轨运行的需求。
3、因此,如何提供一种增量数据同步方法,在保证事务的顺序及完整性的同时,将采集到的增量数据同步并行写入目标库中,成为亟待解决的技术问题。
技术实现思路
1、有鉴于此,为了克服现有技术的不足,本发明旨在提供一种并行同步增量数据的方法和系统。
2、根据本发明的第一方面,提供一种并行同步增量数据的方法,该方法包括:
3、采用增量主线程初始化核心线程池、子队列以及当前队列;
4、根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据。
5、优选地,本发明并行同步增量数据的方法中,采用增量主线程初始化核心线程池、子队列以及当前队列,包括:
6、采用增量主线程设置线程池的核心线程数,根据设置的核心线程数初始化子队列的个数,为每个子队列设置长度限制;
7、采用增量主线程初始化一个缓冲队列作为当前队列,为当前队列设置长度限制。
8、优选地,本发明并行同步增量数据的方法中,当前队列的长度限制与子队列的长度限制相同。
9、优选地,本发明并行同步增量数据的方法中,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:
10、判断当前队列是否达到长度限制,如果当前队列未达到长度限制,判断当前处理的事务的dml数据与子队列的数据是否存在冲突;
11、如果当前处理的事务的dml数据与子队列的数据存在冲突,通过并发执行线程池的子线程将所有子队列的数据写入数据库,将当前处理的事务写入当前队列并更新当前队列的事务信息;
12、如果当前处理的事务的dml数据与子队列的数据不存在冲突,将当前处理的事务写入当前队列并更新当前队列的事务信息。
13、优选地,本发明并行同步增量数据的方法中,判断当前处理的事务的dml数据与子队列的数据是否存在冲突,包括:
14、根据当前处理的事务以及子队列的数据对应的事务信息缓存,判断当前处理的事务的dml数据与子队列的数据是否存在相同的dml所作用的数据表和数据行的唯一标识;
15、如果当前处理的事务的dml数据与子队列的数据是存在相同的dml所作用的数据表和数据行的唯一标识,将当前处理的事务的dml数据与子队列的数据判定为存在数据冲突;
16、如果当前处理的事务的dml数据与子队列的数据是不存在相同的dml所作用的数据表和数据行的唯一标识,将当前处理的事务的dml数据与子队列的数据判定为不存在数据冲突。
17、优选地,本发明并行同步增量数据的方法中,当前处理的事务的dml数据与子队列的数据对应的dml所作用的数据表和数据行的唯一标识,分别记录于当前处理的事务以及子队列的数据对应的事务信息缓存中,对于含有主键或唯一键或外键的数据表,将数据表名和主键列或唯一键列或外键列对应列名及上述列值作为唯一标识;对于不含主键和唯一键和外键的表,将数据表名及根据所有列的列值计算出的hash值作为唯一标识。
18、优选地,本发明并行同步增量数据的方法中,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:
19、如果当前队列达到长度限制,判断剩余子队列的个数与当前队列个数的总和是否达到子队列个数限制;
20、如果剩余子队列的个数与当前队列个数的总和未达到子队列个数限制,将当前队列的数据按照子队列的顺序依次写入子队列中,将当前队列的事务信息写入子队列的事务信息缓存中,清空当前队列以及当前队列的事务信息,重新根据子队列事务缓存信息判断当前处理的事务与子队列的数据是否存在数据冲突。
21、优选地,本发明并行同步增量数据的方法中,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:如果剩余子队列的个数与当前队列个数的总和达到子队列个数限制,将当前队列写入到最后一个子队列中,清空当前队列和子队列的事务信息,通过并发执行线程池的子线程将所有子队列的数据写入数据库。
22、优选地,本发明并行同步增量数据的方法中,通过并发执行线程池的子线程将所有子队列的数据写入数据库,包括:
23、在通过并发执行线程池的子线程将子队列的数据入库时,判断子队列中dml命令所作用的数据表是否含有外键表;
24、当子队列中dml命令所作用的数据表不含有外键表,根据表名将子队列中的数据重新排列,通过pbe方式将子队列中数据按重新排列的顺序写入数据库中;当子队列中dml命令所作用的数据表含有外键表,通过pbe方式将子队列中的数据按默认顺序写入数据库中;
25、按照子队列的顺序提交子队列的事务,在完成子队列的事务提交后,清空子队列以及子队列的事务信息对应的缓存数据。
26、根据本发明的第二方面,提供一种并行同步增量数据的系统,该系统包括并行同步服务端,该并行同步服务端用于:采用增量主线程初始化核心线程池、子队列以及当前队列;根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据。
27、根据本发明的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明第一方面所述的方法。
28、本发明并行同步增量数据的方法和系统,通过将数据并发写入的方式和子队列中数据重排序,可以提升增量同步的速度,降低目标端与源端的数据延迟,并保证事务提交的顺序和完整性,达到数据实时同步的效果。
技术特征:1.一种并行同步增量数据的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的并行同步增量数据的方法,其特征在于,采用增量主线程初始化核心线程池、子队列以及当前队列,包括:
3.根据权利要求2所述的并行同步增量数据的方法,其特征在于,当前队列的长度限制与子队列的长度限制相同。
4.根据权利要求1所述的并行同步增量数据的方法,其特征在于,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:
5.根据权利要求4所述的并行同步增量数据的方法,其特征在于,判断当前处理的事务的dml数据与子队列的数据是否存在冲突,包括:
6.根据权利要求5所述的并行同步增量数据的方法,其特征在于,当前处理的事务的dml数据与子队列的数据对应的dml所作用的数据表和数据行的唯一标识,分别记录于当前处理的事务以及子队列的数据对应的事务信息缓存中,对于含有主键或唯一键或外键的数据表,将数据表名和主键列或唯一键列或外键列对应列名及上述列值作为唯一标识;对于不含主键和唯一键和外键的表,将数据表名及根据所有列的列值计算出的hash值作为唯一标识。
7.根据权利要求4所述的并行同步增量数据的方法,其特征在于,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:
8.根据权利要求7所述的并行同步增量数据的方法,其特征在于,根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据,包括:如果剩余子队列的个数与当前队列个数的总和达到子队列个数限制,将当前队列写入到最后一个子队列中,清空当前队列和子队列的事务信息,通过并发执行线程池的子线程将所有子队列的数据写入数据库。
9.根据权利要求8所述的并行同步增量数据的方法,其特征在于,通过并发执行线程池的子线程将所有子队列的数据写入数据库,包括:
10.一种并行同步增量数据的系统,其特征在于,所述系统包括并行同步服务端,所述并行同步服务端用于:采用增量主线程初始化核心线程池、子队列以及当前队列;根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据。
技术总结本发明涉及数据同步技术领域,提供一种并行同步增量数据的方法和系统,包括:采用增量主线程初始化核心线程池、子队列以及当前队列;根据当前队列是否达到长度限制以及当前处理的事务与子队列的数据是否存在数据冲突,处理采集的增量数据。本发明的并行同步增量数据的方法和系统,通过将数据并发写入的方式和子队列中数据重排序,可以提升增量同步的速度,降低目标端与源端的数据延迟,并保证事务提交的顺序和完整性,达到数据实时同步的效果。技术研发人员:张雪,黄赵伟受保护的技术使用者:北京海量数据技术股份有限公司技术研发日:技术公布日:2024/11/14本文地址:https://www.jishuxx.com/zhuanli/20241118/327707.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表