发明内容
本发明的主要目的在于提供一种稳定高效的支持大数据量的全量数据同步的方法,满足全量数据同步完成后,目标元数据保持与源元数据一致,解决元数据采集支撑元数据的业务应用和数据分析的问题。
为达到上述目的,本发明提供了一种大数据环境下实现全量数据同步的方法,该方法包括如下步骤:
(1)执行插入源数据模块,负责将源元数据分批插入元数据仓库新创建的元数据表中;
(2)执行生成交集数据模块,联合源元数据和元数据仓库中的目标元数据,做可重复的并集操作,并将结果按业务主键分组统计条目;
(3)基于交集数据获取并插入需添加的记录模块,按业务主键连接交集数据和源元数据,查询获取需新添加的所有数据,并插入至目标元数据表;
(4)基于交集数据生成需更新的记录模块,按业务主键连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,得出需更新的记录;
(5)基于更新的记录更新数据模块,按业务主键连接需更新的记录与源元数据,执行更新;
(6)基于交集数据删除需删除的记录模块,按业务主键连接交集数据和目标元数据,查询获取需删除的所有数据,得出所有需删除的数据执行删除。
所述的插入源数据模块,负责将源元数据分批插入元数据仓库新创建的元数据表中,包括以下步骤:
(11)判断元数据仓库中是否已经存在表T`,如T`已经存在则表示上一个全量数据同步的任务因为一些原因中断了,此时跳过下列步骤,直接进入(2)生成交集数据模块的操作;如T`不存在则进入步骤(12);
(12)在元数据仓库中复制创建新的元数据表(记为T`),表结构与存储目标元数据的表(记为T)结构完全一致;
(13)将源系统的元数据,分批插入元数据仓库新创建的元数据表T`中;
(14)为新创建的元数据表T`添加业务主键索引;
(15)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(16);
(16)删除表T`,且该任务终止,并给出错误提示。
所述的生成交集数据模块,包括以下步骤:
(21)判断元数据仓库中是否已经存在表TMP_UNION,如已经存在则删除之;
(22)联合源元数据和元数据仓库中的目标元数据,做可重复的并集操作,并将结果按业务主键分组统计条目;
(23)将查询所得的统计数据存储于新创建的临时表TMP_UNION中;
(24)分别为临时表TMP_UNION创建业务主键索引、统计条目索引;
(25)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(26);
(26)删除临时表TMP_UNION,且该任务终止,并给出错误提示。
所述的基于交集数据获取并插入需添加的记录模块,包括以下步骤:
(31)按业务主键连接交集数据和源元数据,同时条目为1的即为需添加的所有数据,得出需新添加的所有数据,并插入至目标元数据表;
(32)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(33);
(33)按业务主键连接交集数据和源元数据,同时条目为1的即为需添加的所有数据,得出需新添加的所有数据,并在目标元数据表删除这些数据;
(34)继续执行步骤(26)。
所述的基于交集数据生成需更新的记录模块,按业务主键连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,得出需更新的记录,包括以下步骤:
(41)连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,采取的方法是先拼接元数据的所有属性ATT_ATTRS,再取MD5运算,得出唯一散列值,然后比较源元数据属性的散列值MD5_T_FEATURES和目标元数据属性的散列值MD5_T`_FEATURES,如果散列值一致则认为两者的属性没有任何变更,标记属性状态为无变更,否则认为属性发生变更,标记属性状态为有变更。数据存储于新创建的临时表TMP_UPDATE中;
(42)为需更新的记录表的业务主键添加索引;
(43)为需更新的记录表的属性状态添加索引;
(44)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(45);
(45)删除临时表TMP_UPDATE;
(45)继续执行步骤(33)。
所述的基于更新的记录更新数据模块,包括以下步骤:
(51)连接需更新的记录表TMP_UPDATE与源元数据表,并在目标元数据表执行更新;
所述的基于交集数据删除需删除的记录模块,包括以下步骤:
(61)按业务主键连接交集数据和目标元数据,同时条目为1的即为需删除的所有数据,得出所有需删除的数据;
(62)在目标元数据表执行删除。
(63)对该模块进行合法性校验,如校验通过,则删除临时表TMP_UPDATE;
(64)删除临时表TMP_UNION;
(65)删除表T`。
至此,全量数据同步工作完成,目标元数据保持与源元数据一致,元数据的业务应用和数据分析不受影响。
从上述技术方案可以看出,本发明提供的大数据环境下实现全量数据同步的方法,不仅提供对单表大数据量的全量数据同步提供实现方法,同时支持业务回滚,还支持以异步方式对多表大数据量的全量数据同步提供实现方法。最关键的是满足全量数据同步完成后,目标元数据保持与源元数据一致,且能支撑原有元数据的业务应用和数据分析。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施步骤,并参照附图,对本发明进一步详细说明。
如图1所示,图1是本发明提供的全量数据同步流程图,该流程具体包括以下步骤:
(1)插入源数据模块,负责将源元数据分批插入元数据仓库新创建的元数据表中;
(2)生成交集数据模块,联合源元数据和元数据仓库中的目标元数据,做可重复的并集操作,并将结果按业务主键分组统计条目;
(3)基于交集数据获取并插入需添加的记录模块,按业务主键连接交集数据和源元数据,查询获取需新添加的所有数据,并插入至目标元数据表;
(4)基于交集数据生成需更新的记录模块,按业务主键连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,得出需更新的记录;
(5)基于更新的记录更新数据模块,按业务主键连接需更新的记录与源元数据,执行更新;
(6)基于交集数据删除需删除的记录模块,按业务主键连接交集数据和目标元数据,查询获取需删除的所有数据,得出所有需删除的数据执行删除。
在一种较优选的实施方式中,所述的插入源数据模块,负责将源元数据分批插入元数据仓库新创建的元数据表中,包括以下步骤:
(11)判断元数据仓库中是否已经存在表T`,如T`已经存在则表示上一个全量数据同步的任务因为一些原因中断了,此时跳过下列步骤,直接进入(2)生成交集数据模块的操作;如T`不存在则进入步骤(12);
(12)在元数据仓库中复制创建新的元数据表(记为T`),表结构与存储目标元数据的表(记为T)结构完全一致;
(13)将源系统的元数据,分批插入元数据仓库新创建的元数据表T`中;
(14)为新创建的元数据表T`添加业务主键索引;
(15)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(16);
(16)删除表T`,且该任务终止,并给出错误提示。
在一种较优选的实施方式中,所述的生成交集数据模块,包括以下步骤:
(21)判断元数据仓库中是否已经存在表TMP_UNION,如已经存在则删除之;
(22)联合源元数据和元数据仓库中的目标元数据,做可重复的并集操作,并将结果按业务主键分组统计条目;
(23)将查询所得的统计数据存储于新创建的临时表TMP_UNION中;
(24)分别为临时表TMP_UNION创建业务主键索引、统计条目索引;
(25)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(26);
(26)删除临时表TMP_UNION,且该任务终止,并给出错误提示。
在一种较优选的实施方式中,所述的基于交集数据获取并插入需添加的记录模块,包括以下步骤:
(31)按业务主键连接交集数据和源元数据,同时条目为1的即为需添加的所有数据,得出需新添加的所有数据,并插入至目标元数据表;
(32)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(33);
(33)按业务主键连接交集数据和源元数据,同时条目为1的即为需添加的所有数据,得出需新添加的所有数据,并在目标元数据表删除这些数据;
(34)继续执行步骤(26)。
在一种较优选的实施方式中,所述的基于交集数据生成需更新的记录模块,按业务主键连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,得出需更新的记录,包括以下步骤:
(41)连接交集数据、源元数据、目标元数据,并对源元数据的所有属性、目标元数据的所有属性做比对,采取的方法是先拼接元数据的所有属性ATT_ATTRS,以特定分隔符(如“_”)拼接所有属性字段,再取MD5运算,得出唯一散列值,然后比较源元数据属性的散列值MD5_T_FEATURES和目标元数据属性的散列值MD5_T`_FEATURES,如果散列值一致则认为两者的属性没有任何变更,标记属性状态为无变更,否则认为属性发生变更,标记属性状态为有变更。将查询运算结果插入新创建的临时表TMP_UPDATE。满足TMP_UPDATE.MD5_T_FEATURES<>TMP_UPDATE.MD5_T`_FEATURES的记录,即为需要更新的记录;
其中MD5运算如下:
(42)为需更新的记录表的业务主键添加索引;
(43)为需更新的记录表的属性状态添加索引;
(44)对该模块进行合法性校验,如校验通过,则进入下一个模块,否则进入(45);
(45)删除临时表TMP_UPDATE;
(45)继续执行步骤(33)。
在一种较优选的实施方式中,所述的基于更新的记录更新数据模块,包括以下步骤:
(51)连接需更新的记录表TMP_UPDATE与源元数据表T,结合TMP_UPDATE.
MD5_T_FEATURES<>TMP_UPDATE.MD5_T`_FEATURES条件,查询得出的所有记录更新至T表;
在一种较优选的实施方式中,所述的基于交集数据删除需删除的记录模块,包括以下步骤:
(61)按业务主键连接交集数据和目标元数据,同时条目为1的即为需删除的所有数据,得出所有需删除的数据;
(62)在目标元数据表执行删除。
(63)对该模块进行合法性校验,如校验通过,则删除临时表TMP_UPDATE;
(64)删除临时表TMP_UNION;
(65)删除表T`。
较佳地,为保障数据操作的一致性,需为以上各模块添加业务回滚操作,并且当前模块的业务回滚应包括上一模块的业务回滚,保证数据业务回滚是彻底的,数据是一致的。具体实现如图2所示,图2是本发明提供的全量数据同步类图,针对该图具体说明如下:
(2-1)类101即为图1中的步骤101的实现,类102即为图1中的步骤102的实现,以此类推;
(2-2)为实现图1步骤的串行执行,通过装饰者模式,类101持有类102,类102持有103,以此类推;
(2-3)图1中步骤101、步骤102等操作顺序的控制,操作异常时业务回滚操作的控制,在方法AbstractStep.step中实现,伪代码如下
通过上述设计,保障了操作步骤的执行顺序,同时在出现异常情形(如插入数据异常,执行过程异常掉电等)时,还能保障业务回滚操作,从而保证了数据的一致性。
更佳地,图1针对的是一个表数据的操作流程,当遇到多个表需要相同的操作流程时,则需要实现多套图1的操作流程。为灵活应对该场景,考虑将图1中涉及的源元数据表T`、目标元数据表T及其属性参数化,将图1操作步骤过程中产生的临时表TMP_UNION、TMP_UPDATE则添加本次执行的会话ID,变为TMP_UNION_${SID}、TMP_UPDATE_${SID},其中${SID}为本次执行的会话ID。此时每一个步骤涉及需执行的SQL都是根据参数动态拼装的。具体实现上如下:
(3-1)为目标元数据表T的实体添加注解,类似如下
(3-2)获取表名时,基于注解从实体类动态获取表名,如下:
(3-3)获取表的字段时,基于注解从实体类动态获取表字段,如下:
(3-4)基于注解获取的表名、字段名动态拼装SQL,并执行SQL,拼装SQL类似如下:
通过上述设计,可以灵活应对多表全量数据同步的场景。
更佳地,对于多表全量数据同步的场景,不同表之间的操作是互不影响的,为进一步提升操作效率,在软、硬件条件允许的情况下,可使用线程池多线程的异步方式实现多表全量数据同步,操作伪代码如下:
通过上述设计,进一步提升了多表全量数据同步的操作效率。
至此,全量数据同步工作完成,目标元数据保持与源元数据一致,元数据的业务应用和数据分析不受影响。
以上所述的本发明的具体实施例,并不用以限制本申请,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。