一种数据同步方法、装置、数据源端、目标端及存储介质与流程

文档序号:30061801发布日期:2022-05-17 23:48阅读:110来源:国知局
一种数据同步方法、装置、数据源端、目标端及存储介质与流程

1.本技术涉及数据库应用技术领域,特别是涉及一种数据同步方法、装置、数据源端、目标端及存储介质。


背景技术:

2.oracle数据库系统(简称oracle)是一款以分布式数据库为核心的关系数据库管理系统。oracle作为一个关系数据库,在处理数据时经常需要与各数据平台之间进行数据同步,例如,oracle与分布式系统基础架构hadoop进行数据同步。
3.相关技术中,oracle与hadoop平台的数据同步工作是将多个sql(structuredquerylanguage,结构化查询语言)指令进行同步处理,而对sql指令进行同步的工作需要对oracle数据库的代码进行大规模的改造,这使得数据同步的工作量巨大,且无法保证逻辑的完整性。


技术实现要素:

4.本技术实施例的目的在于提供一种数据同步方法、装置、数据源端、目标端及存储及介质,提高了系统的可控制性,保证了逻辑完整性,避免了数据丢失,提高了数据同步速度,降低了运营成本。具体技术方案如下:
5.第一方面,本技术实施例提供了一种数据同步方法,应用于数据源端,所述方法包括:
6.检测所述重做日志文件中是否有新的交易记录;
7.若是,则抓取所述重做日志文件中第一位置和第二位置之间的多个结构化查询语言sql指令,所述第一位置为最后一次抓取的sql指令的位置,所述第二位置为所述重做日志文件中最新sql指令的位置;
8.将本次抓取的多个sql指令存储在缓存文件中;
9.从所述缓存文件中,读取每个交易记录包括的sql指令;
10.以交易记录为单位,分别向目标端同步读取的每个交易记录包括的sql指令。
11.可选的,所述检测所述重做日志文件中是否有新的交易记录的步骤,包括:
12.检测控制文件中记录的数据库变化标识号scn是否有变化;
13.若所述scn有变化,则确定所述重做日志文件中有新的交易记录;
14.若所述scn无变化,则确定所述重做日志文件中没有新的交易记录。
15.可选的,所述以交易记录为单位,分别向目标端同步读取的每个交易记录包括的sql指令的步骤,包括:
16.以交易记录为单位,按照传输控制协议,将读取的每个交易记录包括的sql指令分别封装至数据包中,得到每个交易记录对应的数据包;
17.分别向目标端同步读取每个交易记录对应的数据包。
18.可选的,所述从所述缓存文件中,读取每个交易记录包括的sql指令的步骤,包括:
19.从所述缓存文件中,读取每个已提交commit的交易记录包括的sql指令。
20.第二方面,本技术实施例提供了一种数据同步方法,应用于目标端,所述方法包括:
21.接收数据源端同步的每个交易记录包括的sql指令;
22.将每个交易记录包括的sql指令存入队列;
23.按照交易记录的顺序,从所述队列中读取交易记录包括的sql指令,并装载到所述目标端的存储磁盘中;
24.利用分布式技术,将所述存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库。
25.可选的,所述接收数据源端同步的每个交易记录包括的sql指令的步骤,包括:
26.按照传输控制协议,接收数据源端同步数据包;
27.根据所述数据包的包头描述的包大小,对所述数据包进行合法性检查;
28.若确定所述数据包合法,则从所述数据包中获取每个交易记录包括的sql指令。
29.可选的,所述交易记录中包括增量数据;
30.所述将所述存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库的步骤之后,所述方法还包括:
31.针对每个交易记录,从该交易记录包括的sql指令中获取到增量数据;
32.基于所述增量数据,进行增全量整合,获得当前时间点的全量数据。
33.可选的,所述增量数据对应有多个数据表;
34.所述基于所述增量数据,进行增全量整合,获得当前时间点的全量数据的步骤,包括:
35.依次对所述增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据。
36.可选的,所述依次对所述增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据的步骤,包括:
37.对所述增量数据对应的当前数据表进行增全量整合,获得中间数据;
38.对所述中间数据进行数据校验;
39.若数据校验成功,则将所述增量数据对应的下一个数据表更新为当前数据表,并重新执行所述对所述增量数据对应的当前数据表进行增全量整合,获得中间数据的步骤,直至完成对所述增量数据对应的所有数据表完整增全量整合,得到当前时间点的全量数据。
40.可选的,所述增量数据对应的所有数据表包括存放抽取全量数据表、存放增全量整合结果表、以及存放抽取增量数据表。
41.第三方面,本技术实施例提供了一种数据同步装置,应用于数据源端,所述装置包括:
42.检测单元,用于检测所述重做日志文件中是否有新的交易记录;
43.抓取单元,用于响应于所述检测结果为:所述重做日志文件中有新的交易记录,抓取所述重做日志文件中第一位置和第二位置之间的多个结构化查询语言sql指令,所述第一位置为最后一次抓取的sql指令的位置,所述第二位置为所述重做日志文件中最新sql指
令的位置;
44.缓存单元,用于将本次抓取的多个sql指令存储在缓存文件中;
45.读取单元,用于从所述缓存文件中,读取每个交易记录包括的sql指令;
46.同步单元,用于以交易记录为单位,分别向目标端同步读取的每个交易记录包括的sql指令。
47.可选的,所述检测单元,具体用于:
48.检测控制文件中记录的数据库变化标识号scn是否有变化;
49.若所述scn有变化,则确定所述重做日志文件中有新的交易记录;
50.若所述scn无变化,则确定所述重做日志文件中没有新的交易记录。
51.可选的,所述同步单元,具体用于:
52.以交易记录为单位,按照传输控制协议,将读取的每个交易记录包括的sql指令分别封装至数据包中,得到每个交易记录对应的数据包;
53.分别向目标端同步读取每个交易记录对应的数据包。
54.可选的,所述读取单元,具体用于:
55.从所述缓存文件中,读取每个已提交commit的交易记录包括的sql指令。
56.第四方面,本技术实施例提供了一种数据同步装置,应用于目标端,所述装置包括:
57.接收单元,用于接收数据源端同步的每个交易记录包括的sql指令;
58.第一存储单元,用于将每个交易记录包括的sql指令存入队列;
59.装载单元,用于按照交易记录的顺序,从所述队列中读取交易记录包括的sql指令,并装载到所述目标端的存储磁盘中;
60.第二存储单元,用于利用分布式技术,将所述存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库。
61.可选的,所述接收单元,具体用于:
62.按照传输控制协议,接收数据源端同步数据包;
63.根据所述数据包的包头描述的包大小,对所述数据包进行合法性检查;
64.若确定所述数据包合法,则从所述数据包中获取每个交易记录包括的sql指令。
65.可选的,所述交易记录中包括增量数据;所述装置还包括:
66.获取单元,用于将所述存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库之后,针对每个交易记录,从该交易记录包括的sql指令中获取到增量数据;
67.整合单元,用于基于所述增量数据,进行增全量整合,获得当前时间点的全量数据。
68.可选的,所述增量数据对应有多个数据表;
69.所述整合单元,包括:
70.整合子单元,用于依次对所述增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据。
71.可选的,所述整合子单元,具体用于:
72.对所述增量数据对应的当前数据表进行增全量整合,获得中间数据;
73.对所述中间数据进行数据校验;
74.若数据校验成功,则将所述增量数据对应的下一个数据表更新为当前数据表,并重新执行所述对所述增量数据对应的当前数据表进行增全量整合,获得中间数据的步骤,直至完成对所述增量数据对应的所有数据表完整增全量整合,得到当前时间点的全量数据。
75.可选的,所述增量数据对应的所有数据表包括存放抽取全量数据表、存放增全量整合结果表、以及存放抽取增量数据表。
76.第五方面,本技术实施例提供了一种数据源端,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
77.存储器,用于存放计算机程序;
78.处理器,用于执行存储器上所存放的程序时,实现应用于数据源端的任一所述的数据同步方法步骤。
79.第六方面,本技术实施例提供了一种目标端,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
80.存储器,用于存放计算机程序;
81.处理器,用于执行存储器上所存放的程序时,实现应用于目标端的任一所述的数据同步方法步骤。
82.第七方面,本技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述应用于数据源端的任一所述的数据同步方法的步骤,或实现上述应用于目标端的任一所述的数据同步方法的步骤。
83.第八方面,本技术实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述应用于数据源端的任一所述的数据同步方法,或执行上述应用于目标端的任一所述的数据同步方法。
84.本技术实施例有益效果:
85.本技术实施例提供的技术方案中,数据源端和目标端均是以交易记录为同步数据的最小单位来同步数据,而不是以单个sql指令为同步数据的最小单位。这样数据同步过程更加容易控制,且不需要对代码进行大规模改造,提高了系统的可控制性,保证了逻辑完整性,避免了数据丢失,提高了数据同步速度,降低了运营成本。
86.当然,实施本技术的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
87.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
88.图1为本技术实施例提供的数据同步方法的第一种流程示意图;
89.图2为本技术实施例提供的数据同步方法的第二种流程示意图;
90.图3为本技术实施例提供的数据同步方法的第三种流程示意图;
91.图4为本技术实施例提供的数据同步方法的第四种流程示意图;
92.图5为本技术实施例提供的数据同步方法的第五种流程示意图;
93.图6为本技术实施例提供的数据同步方法的第六种流程示意图;
94.图7为本技术实施例提供的数据同步方法的第七种流程示意图;
95.图8为本技术实施例提供的数据同步方法的第八种流程示意图;
96.图9为本技术实施例提供的数据同步方法的第九种流程示意图;
97.图10为本技术实施例提供的数据同步方法的第十种流程示意图;
98.图11为本技术实施例提供的数据同步方法的第十一种流程示意图;
99.图12为本技术实施例提供的数据同步方法的第十二种流程示意图;
100.图13为本技术实施例提供的应用于数据源端的数据同步装置的一种结构示意图;
101.图14为本技术实施例提供的应用于目标端的数据同步装置的一种结构示意图;
102.图15为本技术实施例提供的数据源端的一种结构示意图;
103.图16为本技术实施例提供的目标端的一种结构示意图。
具体实施方式
104.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本技术保护的范围。
105.在日常的数据同步工作中,有两个方面一直是数据同步效率的瓶颈。一方面是数据平台需要处理的数据量巨大,而且需要处理的数据在不断地更新,这导致了数据传输缓慢,为保证工作效率和精确度,要求在离线的场景下进行数据同步处理工作;另一方面,基于sql指令的数据同步需要对代码进行大规模改造,大大增加了数据同步的工作量。
106.另外,相关技术中,可以使用oracle公司的数据同步产品ogg(oracle golden gate)进行数据同步处理,但ogg进行数据同步处理的费用较高,会对使用者造成很大的负担。
107.基于上述问题,本技术实施例提供了一种数据同步方法。下面通过具体实施例,对本技术实施例提供的数据同步方法进行详细说明。
108.参见图1,图1为本技术实施例提供的数据同步方法的第一种流程示意图。应用于数据源端,例如oracle数据库系统,该数据同步方法包括如下步骤。
109.步骤s11,检测重做日志文件中是否有新的交易记录。
110.在数据源端存有重做日志文件(oracle redo log),重做日志文件中存储了多个交易记录。本技术实施例中,在进行数据同步时,数据源端检测重做日志文件中是否有新的交易记录产生。
111.步骤s12,若有新的交易记录,则抓取重做日志文件中第一位置和第二位置之间的多个sql指令,第一位置为最后一次抓取的sql指令的位置,第二位置为重做日志文件中最新sql指令的位置。
112.本技术实施例中,重做日志文件中包含有多个交易记录,每个交易记录包含有多条非连续存储的sql指令,多个交易记录的sql指令之间是相互穿插的。
113.若重做日志文件中有新的交易记录,也就是,重做日志文件中有新的sql指令。数据源端可以对重做日志文件中最后一次抓取的sql指令的位置(即第一位置)与最新sql指令的位置(即第二位置)之间的多个sql指令进行抓取。
114.步骤s13,将本次抓取的多个sql指令存储在缓存文件中。
115.本技术实施例中,数据源端得到本次抓取的多个sql指令,并将这些sql指令生成自定义的格式数据,然后将这些数据存储在缓存文件中。这里对sql指令生成的格式不做限定。
116.步骤s14,从缓存文件中,读取每个交易记录包括的sql指令。
117.数据源端对缓存文件中抓取的多个sql指令进行交易整合,可以从缓存文件中读取到新的每个交易记录包括的sql指令。
118.本技术实施例中,数据源端可以从缓存文件中,按照交易记录的顺序,对每个交易记录包括的sql指令进行读取,并存入队列中。
119.可选的,从缓存文件中,数据源端读取每个已提交commit的交易记录包括的sql指令。
120.在缓存文件中,有已提交commit的交易记录以及没有提交的交易记录,然而,只有已提交commit的交易记录对目标端是有意义的,没有commit的交易记录(即rollbackt的交易记录)无需复制到目标端。这种情况下,数据源端不需要复制缓存文件中的每条sql指令,可以从缓存文件中只读取每个已提交commit的交易记录包括的sql指令,并进行交易整合。
121.本技术实施例提供的技术方案中,数据源端只读取每个已提交commit的交易记录包括的sql指令,这样,可以在不影响数据同步工作结果的情况下,提升数据同步速度,进而提高数据同步的工作效率,降低运营成本。
122.步骤s15,以交易记录为单位,分别向目标端同步读取的每个交易记录包括的sql指令。
123.数据源端在对多个sql指令进行交易整合后,以交易记录为单位,可以按照交易记录的顺序,分别向目标端同步读取每个交易记录包括的sql指令。
124.本技术实施例提供的技术方案中,数据源端以交易记录为同步数据的最小单位来同步数据,而不是以单个sql指令为同步数据的最小单位。这样数据同步过程更加容易控制,且不需要对代码进行大规模改造,提高了系统的可控制性,保证了逻辑完整性,避免了数据丢失,提高了数据同步速度,降低了运营成本。
125.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图2所示,该方法可以包括如下步骤:步骤s21-s27。其中,步骤s24-s27与上述步骤s12-s15相同,步骤s21-s23是步骤s11的一种可选的实施方式。
126.步骤s21,检测控制文件中记录的scn是否有变化。步骤s22,若scn无变化,则确定重做日志文件中没有新的交易记录。步骤s23,若scn有变化,则确定重做日志文件中有新的交易记录。
127.数据源端配置有控制文件(oracle controle file)。数据源端可以通过定期检测控制文件中记录的当前scn(system change number,数据库变化标识号)来判断数据源端的重做日志文件中否有新的交易产生。
128.本技术实施例中,数据源端检测控制文件中记录的scn是否有变化。若scn无变化,
则执行步骤s22;若scn有变化,则执行步骤s23。
129.本技术实施例提供的技术方案中,通过控制文件中记录的scn确定重做日志文件中是否有新的交易记录,这样可以避免每次检查都通过读取重做日志文件来判断否有新的交易产生而对数据源端造成影响。
130.下面结合图3所示的数据同步方法的流程示意图,对本技术实施例提供的数据同步方法进行详细说明。
131.数据源端在重做日志文件中最后一次抓取sql指令时,重做日志文件对应的控制文件中的scn为状态1,此时sql指令所处的位置为第一位置。在经过时间间隔t之后,重做日志文件中有新的交易记录,此时重做日志文件对应的控制文件中的scn为状态2,最新sql指令所处的位置为第二位置。其中,时间间隔t可以是1秒、5秒、或2分钟,对此不进行限定。
132.数据源端获取第一位置和第二位置之间的多个sql指令,利用数据源端的分析模块,对获得的多个sql指令进行读取并加以分析,将分析后的数据同步给目标端,例如,可以将分析后的数据同步给hadoop的数据处理机制。
133.本技术实施例中,按照预估的日志分析设计目标,数据源端的分析模块每秒能够分析的sql指令量达到10m/s。
134.下面结合图4所示的数据源端的数据同步的流程示意图,对本技术实施例提供的数据同步方法进行详细说明。图4中的数据源端为oracle数据库,目标端为hadoop平台。
135.oracle数据库开始记录重做日志文件(以下简称为日志),随后,oracle数据库删除日志目录,以保证插入数据时间点的日志目录不存在。oracle数据库将交易记录数据进行导出,若导出失败,则结束日志记录为失败,并oracle数据库结束数据同步流程;若导出成功,则将交易记录导入hadoop平台,随后结束日志记录为成功,并oracle数据库结束数据同步流程。
136.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图5所示,该方法可以包括如下步骤:步骤s51-s56。其中,步骤s51-s54与上述步骤s11-s14相同,步骤s55-s56是步骤s15的一种可选的实施方式。
137.步骤s55,以交易记录为单位,按照传输控制协议,将读取的每个交易记录包括的sql指令分别封装至数据包中,得到每个交易记录对应的数据包。
138.本技术实施例中,数据源端以交易记录为单位,按照传输控制协议,将读取的每个交易记录包括的sql指令以传输控制协议(如tcp/ip)的格式分别封装至数据包中,得到每个交易记录对应的数据包。
139.本技术实施例中,一个数据包可以包括一个交易记录的sql指令,也可以包括多个交易记录的sql指令,对此不进行限定。
140.步骤s56,分别向目标端同步读取每个交易记录对应的数据包。
141.数据源端分别向目标端同步读取每个交易记录对应的数据包。
142.本技术实施例提供的技术方案中,数据源端将每个交易记录包括的sql指令以tcp/ip的格式分别封装至数据包中,并向目标端进行同步处理。这样,可以使每个交易记录包括的sql指令在同步到目标端之后,根据tcp/ip格式封装成的数据包的包头,检测该数据包的合法性,增加了数据传输的可靠性。
143.与上述数据同步方法对应,本技术实施例还提供了一种数据同步方法,应用于目
标端,例如hadoop平台,如图6所示,该方法可以包括如下步骤:
144.步骤s61,接收数据源端同步的每个交易记录包括的sql指令。
145.步骤s62,将每个交易记录包括的sql指令存入队列。
146.目标端中设置了缓存队列。在接收到交易记录包括的sql指令,目标端将每个交易记录包括的sql指令,按照交易记录的顺序,以先入先出的原则存入队列。
147.步骤s63,按照交易记录的顺序,从队列中读取交易记录包括的sql指令,并装载到目标端的存储磁盘中。
148.目标端按照交易记录的顺序,以先入先出的原则,从队列中读取交易记录包括的sql指令,并装载到目标端的存储磁盘中。
149.步骤s64,利用分布式技术,将存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库。
150.本技术实施例提供的技术方案中,目标端以队列的方式对每个交易记录包括的sql进行存储,可以保证该数据同步方法的逻辑完整性,提高对交易记录的控制,避免数据丢失。
151.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图7所示,该方法可以包括如下步骤:步骤s71-s76。其中,步骤s74-s76与上述步骤s62-s64相同,步骤s71-s73是步骤s61的一种可选的实施方式。
152.步骤s71,按照传输控制协议,接收数据源端同步数据包。
153.数据源端按照传输控制协议(如tcp/ip),每个交易记录包括的sql指令进行封装,并向目标端同步封装得到的数据包。目标端按照传输控制协议(如tcp/ip),接收数据源端同步的数据包。
154.步骤s72,根据数据包的包头描述的包大小,对数据包进行合法性检查。
155.目标端根据数据包的包头描述的包大小,通过预定义的字段信息,对数据包进行合法性检查,以判断数据包的完整性。若确定数据包合法,则说明数据包完整,执行步骤s73;若确定数据包不合法,则说明数据包不完整,结束数据同步流程,或继续等待,直至接收到完整的数据包。
156.步骤s73,从数据包中获取每个交易记录包括的sql指令。
157.若确定数据包合法,表示同步的数据包是完整的,则目标端从数据包中获取每个交易记录包括的sql指令。
158.本技术实施例提供的技术方案中,目标端对以传输控制协议的格式进行封装的数据包进行合法性检查,用以判断数据包的完整性。这样,可以避免目标端在不知情的情况下丢失数据而对后续数据的加工处理造成影响,减少了资源的消耗,降低了运营成本。
159.下面结合图8所示的数据同步方法的流程示意图,对本技术实施例提供的数据同步方法进行详细说明。
160.数据源端通过抓取进程按照交易记录的顺序,向队列中写入抓取每个交易记录包括的sql指令。数据源端通过导出进程以先入先出的原则,从队列中导出每个交易记录包括的sql指令,并按照tcp/ip的格式,封装交易记录,得到数据包,并将数据包同步至目标端,该数据包的主体为交易记录包括的sql指令,该数据包的包头的包大小。
161.目标端通过导入进程接收包括交易记录包括的sql指令的数据包,根据数据包的
包头描述的包大小,对数据包进行合法性检查,在验证了数据包合法的情况下,按照交易记录的顺序,将交易记录包括的sql指令存入队列。目标端通过后级进程,按照先入先出的原则,从队列中读取交易记录包括的sql指令,以进行后处理。
162.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图9所示,该方法中交易记录中包括增量数据,该数据同步方法可以包括如下步骤:步骤s91-s96。其中,步骤s91-s94与上述步骤s61-s64相同。
163.步骤s95,针对每个交易记录,从该交易记录包括的sql指令中获取到增量数据。
164.针对每个交易记录,目标端从该交易记录包括的sql指令中获取到增量数据。这里的增量数据是指,与上次目标端接收到的数据包相比本次目标端接收到的数据包中增加的数据。
165.步骤s96,基于增量数据,进行增全量整合,获得当前时间点的全量数据。
166.当前时间点可以基于账期确定。账期可以为1天或1个月等。针对每个交易记录,目标端基于该交易记录的增量数据,进行增全量整合,获得当前时间点该交易记录的全量数据。
167.本技术实施例提供的技术方案中,通过对增量数据进行增全量整合的方式得到全量数据,可以避免数据源端对目标端直接同步全量数据,减少资源的消耗,提高了数据同步速度,降低了运营成本。
168.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图10所示,该方法中增量数据对应有多个数据表。该数据同步方法可以包括如下步骤:步骤s101-s106。其中,步骤s101-s105与上述步骤s91-s95相同。步骤s106是步骤s96的一种可选的实施方式。
169.步骤s106,依次对增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据。
170.本技术实施例中,增量数据存放至指定位置,目标端将该增量数据座位接口层。根据数据的性质,接口层设立有多个表,即增量数据对应的多个数据表,这多个数据表可以包括存放抽取全量数据表以及存放增全量整合结果表、存放抽取增量数据表等,用以存放从数据源端抽取的库表、文件和消息。根据增量数据日志,在有增量数据的情况下,目标端可以执行增全量整合脚本(如shell脚本),依次对增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据,以加工当前时间点的全量数据至接口层指定用户下。
171.本技术实施例提供的技术方案中,目标端依次对增量数据对应的每个数据表分别进行增全量整合以得到全量数据,可以实现对增量数据的并发分析,以及一次分析多次使用,提高增量数据的使用效率,降低目标端的资源损耗。
172.在本技术的一个实施例中,本技术实施例还提供了一种数据同步方法,如图11所示,该方法可以包括如下步骤:步骤s111-s118。其中,步骤s111-s115与上述步骤s101-s105相同。步骤s116-s118是步骤s106的一种可选的实施方式。
173.步骤s116,对增量数据对应的当前数据表进行增全量整合,获得中间数据。
174.步骤s117,对中间数据进行数据校验。若数据校验成功,则执行步骤s118。若数据校失败,则可以结束数据同步处理,后面的节点不再执行。这可以保证数据的一致性。
175.步骤s118,将增量数据对应的下一个数据表更新为当前数据表,并重新执行步骤
s116,直至完成对增量数据对应的所有数据表完整增全量整合,得到当前时间点的全量数据。
176.下面结合图12所示的数据同步方法的流程示意图,对本技术实施例提供的数据同步方法进行详细说明。
177.图12中的数据源端为oracle数据库,目标端为hadoop平台。hadoop平台对文件进行检测,若文件中含有增量数据,则对文件检测成功,将hadoop平台的增量历史数据目录进行删除。随后,hadoop平台记录增量开始日志,并删除增量当天数据目录。hadoop平台获取oracle数据库上的文件,并基于数据仓库工具hive将增量数据存入目标数据库中。若增量数据入库失败,则记录增量数据失败日志,并结束数据同步的流程;若增量数据入库成功,则记录增量数据结束日志,并对增量数据进行数据校验。
178.若hadoop平台对文件检测失败,则数据同步进入等待进程。若等待成功,也就是oracle数据库上的文件中有增量数据,则hadoop平台继续进行文件检测;若等待失败,也就是oracle数据库上的文件中没有增量数据,将oracle数据库上没有增量数据的文件作为全量当天数据目录。经过数据校验后的增量数据删除全量当天数据目录,随后hadoop平台对增全量数据进行整合,整合成功后,结束数据同步流程。
179.应用本技术实施例提供的技术方案,在成本、效率、容错性和流程编排等方面存在着较大的优势,能够提高数据同步速度,实现oracle数据库可控的高速同步,能够增加对数据的掌控,降低运营成本,减小磁盘速率对性能的影响。通过对数据库日志的分析,可以实现日志并发分析、一次分析多次使用,提高了日志分析性能及使用效率,并降低了生产端系统压力,为数据并发复制和装载提供技术基础。这在大数据的抽取、备份、高速同步等方面有着广泛的应用前景。
180.与上述数据同步方法对应,本技术实施例还提供了一种数据同步装置,应用于数据源端,如图13所示,该装置包括:
181.检测单元131,用于检测重做日志文件中是否有新的交易记录;
182.抓取单元132,用于响应于检测结果为:重做日志文件中有新的交易记录,抓取重做日志文件中第一位置和第二位置之间的多个结构化查询语言sql指令,第一位置为最后一次抓取的sql指令的位置,第二位置为重做日志文件中最新sql指令的位置;
183.缓存单元133,用于将本次抓取的多个sql指令存储在缓存文件中;
184.读取单元134,用于从缓存文件中,读取每个交易记录包括的sql指令;
185.同步单元135,用于以交易记录为单位,分别向目标端同步读取的每个交易记录包括的sql指令。
186.一个可选的实施例中,检测单元131,具体可以用于:
187.检测控制文件中记录的数据库变化标识号scn是否有变化;
188.若scn有变化,则确定重做日志文件中有新的交易记录;
189.若scn无变化,则确定重做日志文件中没有新的交易记录。
190.一个可选的实施例中,同步单元135,具体可以用于:
191.以交易记录为单位,按照传输控制协议,将读取的每个交易记录包括的sql指令分别封装至数据包中,得到每个交易记录对应的数据包;
192.分别向目标端同步读取每个交易记录对应的数据包。
193.一个可选的实施例中,读取单元134,具体可以用于:
194.从缓存文件中,读取每个已提交commit的交易记录包括的sql指令。
195.本技术实施例提供的技术方案中,数据源端以交易记录为同步数据的最小单位来同步数据,而不是以单个sql指令为同步数据的最小单位。这样数据同步过程更加容易控制,且不需要对代码进行大规模改造,提高了系统的可控制性,保证了逻辑完整性,避免了数据丢失,提高了数据同步速度,降低了运营成本。
196.与上述数据同步方法对应,本技术实施例还提供了一种数据同步装置,应用于目标端,如图14所示,该装置包括:
197.接收单元141,用于接收数据源端同步的每个交易记录包括的sql指令;
198.第一存储单元142,用于将每个交易记录包括的sql指令存入队列;
199.装载单元143,用于按照交易记录的顺序,从队列中读取交易记录包括的sql指令,并装载到目标端的存储磁盘中;
200.第二存储单元144,用于利用分布式技术,将存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库。
201.一个可选的实施例中,接收单元141,具体可以用于:
202.按照传输控制协议,接收数据源端同步数据包;
203.根据数据包的包头描述的包大小,对数据包进行合法性检查;
204.若确定数据包合法,则从数据包中获取每个交易记录包括的sql指令。
205.一个可选的实施例中,交易记录中包括增量数据;上述数据同步装置还可以包括:
206.获取单元,用于将存储磁盘存储的每个交易记录包括的sql指令分别存入目标数据库之后,针对每个交易记录,从该交易记录包括的sql指令中获取到增量数据;
207.整合单元,用于基于增量数据,进行增全量整合,获得当前时间点的全量数据。
208.一个可选的实施例中,增量数据对应有多个数据表;
209.整合单元,可以包括:
210.整合子单元,用于依次对增量数据对应的每个数据表分别进行增全量整合,获得当前时间点的全量数据。
211.一个可选的实施例中,整合子单元,具体可以用于:
212.对增量数据对应的当前数据表进行增全量整合,获得中间数据;
213.对中间数据进行数据校验;
214.若数据校验成功,则将增量数据对应的下一个数据表更新为当前数据表,并重新执行对增量数据对应的当前数据表进行增全量整合,获得中间数据的步骤,直至完成对增量数据对应的所有数据表完整增全量整合,得到当前时间点的全量数据。
215.一个可选的实施例中,增量数据对应的所有数据表包括存放抽取全量数据表、存放增全量整合结果表、以及存放抽取增量数据表。
216.本技术实施例提供的技术方案中,目标端以队列的方式对每个交易记录包括的sql进行存储,可以保证该数据同步方法的逻辑完整性,提高对交易记录的控制,避免数据丢失。
217.与上述数据同步方法对应,本技术实施例还提供了一种数据源端,如图15所示,包括处理器151、通信接口152、存储器153和通信总线154,其中,处理器151,通信接口152,存
储器153通过通信总线154完成相互间的通信;
218.存储器153,用于存放计算机程序;
219.处理器151,用于执行存储器153上所存放的程序时,实现上述应用于数据源端的任一的数据同步方法步骤。
220.与上述数据同步方法对应,本技术实施例还提供了一种目标端,如图16所示,包括处理器161、通信接口162、存储器163和通信总线164,其中,处理器161,通信接口162,存储器163通过通信总线164完成相互间的通信;
221.存储器163,用于存放计算机程序;
222.处理器161,用于执行存储器163上所存放的程序时,实现上述应用于目标端的任一的数据同步方法步骤。
223.电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
224.通信接口用于上述电子设备与其他设备之间的通信。
225.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
226.处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
227.在本技术提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述应用于数据源端的任一数据同步方法的步骤,或实现上述应用于目标端的任一数据同步方法的步骤。
228.在本技术提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中应用于数据源端的任一数据同步方法,或应用于目标端的任一数据同步方法。
229.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以
是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
230.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
231.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、数据源端、目标端、存储介质和计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
232.以上所述仅为本技术的较佳实施例,并非用于限定本技术的保护范围。凡在本技术的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本技术的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1