一种基于双队列的数据同步方法和系统与流程

专利2023-02-24  100



1.本发明涉及数据同步技术领域,特别涉及一种基于双队列的数据同步方法和系统。


背景技术:

2.信息化系统中的数据同步是一种将数据从源头数据库抽取到目标数据库的技术,常用于不同业务系统之间的数据共享,或者大数据分析中数据仓库的数据抽取。数据同步一般可分为实时数据同步、定时数据同步;实时数据同步即源头数据库发生了数据变更,目标数据库可实时发生相应的变化;定时数据同步即源头数据库发生了数据变更之后,目标数据库在一定时间之后,才会发生相应的变化。
3.实时数据同步常用的技术方案有接口实时调用、数据库日志实时解析同步等。定时数据同步一般设定一个数据同步的时间间隔,或者5分钟、或者半小时、或者一天等等,需要使用etl工具,编写数据抽取脚本,每隔一定时间就会从源头数据库抽取数据。
4.实时数据同步技术若采用接口实时调用来同步数据,则需要在目标业务系统新增数据同步的接口,源头业务系统在每一次数据变更之后都需要调用一次目标业务系统的接口,存在改造工作量大、影响源头业务系统性能、对于运行了很长时间的业务系统可能难以进行改造等问题。
5.实时数据同步技术若采用数据库日志实时解析同步的技术方案,对于源头业务系统和目标业务系统都不需要进行改造,但是不同业务系统中数据库的日志格式不尽相同,解析日志并完成数据的抽取,需要针对每一种数据库都有一个日志解析的技术方案,存在较高的技术门槛,通常不易实行。
6.定时数据同步技术每隔一定时间抽取一次数据,通常要求源头数据库的数据一旦发生变更之后,数据表的时间字段也必须同步更新,若时间字段没有发生变化,etl工具则无法捕获数据变化,目标数据库就会丢失数据变更。同时,一旦etl工具出现故障,需要手动调整同步时间,否则目标数据库就会丢失数据。定时数据同步要求源头业务系统对于每一次数据变更都必须更新数据表的时间字段,要求etl工具完成数据抽取的时间不能超过定时的时间间隔,一旦这些条件没有满足,目标数据库就会丢失数据。
7.中国专利(cn 111813868 a)公开了一种数据同步方法及装置,通过在业务服务端生成的第一消息队列中,获取第一数据变更消息;获取与所述第一数据变更消息关联的待同步数据;利用所述待同步数据,对本地数据进行更新操作;生成针对所述更新操作的第二数据变更消息;将所述第二数据变更消息发布至第二消息队列中,以供与所述存储服务端关联的应用服务端,根据所述第二数据变更消息进行数据更新。该专利需要在业务服务端和应用服务端之间添加存储服务端对本地数据根据时间戳进行先后更新存储,需要在多个服务端新增多种模块,改造量较大;且两个消息队列同步过程中是将数据一起进行同步,这样造成的处理量就会变大,降低同步效率。


技术实现要素:

