一种多源异构关系型数据库数据的增量采集方法
技术领域
本发明属于数据仓库或者数据中台领域,具体涉及一种多源异构关系型数据库数据的增量采集方法。
背景技术
近年来,随着企事业单位数字化转型的加速,数据中台成为数字化转型的利器,很多企业提出了“中台战略”,其目的之一就是实现经营数据的集中存储和管控,由于企业正在使用的业务系统存在多种异构数据库的可能性,因此采集各原业务系统的数据成为亟待解决的问题,而增量采集是实施过程中需要重点考虑的问题。
实现增量采集的关键是准确快速的捕获变化数据,优秀的增量采集机制要求能够将业务系统中的变化数据按一定的频率准确地捕获,同时不能对原业务系统造成太大的压力,影响现有业务。相对全量抽取而言,增量抽取的设计更复杂,实现一种将全量抽取过程自动转换为增量抽取过程的方法,前提是必须捕获变化的数据,增量数据采集中常用的捕获变化数据的方法如表1所示:
表1增量数据抽取常用方法
通过上表可知,每种方法都有一定的局限性,适用的场景也各不相同,如果有一种通用的数据增量采集方法,在保证数据完备性、低侵入性、高抽取性能等指标上达到基本平衡,在工程应用中将是一个不错的选择。本发明正是在此背景下产生的,通过对全表比对方式的采集模式创新及性能改进,加上其自身具备的低侵入性和数据高完备性,增强了工程实践时的可用性。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种多源异构关系型数据库数据的增量采集方法,满足多源异构的数据库之间的数据采集需求。
(二)技术方案
为了解决上述技术问题,本发明提出一种多源异构关系型数据库数据的增量采集方法,该方法包括如下步骤:
S1、目标表检查步骤:读取源数据库表的元数据,并检查目标库表是否符合采集要求,符合采集要求则进入后续读取数据步骤,否则进入目标表调整步骤;
S2、目标表调整步骤:对于目标库表不符合采集要求的情况,删除目标库表中的目标表,然后根据源数据库表的元数据结构及目标数据库类型,自动生成目标库表DDL语句,并创建目标表,其中,DDL语句还在目标表中建立扩展的哈希字段;
S3、读取数据步骤:读取源表和目标表数据,对于源表中的每条记录,按照元数据中的字段顺序对记录值进行字符串拼接计算,并对拼接后的字符串进行哈希运算得到哈希值,内存中存储所有的记录值及运算得到的哈希值,同时所有的哈希值按照字符串序列进行升序排列,由此构成源数据表记录集;对于目标表中的数据,直接按照扩展的哈希字段进行升序排序并读入内存,由此构成目标数据表记录集;
S4、数据对比步骤:把内存中存储的源数据表记录集与目标数据表记录集进行比对,对于仅出现在源数据表记录集中的记录,标记为新增;对于仅出现在目标数据表记录集中的记录,标记为删除;
S5、历史数据记录步骤:在对目标表执行数据新增和删除操作时,将目标表新增和删除的数据存入历史数据表中;
S6、数据更新步骤:对于源数据表记录集中被标记为新增的记录,在目标库表中执行新增记录的操作;对于目标数据表记录集中被标记为删除的记录,在目标表中执行删除记录的操作。
进一步地,该方法循环执行。
进一步地,所述步骤S1具体包括:通过JDBC方式读取源数据表的结构元数据,再根据源数据库和目标数据库的字段类型映射关系,更新源库表元数据信息与目标表类型一致,然后检查目标库中是否存在符合采集要求的数据表,如果存在则继续检查数据表结构,如果不存在则直接创建目标表。
进一步地,所述检查目标库中是否存在符合采集要求的数据表具体包括:
先从源表的元数据中获得数据表的元数据信息f1(l1,t1),f2(l2,t2),…,fn(ln,tn),其中t代表字段类型,l代表字段长度,f代表字段名称;再检查目标库中是否存在相同的表f’1(l’1,t’1),f’2(l’2,t’2),…,f’n(l’n,t’n),f’n+1(l’n+1,t’n+1),其中t’代表字段类型,l’代表字段长度,f’代表字段名称;源表与目标表元数据比对规则为:
fn(ln,tn)=f’n(l’n,t’n),n=1,2,3…;
如果上述条件成立,且目标表中除了扩展的哈希字段f’n+1(l’n+1,t’n+1)外,不存在多余的字段,则检查通过,反之不通过。
进一步地,所述步骤S1中符合采集要求则进入后续步骤,否则进入目标表调整步骤具体包括:如果符合采集要求则进行步骤三,如果步骤一不符合采集要求,且目标表不存在则重建目标表,如果部分字段不符合采集要求则删除目标表后重建。
进一步地,所述S2中自动生成目标库表DDL语句具体包括:根据源数据库和目标数据库的字段类型映射关系,生成目标库类型的DDL语句。
进一步地,所述S3中哈希运算为Md5哈希计算。
进一步地,所述步骤S5中历史数据表使用NoSQL数据库来存储。
进一步地,所述步骤S5中历史数据表使用HBase数据库来存储。
进一步地,所述步骤S6具体包括:根据数据标记,对目标表执行相应的操作;在对目标操作时,根据不同的标记方式生成不同的SQL操作语句,在执行时采用批量提交方式。
(三)有益效果
本发明提出一种多源异构关系型数据库数据的增量采集方法,本方法在数据采集过程中,利用源数据库表的记录进行哈希运算,得到记录的哈希值,与目的表中存储的哈希值进行对比,通过对记录集的排序,能够加快源数据表记录集与目的数据表记录集的对比时间复杂度。能够实现快速的增量数据采集。本方法对不依赖多源异构数据库的存储技术,利用通用的读取数据方式,并在内存中计算,适用多种数据库。因此,本发明在多源异构的关系数据库中适合快速大批量进行增量采集。
附图说明
图1为本发明的多源异构关系型数据库数据的增量采集方法流程图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明涉及一种多源异构关系型数据库数据的增量采集方法,该发明所涉及领域是企事业单位数字化转型时的一种数据处理技术,在建立数据仓库或者数据中台时,引接外部数据源采用的一种增量数据采集方法。
本发明的目的是:提供一种关系数据库的增量采集的方法,满足多源异构的数据库之间的数据采集需求。
为实现上述目的,本发明提出了一种关系数据库的增量采集的方法,该方法循环执行,该方法包括:
S1、目标表检查步骤。读取源数据库表的元数据,并检查目标库表是否符合采集要求,符合采集要求则进入后续读取数据步骤,否则进入目标表调整步骤;
S2、目标表调整步骤。对于目标库表不符合采集要求的情况,删除目标库表中的目标表,然后根据源数据库表的元数据结构及目标数据库类型,自动生成目标库表DDL语句,并创建目标表,其中,DDL语句还在目标表中建立扩展的哈希字段。
S3、读取数据步骤。读取源表和目标表数据,对于源表中的每条记录,按照元数据中的字段顺序对记录值进行字符串拼接计算,并对拼接后的字符串进行哈希运算得到哈希值,内存中存储所有的记录值及运算得到的哈希值,同时所有的哈希值按照字符串序列进行升序排列,由此构成源数据表记录集。对于目标表中的数据,直接按照扩展的哈希字段进行升序排序并读入内存,由此构成目标数据表记录集。
S4、数据对比步骤。把内存中存储的源数据表记录集与目标数据表记录集进行比对,对于仅出现在源数据表记录集中的记录,标记为新增;对于仅出现在目标数据表记录集中的记录,标记为删除;
S5、历史数据记录步骤。在对目标表执行数据新增和删除操作时,将目标表新增和删除的数据存入历史数据表中;
S6、数据更新步骤。对于源数据表记录集中被标记为新增的记录,在目标库表中执行新增记录的操作;对于目标数据表记录集中被标记为删除的记录,在目标表中执行删除记录的操作。
本方法在数据采集过程中,利用源数据库表的记录进行哈希运算,得到记录的哈希值,与目的表中存储的哈希值进行对比,通过对记录集的排序,能够加快源数据表记录集与目的数据表记录集的对比时间复杂度。能够实现快速的增量数据采集。本方法对不依赖多源异构数据库的存储技术,利用通用的读取数据方式,并在内存中计算,适用多种数据库。因此,本发明在多源异构的关系数据库中适合快速大批量进行增量采集。
图1是一种多源异构关系型数据库数据的增量采集方法流程图。该方法是一个循环执行的过程,如图1所示,该方法包括:
(1)目标表检查步骤。读取源数据库表的元数据,并检查目标库表是否符合数据采集要求,符合采集要求则进入后续读取数据步骤,否则进入目标表调整步骤。
具体实施时,首先通过JDBC方式读取源数据表的结构元数据,再根据源数据库和目标数据库的字段类型映射关系,更新源库表元数据信息与目标表类型一致,然后检查目标库中是否存在符合采集要求的数据表,如果存在则继续检查数据表结构,如果不存在则直接创建目标表。检查方法如下,先从源表的元数据中获得数据表的元数据信息f1(l1,t1),f2(l2,t2),…,fn(ln,tn),其中t代表字段类型,l代表字段长度,f代表字段名称。再检查目标库中是否存在相同的表f’1(l’1,t’1),f’2(l’2,t’2),…,f’n(l’n,t’n),f’n+1(l’n+1,t’n+1),其中t’代表字段类型,l’代表字段长度,f’代表字段名称。源表与目标表元数据比对规则为:
fn(ln,tn)=f’n(l’n,t’n),(n=1,2,3…)
如果上述条件成立,且目标表中除了扩展的哈希字段f’n+1(l’n+1,t’n+1)外,不存在多余的字段,则检查通过,反之不通过。
(2)目标表调整步骤。对于目标库表不符合采集要求的情况,删除目标库表中的目标表,然后根据源数据库表的元数据结构及目标数据库类型,自动生成目标库表DDL语句,并创建目标表。其中,DDL语句还在目标表中建立扩展的哈希字段。
具体实施时,根据源数据库和目标数据库的字段类型映射关系,生成目标库类型的DDL语句,如果步骤一符合采集要求则进行步骤三,如果步骤一不符合采集要求,且目标表不存在则重建目标表,如果部分字段不符合采集要求则删除目标表后重建。
(3)读取数据步骤。读取源表和目标表数据,对于源表中的每条记录,按照元数据中的字段顺序对记录值进行字符串拼接计算,并对拼接后的字符串进行哈希运算得到哈希值,内存中存储所有的记录值及运算得到的哈希值,同时所有的哈希值按照字符串序列进行升序排列,由此构成源数据表记录集。对于目标表中的数据,直接按照扩展的哈希字段进行升序排序并读入内存,由此构成目标数据表记录集。
具体实施时,对于源表中的每条记录,按照元数据中的字段顺序对记录值进行字符串拼接计算。假设fn(n=1,2,3…)对应每条记录的值为Dn(n=1,2,3…),则拼接后的字符串S,S=D1 D2…Dn,如果Dn为null或者为空时,则使用占位符“Nothing”,然后,对S进行Md5哈希计算,得到S’,将哈希值S’和字段及字段值的键值关系,存入内存数据库中并升序排列,得到源数据表记录集;再将目标表中的数据,直接按照扩展的哈希字段进行升序排序并读入内存数据库中,由此构成目标数据表记录集。
对于新创建的目标表,内容为空,目标数据表记录集为空,在后续数据比对和更新时,会将源数据表记录集中的数据更新到目标表。在第二次循环时,目标表中已经有了数据,可以按照哈希字段进行升序排序得到目标数据表记录集。
(4)数据对比步骤。把内存中存储的源数据表记录集与目标数据表记录集进行比对,对于仅出现在源数据表记录集中的记录,标记为新增;对于仅出现在目标数据表记录集中的记录,标记为删除;
具体实施时,根据步骤三中排序完成后的源数据表记录集和目标表记录集,将两个集合进行比对,对于仅出现在源数据表记录集中的记录,标记为新增;对于仅出现在目标数据表记录集中的记录,标记为删除。先排序后比对可将时间复杂度从O(n2)降低为O(N);
(5)历史数据记录步骤。在对目标表执行数据新增和删除操作时,将目标表新增和删除的数据存入历史数据表中;
具体实施时,对目标表中数据进行新增和删除操作前,将步骤四中标记过数据集合先存入历史数据表中,由于历史数据表数据可能越来越大,再实际使用时,可选用NoSQL数据库来存储,如HBase;在查询展现时,可根据业务主键来查询整个数据的变化情况。
(6)数据更新步骤。对于源数据表记录集中被标记为新增的记录,在目标库表中执行新增记录的操作;对于目标数据表记录集中被标记为删除的记录,在目标表中执行删除记录的操作。
具体实施时,根据数据标记,对目标表执行相应的操作。在对目标操作时,根据不同的标记方式生成不同的SQL操作语句,在执行时采用批量提交方式,并可动态设置批量提交的条数,优化了对目标数据表的操作,节省了数据处理时间。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。