8.针对现有技术两个业务系统中数据同步效率较低的问题,本发明提出一种基于双队列的数据同步方法和系统,通过采用双队列的技术方案来完成数据同步,最大限度地减少对源头业务系统和目标业务系统的改造,同时降低实时数据同步的技术门槛,使技术方案更容易落地实行,提高同步效率。
9.为了实现上述目的,本发明提供以下技术方案:
10.一种基于双队列的数据同步系统,包括第一业务系统和第二业务系统,还包括第一数据同步应用端和第二数据同步应用端;
11.所述第一业务系统将变更数据的第一消息发送到第一消息队列,所述第一消息包括变更数据对应的id值和变更类型;
12.第一数据同步应用端,用于根据第一消息队列发送的第一消息查询第一业务系统中的第一数据库以获取变更数据,再将变更数据和第一消息转换成第二消息发送到第二消息队列;
13.第二数据同步应用端,用于对第二消息队列发送的第二消息进行校验,校验成功后,将变更数据同步到第二业务系统中的第二数据库。
14.优选地,所述第一业务系统中内置有数据同步代理类,用于实时捕捉第一数据库的数据变更,输出变更数据对应的id值和变更类型到第一消息队列。
15.优选地,所述数据同步代理类,采用springaop切面代理技术,在第一数据库增删改方法中添加注解,通过解析注解的值,最后从解析结果中通过jdk的反射技术获得变更数据的id值和变更类型。
16.优选地,所述注解包括队列名称、实体类型、id的字段名称。
17.本发明还提供一种基于双队列的数据同步方法,包括以下步骤:
18.s1:数据同步代理类使用springaop切面代理技术,在第一数据库增删改方法中添加注解;当第一数据库发生变化时,捕捉变更数据,并解析增删改方法上的注解得到第一消息,再输出第一消息到第一消息队列,第一消息包括变更数据对应的id和变更类型;
19.s2:第一数据同步应用端从第一消息队列中获取第一消息,根据第一消息查询第一数据库以获取变更数据,将变更数据转换成第二消息,发送第二消息到第二消息队列;
20.s3:第二数据同步应用端从第二消息队列获取第二消息后,进行校验,校验成功后,将变更数据同步到第二业务系统的第二数据库中。
21.优选地,所述s1具体包括:
22.s1-1:数据同步代理类使用springaop切面代理技术,在第一数据库的增删改方法中添加注解,所述注解包括定义队列名称、实体类型、id的字段名称;
23.s1-2:当第一数据库增删改方法调用之后,实时捕捉变更数据并解析注解的值,最后从解析结果中通过jdk的反射技术获得变更数据的id,再将id和实体类型打包成第一消息;
24.s1-3:以json的格式将第一消息发送到第一消息队列。
25.优选地,所述s2具体包括:
26.s2-1:订阅第一消息队列,实时接收数据同步代理类推送的第一消息;
27.s2-2:根据第一消息直接在第一业务系统中的第一数据库查询实体表或联表关联
查询以获取变更数据;
28.s2-3:将变更数据打包成第二消息,推送到第二消息队列。
29.优选地,所述s3具体包括:
30.s3-1:订阅第二消息队列,实时接收第一数据同步应用端推送的第二消息;
31.s3-2:对第二消息进行校验,校验通过后,将变更数据同步到第二业务系统的第二数据库。
32.综上所述,由于采用了上述技术方案,与现有技术相比,本发明至少具有以下有益效果:
33.本发明通过采用双队列的技术方案来完成数据同步,最大限度地减少对源头业务系统和目标业务系统的改造,同时降低实时数据同步的技术门槛,使技术方案更容易落地实行,提高同步效率。
34.第一业务系统中的数据同步代理类只获取变更数据对应的id值以及实体类型,不需要传输变更数据,仅传输变更数据的实体类型和实体id值,最大限度减少对第一业务系统的性能影响,降低数据传输时间,提高同步效率。
附图说明:
35.图1为根据本发明示例性实施例的一种基于双队列的数据同步系统示意图。
36.图2为根据本发明示例性实施例的一种基于双队列的数据同步方法示意图。
具体实施方式
37.下面结合实施例及具体实施方式对本发明作进一步的详细描述。但不应将此理解为本发明上述主题的范围仅限于以下的实施例,凡基于本发明内容所实现的技术均属于本发明的范围。
38.在本发明的描述中,需要理解的是,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
39.如图1所示,本发明提供一种基于双队列的数据同步系统,包括依次连接的第一业务系统10,第一数据同步应用端30,第二数据同步应用端50和第二业务系统60。
40.本发明的目的是实现第一业务系统10和第二业务系统60之间的数据同步,且只需对第一业务系统10进行改造,无需对第二业务系统60进行任何改造,节约了成本。
41.本实施例中,第一业务系统10中设置有第一数据库101和数据同步代理类102。第一数据库101,用于对第一业务系统10中的数据进行存储;数据同步代理类102,用于捕捉第一数据库101的数据变更,输出变更数据对应的id值和变更类型到第一消息队列20。
42.本实施例中,数据同步代理类102,运用springaop切面代理技术,将数据同步逻辑织入到第一数据库101的增删改方法中;例如在增删改方法中添加注解(包括队列名称、实体类型、id的字段名称等),通过注解来识别哪些方法是会引起数据修改的,即通过解析注解的值,最后从返回结果中通过jdk的反射技术获得变更数据的id值。
43.数据同步代理类102的具体实现步骤为:
44.1.定义注解类datasync,注解中定义队列名称、实体类型、id的字段名称;
[0045][0046]
2.数据同步代理类需要动态代理使用了注解@datasync的类,其次,解析注解的值,最后从返回结果中通过jdk的反射技术获得实体类的id值,并将id值、实体类型发布到第一消息队列中,其具体实现如下:
[0047]
[0048][0049]
3.要求实体增删改方法返回实体本身,同时确保注解@datasync使用了正确的值。
[0050]
4.以json的格式向第一消息队列发送数据,具体为:
[0051][0052]
第一数据同步应用端30,用于从第一消息队列20中获取id值后,查询第一业务系统10中的第一数据库101,从而获取变更数据,再将变更数据发送到第二消息队列40。
[0053]
本实施例中,数据同步代理类102只获取第一业务系统10中的变更数据的id值以及实体类型,最大限度减少对第一业务系统10的性能影响;第一消息队列20也只需传输id值以及实体类型,无需将待同步数据一起传输,这样可以减少数据同步的时间,提高同步效率。第一数据同步应用端30可id值对第一数据库101做任何复杂的数据查询,既避免影响第一业务系统10的性能,也具备足够的灵活性。
[0054]
第二数据同步应用端50,用于从第二消息队列40中获取变更数据并进行校验(还有其他很多的业务字段,这些业务字段有一定的业务限制,根据不同的业务需求,对数据字段进行非空校验、数值校验,、长度范围校验、时间字符串格式校验、枚举值校验等,例如必须大于等于某阈值或小于某阈值);校验成功之后,将变更数据更新到第二业务系统60中的第二数据库601,从而实现了第一业务系统10发生数据变更之后,第二业务系统60也能完成数据变更的实时同步;若校验不成功,则将校验不成功的数据暂时存储到第二业务系统60的第二数据库中,并找到检验不成功的原因之后,修正校验不成功的数据,再手动发送到第一消息队列中,第二数据同步应用端50获取到修正后的数据,再完成入库的操作。
[0055]
如图2所示,本实施例中,基于上述系统,还提供一种基于双队列的数据同步方法,具体包括以下步骤:
[0056]
s1:数据同步代理类实时查询第一业务系统的第一数据库以捕捉变更数据,输出第一消息到第一消息队列,第一消息包括变更数据的id和变更类型;
[0057]
本实施例中,为减少对第一业务系统的性能影响和提高数据同步效率,第一消息中只传输变更数据的id和变更类型,不传输变更数据,具体步骤为:
[0058]
s1-1:在第一数据库的增删改方法中添加注解,包括定义队列名称、实体类型、id
的字段名称;
[0059]
s1-2:实时查询第一数据库捕捉变更数据,解析注解的值,最后从返回结果中通过jdk的反射技术获得第一消息,包括变更数据的id;
[0060]
本实施例中,注解的值是通过springaop技术提供的api来获取的,注解的值包含队列名称、实体类型、id的字段名称。
[0061]
s1-3:以json的格式将第一消息发送到第一消息队列。
[0062]
s2:第一数据同步应用端从第一消息队列中获取第一消息,根据第一消息查询第一数据库获取变更数据,将变更数据打包成第二消息,发送第二消息到第二消息队列。
[0063]
本实施例中,第一数据同步应用端是一个独立部署的应用,开发实现的具体步骤为:
[0064]
s2-1:订阅第一消息队列,以保证可以实时地接收到数据同步代理类推送的第一消息。
[0065]
s2-2:根据不同的实体类型设计开发不同数据处理类,获得实体id值之后,可以直接在业务数据库a中查询实体表,也可做联表关联查询。
[0066]
s2-3:根据id值查询到变更数据之后,将变更数据和第一消息组装转换成第二消息,推送到第二消息队列。
[0067]
s3:第二数据同步应用端从第二消息队列获取第二消息后,进行校验,校验通过后,将变更数据同步到第二业务系统的第二数据库中。
[0068]
本实施例中,第二数据同步应用端也是一个独立部署的应用,开发实现的具体步骤为:
[0069]
s3-1:订阅第二消息队列,以保证可以实时地接收到第一数据同步应用端推送过来的第二消息。
[0070]
s3-2:对第二消息进行校验,校验通过后,将变更数据转换为第二业务系统识别的数据格式,完成第二数据库的变更数据入库。
[0071]
本实施例中,第二消息校验成功之后,变更数据是否需要转换,要看第一数据同步应用端的实现情况,若已在第一数据同步应用中完成了适配于第二业务系统的数据转换,则第二数据同步应用不再做数据转换,校验成功之后,直接入库;若第一数据同步应用未做相应的转换,则需要校验通过之后再转换再入库。数据转换是现有技术,即将一种类型或一种格式的数据映射为另一种类型或者另一种格式。
[0072]
经过试验,第二业务系统在2秒以内基本可以获取第一业务系统的数据变更,有效提高了数据同步效率。
[0073]
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。

技术特征:
1.一种基于双队列的数据同步系统,包括第一业务系统和第二业务系统,其特征在于,还包括第一数据同步应用端和第二数据同步应用端;所述第一业务系统将变更数据的第一消息发送到第一消息队列,所述第一消息包括变更数据对应的id值和变更类型;第一数据同步应用端,用于根据第一消息队列发送的第一消息查询第一业务系统中的第一数据库以获取变更数据,再将变更数据和第一消息转换成第二消息发送到第二消息队列;第二数据同步应用端,用于对第二消息队列发送的第二消息进行校验,校验成功后,将变更数据同步到第二业务系统中的第二数据库。2.如权利要求1所述的一种基于双队列的数据同步系统,其特征在于,所述第一业务系统中内置有数据同步代理类,用于实时捕捉第一数据库的数据变更,输出变更数据对应的id值和变更类型到第一消息队列。3.如权利要求2所述的一种基于双队列的数据同步系统,其特征在于,所述数据同步代理类,采用springaop切面代理技术,在第一数据库增删改方法中添加注解,通过解析注解的值,最后从解析结果中通过jdk的反射技术获得变更数据的id值和变更类型。4.如权利要求3所述的一种基于双队列的数据同步系统,其特征在于,所述注解包括队列名称、实体类型、id的字段名称。5.基于权利要求1-4任一所述系统的一种基于双队列的数据同步方法,其特征在于,包括以下步骤:s1:数据同步代理类使用springaop切面代理技术,在第一数据库增删改方法中添加注解;当第一数据库发生变化时,捕捉变更数据,并解析增删改方法上的注解得到第一消息,再输出第一消息到第一消息队列,第一消息包括变更数据对应的id和变更类型;s2:第一数据同步应用端从第一消息队列中获取第一消息,根据第一消息查询第一数据库以获取变更数据,将变更数据转换成第二消息,发送第二消息到第二消息队列;s3:第二数据同步应用端从第二消息队列获取第二消息后,进行校验,校验成功后,将变更数据同步到第二业务系统的第二数据库中。6.如权利要求5所述的一种基于双队列的数据同步方法,其特征在于,所述s1具体包括:s1-1:数据同步代理类使用springaop切面代理技术,在第一数据库的增删改方法中添加注解,所述注解包括定义队列名称、实体类型、id的字段名称;s1-2:当第一数据库增删改方法调用之后,实时捕捉变更数据并解析注解的值,最后从解析结果中通过jdk的反射技术获得变更数据的id,再将id和实体类型打包成第一消息;s1-3:以json的格式将第一消息发送到第一消息队列。7.如权利要求5所述的一种基于双队列的数据同步方法,其特征在于,所述s2具体包括:s2-1:订阅第一消息队列,实时接收数据同步代理类推送的第一消息;s2-2:根据第一消息直接在第一业务系统中的第一数据库查询实体表或联表关联查询以获取变更数据;s2-3:将变更数据打包成第二消息,推送到第二消息队列。
8.如权利要求5所述的一种基于双队列的数据同步方法,其特征在于,所述s3具体包括:s3-1:订阅第二消息队列,实时接收第一数据同步应用端推送的第二消息;s3-2:对第二消息进行校验,校验通过后,将变更数据同步到第二业务系统的第二数据库。

技术总结
本发明公开一种基于双队列的数据同步方法和系统,包括第一业务系统和第二业务系统,还包括第一数据同步应用端和第二数据同步应用端;所述第一业务系统将变更数据的第一消息发送到第一消息队列,所述第一消息包括变更数据对应的ID值和变更类型;第一数据同步应用端,用于根据第一消息队列发送的第一消息查询第一业务系统中的第一数据库以获取变更数据,再将变更数据和第一消息转换成第二消息发送到第二消息队列;第二数据同步应用端,用于对第二消息队列发送的第二消息进行校验,校验成功后,将变更数据同步到第二业务系统中的第二数据库。数据库。数据库。


技术研发人员:魏然 罗成 张冰峰 黄煜楠
受保护的技术使用者:重庆医药数据信息科技有限公司
技术研发日:2022.07.14
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-1332.html

最新回复(0)