数据一致性确定方法、装置、设备及存储介质
技术领域
本发明涉及计算机
技术领域
,尤其涉及一种数据一致性确定方法、装置、设备及存储介质。背景技术
随着企业的发展,企业业务变得越来越复杂,单一业务系统难以支撑复杂的业务场景,出现了包含多个业务系统的新的系统架构。
以微服务系统架构为例,在微服务系统架构中,采用微服务按功能模块分布式部署方式对各个业务系统进行部署。因此,在微服务系统架构中,一个业务会产生在结构上分散分布的多条待处理数据,即同一业务的多条待处理数据分布在多个微服务模块内。然而,发明人发现:微服务系统架构中各个微服务模块独立处理后的数据会发生变化,造成微服务系统架构中各个微服务模块之间的数据不一致。
因此,如何确定同一系统架构中各个模块之间的数据是否一致成为了亟待解决的技术难题。
发明内容
本发明实施例提供一种数据一致性确定方法、装置、设备及存储介质,用以解决如何确定同一系统架构中各个模块之间的数据是否一致的问题。
根据本发明实施例第一方面,提供一种数据一致性确定方法,包括:
从第一数据源获取源数据;
基于所述源数据的数据标识,从第二数据源获取目标数据,所述目标数据与所述源数据具有相同的数据标识;
根据预先配置的所述源数据与所述目标数据之间的字段映射关系,确定所述源数据以及所述目标数据中的待比对字段是否一致。
在一种
具体实施方式
中,所述确定所述源数据以及所述目标数据中的待比对字段是否一致,包括:
根据所述第一数据源以及所述第二数据源,从预先配置的多个字段映射关系中获取所述源数据与所述目标数据之间的所述字段映射关系;
基于所述字段映射关系,对所述源数据以及所述目标数据中的待比对字段的值进行比对;
若所述源数据以及所述目标数据的待比对字段的值一致,则确定所述源数据以及所述目标数据中的待比对字段一致。
在一种具体实施方式中,所述方法还包括:
若所述源数据以及所述目标数据中的待比对字段的值不一致,则确定是否符合延迟重试条件,所述延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;
若符合所述延迟重试条件,则从所述第一数据源重新获取所述源数据,并从所述第二数据源重新获取所述目标数据;
基于所述字段映射关系,确定重新获取到的所述源数据以及所述目标数据中的待比对字段的值是否一致。
在一种具体实施方式中,所述方法还包括:
在从所述第一数据源重新获取所述源数据之前,生成延迟重试消息,所述延迟重试消息包括所述源数据的数据标识,
所述从所述第一数据源重新获取所述源数据,并从所述第二数据源重新获取所述目标数据,包括:
若监听到所述延迟重试消息,则从所述延迟重试消息中获取所述数据标识;
基于所述数据标识,从所述第一数据源重新获取所述源数据,从所述第二数据源重新获取所述目标数据。
在一种具体实施方式中,所述方法还包括:
将所述延迟重试消息放入重试消息队列中;
若监听到所述源数据发生了变化,则基于所述数据标识确定所述重试消息队列中是否已存在所述源数据;
若已存在所述源数据,则通过变化后的所述源数据更新所述重试消息队列中已存在的所述源数据。
在一种具体实施方式中,所述从第一数据源获取源数据,包括:
监听所述第一数据源的二进制日志binlog消息;
基于监听到的所述binlog消息中的所述数据标识,从所述第一数据源中获取所述源数据;
所述基于所述源数据的数据标识,从第二数据源获取目标数据,包括:
基于监听到的所述binlog消息中的所述数据标识,确定与所述第一数据源对应的数据抽取任务;
基于所述数据标识以及所述数据抽取任务从所述第二数据源获取目标数据。
在一种具体实施方式中,所述第一数据源与所述第二数据源为同一类型的数据源,所述从第一数据源获取源数据,包括:
从所述第一数据源批量获取多条源数据。
在一种具体实施方式中,所述第一数据源为数据文件,所述从第一数据源获取源数据,包括:
从所述数据文件中读取行数据;
将读取的行数据进行封装,将封装后的行数据作为所述源数据。
根据本发明的一些实施例,基于上述方案,所述方法还包括:
若所述数据文件的大小大于预定阈值,则对所述数据文件进行分片;
所述从所述数据文件中读取行数据,包括:
通过分片粒度并发读取所述数据文件的各个分片的行数据。
在一种具体实施方式中,所述方法还包括:
对所述源数据与所述目标数据进行聚合处理,生成行数据,所述行数据包括所述源数据与所述目标数据;
所述确定所述源数据以及所述目标数据中的待比对字段是否一致,包括:
对所述行数据中所述源数据以及所述目标数据中的待比对字段进行流式数据比对;
基于比对的结果确定所述源数据以及所述目标数据中的待比对字段是否一致。
在一种具体实施方式中,所述对所述源数据与目标数据进行聚合处理,生成行数据,包括:
获取预先配置的与所述第一数据源以及所述第二数据源对应的数据聚合模板;
基于所述数据聚合模板对所述源数据以及所述目标数据进行聚合处理,生成行数据。
本发明实施例的第二方面,提供了一种数据一致性确定装置,包括:
第一数据获取模块,用于从第一数据源获取源数据;
第二数据获取模块,用于基于所述源数据的数据标识,从第二数据源获取目标数据,所述目标数据与所述源数据具有相同的数据标识;
数据比对模块,用于根据预先配置的所述源数据与所述目标数据之间的字段映射关系,确定所述源数据以及所述目标数据中的待比对字段是否一致。
在一种具体实施方式中,所述数据比对模块包括:
映射关系确定单元,用于根据所述第一数据源以及所述第二数据源,从预先配置的多个字段映射关系中获取所述源数据与所述目标数据之间的所述字段映射关系;
比对单元,用于基于所述字段映射关系,对所述源数据以及所述目标数据中的待比对字段的值进行比对;
一致性确定单元,用于若所述源数据以及所述目标数据的待比对字段的值一致,则确定所述源数据以及所述目标数据中的待比对字段一致。
在一种具体实施方式中,所述装置还包括:
重试确定模块,用于若所述源数据以及所述目标数据中的待比对字段的值不一致,则确定是否符合延迟重试条件,所述延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;
重新获取模块,用于若符合所述延迟重试条件,则从所述第一数据源重新获取所述源数据,并从所述第二数据源重新获取所述目标数据;
重新比对模块,用于基于所述字段映射关系,确定重新获取到的所述源数据以及所述目标数据中的待比对字段的值是否一致。
在一种具体实施方式中,所述装置还包括:
重试消息生成模块,用于在从所述第一数据源重新获取所述源数据之前,生成延迟重试消息,所述延迟重试消息包括所述源数据的数据标识,
所述重新获取模块被配置为:
若监听到所述延迟重试消息,则从所述延迟重试消息中获取所述数据标识;
基于所述数据标识,从所述第一数据源重新获取所述源数据,从所述第二数据源重新获取所述目标数据。
在一种具体实施方式中,所述装置还包括:
队列生成模块,用于将所述延迟重试消息放入重试消息队列中;
源数据确定模块,用于若监听到所述源数据发生了变化,则基于所述数据标识确定所述重试消息队列中是否已存在所述源数据;
数据更新模块,用于若已存在所述源数据,则通过变化后的所述源数据更新所述重试消息队列中已存在的所述源数据。
在一种具体实施方式中,所述第一数据获取模块还用于:
监听所述第一数据源的二进制日志binlog消息;
基于监听到的所述binlog消息中的所述数据标识,从所述第一数据源中获取所述源数据;
所述第二数据获取模块还用于:
基于监听到的所述binlog消息中的所述数据标识,确定与所述第一数据源对应的数据抽取任务;
基于所述数据标识以及所述数据抽取任务从所述第二数据源获取目标数据。
在一种具体实施方式中,所述第一数据源与所述第二数据源为同一类型的数据源,所述第一数据获取模块还用于:
从所述第一数据源批量获取多条源数据。
在一种具体实施方式中,所述第一数据源为数据文件,所述第一数据获取模块还用于:
从所述数据文件中读取行数据;
将读取的行数据进行封装,将封装后的行数据作为所述源数据。
在一种具体实施方式中,所述装置还包括:
文件分片模块,用于若所述数据文件的大小大于预定阈值,则对所述数据文件进行分片;
所述第一数据获取模块还用于:
通过分片粒度并发读取所述数据文件的各个分片的行数据。
在一种具体实施方式中,所述装置还包括:
数据聚合模块,用于对所述源数据与所述目标数据进行聚合处理,生成行数据,所述行数据包括所述源数据与所述目标数据;
所述数据比对模块包括:
流式比对单元,用于对所述行数据中所述源数据以及所述目标数据中的待比对字段进行流式数据比对;
结果确定单元,用于基于比对的结果确定所述源数据以及所述目标数据中的待比对字段是否一致。
在一种具体实施方式中,所述数据聚合模块具体用于:
获取预先配置的与所述第一数据源以及所述第二数据源对应的数据聚合模板;
基于所述数据聚合模板对所述源数据以及所述目标数据进行聚合处理,生成行数据。
本发明实施例的第三方面,提供了一种电子设备,包括:存储器,处理器;其中,
所述存储器用于存储所述处理器可执行指令的存储器;
所述处理器被配置为实现如第一方面所述的数据一致性确定方法。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面所述的数据一致性确定方法。
本发明实施例提供的数据一致性确定方法、装置、设备及存储介质,一方面,由于预先配置了需要一致性比对的两个数据源的字段之间的字段映射关系,从而能够支持异结构的数据源之间的数据一致性比对;另一方面,根据该字段映射关系,对从两个数据源获取的待比对数据进行一致性比对,从而能够确定同一系统架构下处于不同模块下的业务数据是否一致,进而能够确保同一系统架构下的数据的一致性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本发明的一些实施例的数据一致性确定方法的应用场景的示意框图;
图2为本发明的一些实施例提供的数据一致性确定方法的流程示意图;
图3为本发明的又一些实施例提供的数据一致性确定方法的流程示意图;
图4为本发明的另一些实施例提供的数据一致性确定方法的流程示意图;
图5为本发明的再一些实施例提供的数据一致性确定方法的流程示意图;
图6为本发明的又一些实施例提供的数据一致性确定方法的流程示意图
图7为本发明的一些实施例提供的数据比对处理的流程示意图;
图8为本发明提供的数据一致性确定装置实施例一的示意框图;
图9为本发明的一些实施例提供的数据比对模块的示意框图;
图10为本发明提供的数据一致性确定装置实施例二的示意框图;
图11为本发明提供的数据一致性确定装置实施例三的示意框图;
图12为本发明提供的数据一致性确定装置实施例四的示意框图;
图13为本发明提供的数据一致性确定装置实施例五的示意框图;
图14为本发明提供的数据一致性确定装置实施例五的示意框图
图15为本发明的一些实施例提供的电子设备的示意框图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
首先对本发明所涉及的名词进行解释:
微服务:微服务是一种使用一套小服务来开发单个应用的方式途径,基于业务能力构建,区别于系统,微服务可独立部署,每个服务运行在自己的进程中,并使用轻量级机制通信,如超文本传送协议(HyperText Transfer Protocol,HTTP)应用程序接口(Application Programming Interface,API)等。
二进制日志(binary log,binlog):是记录数据库中数据表的表结构变更(例如创建表、改动表ALTER TABLE…)以及表数据修改(插入、更新、删除…)的二进制日志。
数据源:是指存储有源数据或目标数据的数据库、数据表或文件等。
流式数据比对:忽略数据存在形态,将原始数据转化为一条一条的数据进行处理,由单条单一数据构造单条复合数据,即含源数据与目标数据的复合数据例如行数据,然后在复合数据例如行数据内完成数据的校验。
批量数据比对:由调度中心定时周期性执行或单次人工触发的方式,完成大批量数据校验的过程,如每天凌晨3点,跨业务库、台账库、资产库执行昨日放款数据验证。
目前,在微服务系统架构中,采用微服务按功能模块分布式部署方式对各个业务系统进行部署。因此,在微服务系统架构中,一个业务会产生在结构上分散分布的多条待处理数据,即同一业务的多条待处理数据分布在多个微服务模块内。然而,发明人发现:微服务系统架构中各个微服务模块独立处理后的数据会发生变化,造成微服务系统架构中各个微服务模块之间的数据不一致。
为了解决同一系统架构中各个模块之间的数据不一致的问题,在一种技术方案中,对该系统架构下相同表结构的模块之间的数据进行一致性比对。然而,在该技术方案中,不能支持表结构不同的异结构的数据的一致性比对。
基于上述内容,本发明的基本思想在于:预先配置需要一致性比对的两个数据源的字段之间的字段映射关系,根据该字段映射关系,对从两个数据源获取的待比对数据进行一致性比对。根据本发明实施例的技术方案,由于预先配置了需要一致性比对的两个数据源的字段之间的字段映射关系,从而能够支持异结构的数据源之间的数据一致性比对;根据该字段映射关系,对从两个数据源获取的待比对数据进行一致性比对,从而能够确定同一系统架构下处于不同模块下的业务数据是否一致,进而能够确保同一系统架构下的数据的一致性。
图1为本发明的一些实施例的数据一致性确定方法的应用场景的示意框图。参照图1所示,该应用场景包括数据一致性确定装置110、微服务模块120、微服务模块130以及配置库140,其中,数据一致性确定装置110包括数据获取模块112以及数据比对模块114,数据获取模块112用于从第一数据源122获取源数据,以及从第二数据源132获取目标数据;数据比对模块114用于对数据获取模块112获取的源数据以及目标数据中的待比对字段进行一致性比对;微服务模块120包括第一数据源122,微服务模块130包括第二数据源132,第一数据源122和第二数据源132可以为数据库或数据文件。
进一步地,配置库140中存储有预先配置的微服务模块120中的数据以及微服务模块130中的数据之间的字段映射关系文件。数据比对模块114用于根据配置库140中获取的字段映射关系,对源数据以及目标数据之间的待比对字段进行一致性比对。
需要说明的是,数据一致性确定装置110可以为台式计算机或膝上型计算机,也可以为其他适当的通用计算设备例如笔记本电脑或者云计算设备,本发明对此不进行特殊限定。
进一步地,第一数据源和第二数据源可以为微服务系统中的数据源,也可以为其他适当的业务系统例如分布式业务系统中的数据源,这同样属于本发明的保护范围内。
下面结合图1的应用场景,参考附图来描述根据本发明的示例性实施例的数据一致性确定方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施例在此方面不受任何限制。相反,本发明的实施例可以应用于适用的任何场景。
图2为本发明的一些实施例的数据一致性确定方法的流程示意图。该数据一致性确定方法可以应用于图1的数据一致性确定装置110,下面以微服务系统为商品交易系统为例,结合附图对示例实施例中的数据一致性确定方法进行详细的说明。
参照图2所示,在步骤S210中,从第一数据源获取源数据。
在示例实施例中,第一数据源可以为微服务系统中的微服务模块A中的数据源,第一数据源可以为数据库或数据文件。若第一数据源为数据库,则可以通过监听第一数据源中的数据变化,若监听到第一数据源中的数据变化,则从第一数据源获取发生变化的数据作为源数据。举例而言,设微服务系统为商品交易系统,则微服务模块A可以为订单生成模块,第一数据源为订单生成模块A对应的订单数据库,源数据为一条新订单数据。
进一步地,在示例实施例中,可以从数据库或数据文件中批量读取数据,将读取的数据作为源数据。例如,可以单次批量或定时批量从第一数据源中读取数据,单次批量读取仅执行一次,定时批量读取以定时任务机制进行批量读取。
在步骤S220中,基于源数据的数据标识,从第二数据源获取目标数据,目标数据与源数据具有相同的数据标识。
在示例实施例中,第二数据源可以为微服务系统中的另一个微服务模块B中的数据源,第二数据源可以为数据库或数据文件。进一步地,源数据的数据标识可以为源数据的唯一标识例如主键。若第二数据源和第二数据源均为数据库,则根据源数据的唯一标识例如主键从第二数据源获取目标数据,其中,目标数据与源数据具有相同的数据标识。举例而言,设微服务模块B为银行业务模块,第二数据源为收支明细数据库,目标数据与源数据具有相同的交易银行卡号,该交易银行卡号为源数据的数据标识。
需要说明的是,数据库可以包括:MySQL数据库、Oracle数据库,或其他适当的数据库例如HBase数据库等数据库。数据文件可以包括:excel文件、txt文件,或其他适当的数据文件例如序列文件SequenceFile或Avro文件等数据文件。
在步骤S230中,根据预先配置的源数据与目标数据之间的字段映射关系,确定源数据以及目标数据中的待比对字段是否一致。
在示例实施例中,预先配置第一数据源与第二数据源中的待比对字段之间的字段映射关系,根据预先配置的字段映射关系,对源数据以及目标数据中的待比对字段的值进行比对,确定源数据以及目标数据中的待比对字段是否一致。例如,可以在数据库中存储预先配置的第一数据源与第二数据源中的待比对字段之间的字段映射关系,在获取到源数据以及目标数据之后,根据第一数据源的标识信息以及第二数据源的标识信息,从该数据库中获取预先配置的字段映射关系,基于该字段映射关系,按照预定比对规则对源数据以及目标数据中的待比对字段的值进行比对,若源数据以及目标数据的待比对字段的值一致,则确定源数据以及目标数据中的待比对字段一致;若源数据以及目标数据的待比对字段的值不一致,则可以发出报警信息。
需要说明的是,预定比对规则可以包括等于、大于或小于的比对规则,对于源数据和目标数据中的不同的字段,比对规则可以不同。例如,设源数据包括字段a和字段c,目标数据中包含字段b和字段d,预定比对规则可以为:字段a=字段b、字段c>字段d,若字段a=字段b并且字段c>字段d,则判定源数据与目标数据一致。
根据图2的示例实施例中的数据一致性确定方法,一方面,由于预先配置了需要一致性比对的两个数据源的字段之间的字段映射关系,从而能够支持异结构的数据源之间的数据一致性比对;另一方面,根据该字段映射关系,对从两个数据源获取的待比对数据进行一致性比对,从而能够确定同一系统架构下处于不同模块下的业务数据是否一致,进而能够确保同一系统架构下的数据的一致性。
进一步地,对于随时间变化的数据源,由于源数据会动态变化,在一次比对失败之后,可以在预定时间范围内或者预定次数阈值内重新进行数据比对,因此,在示例实施例中,若源数据以及目标数据中的待比对字段的值不一致,则确定是否符合延迟重试条件,延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;若符合延迟重试条件,则从第一数据源重新获取源数据,并从第二数据源重新获取目标数据;基于该字段映射关系,确定重新获取到的源数据以及目标数据中的待比对字段的值是否一致。
图3为本发明的又一些实施例提供的数据一致性确定方法的流程示意图。
参照图3所示,在步骤S310中,监听第一数据源的二进制日志binlog消息;
在示例实施例中,第一数据源为订单生成模块A对应的订单数据库。在商品交易系统产生新的商品交易时,生成新的订单数据,订单数据库的binlog会发生变化,生成binlog变动信息。对第一数据源进行监听,在第一数据源生成binlog消息之后,就能够监听到第一数据源的binlog消息。
在步骤S320中,基于监听到的binlog消息中的数据标识,从第一数据源中获取源数据,以及从第二数据源获取目标数据。
在示例实施例中,从binlog消息中提取源数据的数据标识,该数据标识可以为数据主键和/或切分键(分库分表时有切分键),基于该数据标识从第一数据源获取源数据,以及从第二数据源获取目标数据,第二数据源可以为数据库或数据文件。例如,在接收到监听到的binlog消息之后,确定该binlog所属的数据源例如数据库或数据表,根据预先配置与该数据源对应的数据聚合配置信息,确定对应的数据抽取任务例如,任务1、任务2以及任务3,任务1、任务2以及任务3分别为从微服务系统中的微服务模块1、微服务模块2以及微服务模块3抽取数据的任务,根据数据抽取任务以及数据标识从对应的微服务模块抽取数据。
进一步地,为了提高数据处理效率,在示例实施例中,对源数据与目标数据进行聚合处理,生成行数据,该行数据包括源数据与目标数据,其中,源数据列采用src_前缀标示,目标数据列采用tgt_前缀标示。具体而言,获取预先配置的与第一数据源以及第二数据源对应的数据聚合模板;基于该数据聚合模板对源数据以及目标数据进行聚合处理,生成行数据。
通过将源数据以及目标数据聚合成行数据,能够将批量数据比对分解为逐行的流式数据处理,减少了任务复杂度,从而能够提高数据处理效率。
在步骤S330中,确定源数据以及目标数据中的待比对字段是否一致。
在示例实施例中,对行数据中源数据以及目标数据中的待比对字段进行流式数据比对,例如可以将Flink作为流式数据处理的处理平台,对行数据中源数据以及目标数据中的待比对字段进行流式数据比对;基于比对的结果确定源数据以及目标数据中的待比对字段是否一致。具体而言,接收到生成的行数据之后,逐个匹配并对比源数据与目标数据中关联的各个待比对字段的值,若所有待比对字段均验证成功,则生成比对成功消息,将该比对成功消息放入比对成功队列;若存在不一致的待比对字段,则生成延迟重试消息,将该延迟重试消息放入重试消息队列中。
通过监听binlog的方式对第一数据源进行监听,能够实时发现第一数据源的数据变动,对发生变动的源数据以及目标数据进行实时比对,从而能够在一定时间范围内,保证微服务系统的业务数据达到一致性。
进一步地,可以确定该延迟重试消息是否符合延迟重试条件,延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;若符合延迟重试条件,则从第一数据源重新获取源数据,并从第二数据源重新获取目标数据;基于该字段映射关系,确定重新获取到的源数据以及目标数据中的待比对字段的值是否一致。若不符合延迟重试条件,则生成报警信息。
图4为本发明的另一些实施例提供的数据一致性确定方法的流程示意图。
参照图4所示,在步骤S410中,触发批量数据读取任务。
在示例实施例中,可以设置单次批量或定时批量从第一数据源中读取数据的数据读取任务,单次批量读取仅执行一次,定时批量读取以定时任务机制进行批量读取。例如,可以通过微服务系统的调度中心以cron定时调度的方式定时触发从第一数据源批量获取数据的数据读取任务。
在步骤S420中,响应于该批量数据读取任务,从第一数据源批量获取多条源数据,从第二数据源获取对应的目标数据,其中,第一数据源与所述第二数据源为同一类型的数据源。
在示例实施例中,同一类型的数据源可以包括MySQL单库单表数据源、Elasticsearch数据库、HBase数据库表或MongoDB数据库,也可以包括其他适当的数据源例如MySQL数据库中的分库分表数据源,为了保证能够方便地进行全量轮询,单独配置MySQL数据库的各个分库分表。进一步地,为了提高大表的数据查询效率,以游标方式记录每次批量数据读取任务的主键最大值,以依次递增的方式进行分页查询读取数据。在获取到多条源数据之后,根据源数据的数据标识从第二数据源获取对应的目标数据。
进一步地,为了提高数据处理效率,在示例实施例中,对源数据与目标数据进行聚合处理,生成行数据,该行数据包括源数据与目标数据,其中,源数据列采用src_前缀标示,目标数据列采用tgt_前缀标示。具体而言,获取预先配置的与第一数据源以及第二数据源对应的数据聚合模板;基于该数据聚合模板对源数据以及目标数据进行聚合处理,生成行数据。
通过将源数据以及目标数据聚合成行数据,能够将批量数据比对分解为逐行的流式数据处理,减少了任务复杂度,降低了硬件资源消耗,从而能够提高数据处理效率。
在步骤S430中,确定源数据以及目标数据中的待比对字段是否一致。
由于步骤S430与步骤S330或步骤S230的实现原理以及效果基本相同,在此不再赘述。
图5为本发明的再一个实施例提供的数据一致性确定方法的流程示意图。
参照图5所示,在步骤S510中,从第一数据源获取源数据,第一数据源为数据文件。
在示例实施例中,从数据文件中读取行数据;将读取的行数据进行封装,将封装后的行数据作为源数据。进一步地,若数据文件的大小大于预定阈值,则对该数据文件进行分片;通过分片粒度并发读取数据文件的各个分片的行数据。
进一步地,在示例实施例中,将源数据进行封装例如封装成类似于binlog的消息格式,将封装后的数据以消息的形式发送到下一处理模块。
在步骤S520中,基于源数据的数据标识,从第二数据源获取目标数据。
在示例实施例中,第二数据源为数据库,基于接收到源数据的数据标识,直接从第二数据库中获取目标数据。由于数据文件中的数据在短时间内一般不会发生变化,因此,不需要再从第一数据源反查源数据。
在步骤S530中,确定源数据以及目标数据中的待比对字段是否一致。
由于步骤S530与步骤S330或步骤S230的实现原理以及效果基本相同,在此不再赘述。
根据图5的示例实施例中的数据一致性确定方法,能够支持文件与数据库中的数据的一致性比对,并且支持对大文件进行分片后比对,而且,通过分片后并行进行比对,能够进一步提高数据比对效率。
图6为本发明的另一个实施例的数据一致性确定方法的流程示意图。参照图6所示,在步骤S610中,进行数据输入。
在示例实施例中,数据输入可以包括以下几种方式:(1)实时流式数据输入,适用于数据库与数据库动态数据比对或校验;(2)动态批量数据输入,适用于数据库与数据库对比或校验;或(3)固定批量数据输入,适用于文件等固定数据与数据库比对或校验。
下面结合附图对这几种输入方式分别进行说明。
步骤S612中,进行实时流式数据输入。
在该步骤中,数据源中的数据改动引起数据源的binlog变化,binlog变化触发生成binlog消息,
在步骤S614中,动态批量数据输入。
在该步骤中,将批量待执行任务分为单次批量比对与定时批量比对两种。单次批量比对仅执行一次;定时批量比对以定时任务机制进行管理,调度中心通过cron定时调度触发执行执行动态批量数据读取。
在步骤S616中,进行固定批量数据输入,
在该步骤中,从数据文件中读取行数据;将读取的行数据进行封装,将封装后的行数据作为源数据。进一步地,若数据文件的大小大于预定阈值,则对该数据文件进行分片;通过分片粒度并发读取数据文件的各个分片的行数据。
在步骤S620中,对源数据以及目标数据进行封装,生成对应的封装消息。
在该步骤中,针对实时流式数据输入,执行步骤S622,在步骤S622中,、原始数据读入主要通过监听数据源的binlog,若数据源的一行数据发生变化,以当前行的数据的数据标识例如主键、切分键(如分库分表时有切分键)作为数据唯一反查依据。
针对(2)动态批量数据输入或(3)固定批量数据输入,执行步骤S624。在步骤S624中,将读取的数据库或文件中的一行数据进行封装,生成虚拟数据消息。
此外,在示例实施例中,在该步骤中,还接收延迟重试消息,延迟重试数据读入时主要监听比对失败后的延迟重试消息,监听到延迟重试消息后,抽取延迟重试消息中的数据标识例如主键、切分键(如分库分表时),构造成一个聚合任务。
在步骤S630中,进行数据聚合处理。该步骤可以包括步骤S632至步骤S638。
在步骤S632中,在读入binlog消息或虚拟数据消息之后,解析binlog消息或虚拟数据消息,确定与该binlog消息或虚拟数据消息对应的数据源相关联的数据聚合配置,生成对应的聚合任务。
在步骤S634中,将与binlog消息对应的聚合任务放入实时任务队列,将与虚拟数据消息对应的聚合任务放入离线任务队列。例如,可以将Kafka作为比对的实时任务队列。
在步骤S436中,根据数据聚合配置确定对应的的执行计划,如:执行计划1、2和3,执行任务1、2和3分别对应从数据源1、数据源2和数据源3查询数据的任务,按照执行计划以及源数据的数据标识从与源数据关联的数据源中抽取数据。
在步骤S638中,通过与数据源匹配的模版对抽取的数据进行封装,产出一行包含源数据、目标数据的行数据,其中,源数据列采用src_前缀标示,目标数据列采用tgt_前缀标示,然后将拼装完成的复合数据发送给数据比对模块进行处理。
在步骤S640中,根据预先配置的字段映射关系,对源数据以及目标数据中的待比对字段的值进行比对,确定源数据以及目标数据中的待比对字段是否一致。
根据图6的示例实施例中的技术方案,一方面,能够进行多种数据载体之间的数据比对,支持文件与数据库、数据库与数据库之间的数据比对;另一方面,将抽取的源数据与目标数据封装成行数据,对行数据进行流式数据比对,能够将对硬件资源要求较高的比对任务,转化为对硬件资源要求较低的行数据比对,从而能够降低硬件资源消耗。
图7为图6的步骤S640中的数据比对处理的流程示意图。参照图7所示,在步骤S710中,接收到生成的行数据之后,确定行数据对应的字段映射关系。例如,根据行数据中源数据以及目标数据所属的数据源确定对应的字段映射关系。
在步骤S710中,基于该字段映射关系,从行数据中提取对应的源数据以及目标数据的待比对字段,按照预定比对规则进行对比。需要说明的是,预定比对规则可以包括等于、大于或小于的比对规则,对于源数据和目标数据中的不同的字段,比对规则可以不同。例如,设源数据包括字段a和字段c,目标数据中包含字段b和字段d,预定比对规则可以为:字段a=字段b、字段c>字段d,若字段a=字段b并且字段c>字段d,则判定源数据与目标数据一致。
在步骤S720,若比对成功,则进行至步骤S740;若没有比对成功,则进行至步骤S725。
在步骤S725中,确定是否符合延迟重试条件,延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;若符合延迟重试条件,则进行至步骤S730,若不符合延迟重试条件,则进行至步骤S740。
在步骤S730中,生成延迟重试消息,将延迟重试消息放入延迟队列。
在步骤S735中,自动重发重试,即自动从延迟队列中提取延迟重试消息,并将提取的延迟重试消息发送至数据聚合处理模块。
在步骤S740中,将数据比对结果写入数据库或文件中。
在步骤S745中,生成数据比对成功或数据比对失败通知消息。
在步骤S750中,发送生成的数据比对结果通知消息。例如,在比对失败时,发送生成大的比对失败通信消息,以进行预警。
根据图7的示例实施例中的技术方案,一方面,通过预先配置多种比对规则,能够根据数据源的数据结构灵活进行数据比对;另一方面,通过设置延迟重试条件,能够在预定时间阈值或预定次数阈值内进行实时数据比对,确保能够及时发现数据不一致的情况。
图8为本发明提供的数据一致性确定装置实施例一的示意框图。参照图8所示,该数据一致性确定装置800包括:
第一数据获取模块810,用于从第一数据源获取源数据;
第二数据获取模块820,用于基于所述源数据的数据标识,从所述第二数据源获取目标数据,所述目标数据与所述源数据具有相同的数据标识;
数据比对模块830,用于根据预先配置的所述源数据与所述目标数据之间的字段映射关系,确定所述源数据以及所述目标数据中的待比对字段是否一致。
图9为本发明的一些实施例提供的数据比对模块的示意框图。参照图9所示,所述数据比对模块830包括:
映射关系确定单元910,用于根据所述第一数据源以及所述第二数据源,从预先配置的多个字段映射关系中获取所述源数据与所述目标数据之间的所述字段映射关系;
比对单元920,用于基于所述字段映射关系,对所述源数据以及所述目标数据中的待比对字段的值进行比对;
一致性确定单元930,用于若所述源数据以及所述目标数据的待比对字段的值一致,则确定所述源数据以及所述目标数据中的待比对字段一致。
图10为本发明提供的数据一致性确定装置实施例二的示意框图。参照图10所示,所述装置800还包括:
重试确定模块1010,用于若所述源数据以及所述目标数据中的待比对字段的值不一致,则确定是否符合延迟重试条件,所述延迟重试条件包括重试时间在预定时间范围内或者重试次数在预定次数阈值内;
重新获取模块1020,用于若符合所述延迟重试条件,则从所述第一数据源重新获取所述源数据,并从所述第二数据源重新获取所述目标数据;
重新比对模块1030,用于基于所述字段映射关系,确定重新获取到的所述源数据以及所述目标数据中的待比对字段的值是否一致。
图11为本发明提供的数据一致性确定装置实施例三的示意框图。参照图11所示,所述装置800还包括:
重试消息生成模块1110,用于在从所述第一数据源重新获取所述源数据之前,生成延迟重试消息,所述延迟重试消息包括所述源数据的数据标识,
所述重新获取模块1020被配置为:
若监听到所述延迟重试消息,则从所述延迟重试消息中获取所述数据标识;
基于所述数据标识,从所述第一数据源重新获取所述源数据,从所述第二数据源重新获取所述目标数据。
图12为本发明提供的数据一致性确定装置实施例四的示意框图。参照图12所示,所述装置800还包括:
队列生成模块1210,用于将所述延迟重试消息放入重试消息队列中;
源数据确定模块1220,用于若监听到所述源数据发生了变化,则基于所述数据标识确定所述重试消息队列中是否已存在所述源数据;
数据更新模块1230,用于若已存在所述源数据,则通过变化后的所述源数据更新所述重试消息队列中已存在的所述源数据。
在一种具体实施方式中,所述第一数据获取模块810还用于:
监听所述第一数据源的二进制日志binlog消息;
基于监听到的所述binlog消息中的所述数据标识,从所述第一数据源中获取所述源数据;
所述第二数据获取模块820还用于:
基于监听到的所述binlog消息中的所述数据标识,确定与所述第一数据源对应的数据抽取任务;
基于所述数据标识以及所述数据抽取任务从所述第二数据源获取目标数据。
在一种具体实施方式中,所述第一数据源与所述第二数据源为同一类型的数据源,所述第一数据获取模块810还用于:
从所述第一数据源批量获取多条源数据。
在一种具体实施方式中,所述第一数据源为数据文件,所述第一数据获取模块810还用于:
从所述数据文件中读取行数据;
将读取的行数据进行封装,将封装后的行数据作为所述源数据。
图13为本发明提供的数据一致性确定装置实施例五的示意框图,所述装置800还包括:
文件分片模块1320,用于若所述数据文件的大小大于预定阈值,则对所述数据文件进行分片;
所述第一数据获取模块810还用于:
通过分片粒度并发读取所述数据文件的各个分片的行数据。
图14为本发明提供的数据一致性确定装置实施例六的示意框图,所述装置800还包括:
数据聚合模块1410,用于对所述源数据与所述目标数据进行聚合处理,生成行数据,所述行数据包括所述源数据与所述目标数据;
所述数据比对模块840还用于:
对所述行数据中所述源数据以及所述目标数据中的待比对字段进行流式数据比对;
基于比对的结果确定所述源数据以及所述目标数据中的待比对字段是否一致。
在一种具体实施方式中,所述数据聚合模块1410具体用于:
获取预先配置的与所述第一数据源以及所述第二数据源对应的数据聚合模板;
基于所述数据聚合模板对所述源数据以及所述目标数据进行聚合处理,生成行数据。
本发明实施例提供的数据一致性确定装置能够实现前述方法实施例中的各个过程,并达到相同的功能和效果,这里不再重复。
此外,本申请实施例还提供了一种电子设备,用于执行上述实施例所描述的数据一致性确定方法。图15为本发明的一些实施例提供的电子设备的示意框图。如图15所示,该电子设备1500包括:至少一个处理器1502、存储器1504、总线1506及通信接口1508。
其中:处理器1502、通信接口1508、以及存储器1504通过通信总线1506完成相互间的通信。
通信接口1508,用于与其它设备进行通信。
处理器1502,用于执行程序1510,具体可以执行上述实施例中所描述的方法中的相关步骤。例如,处理器1502可以执行以下步骤:从第一数据源获取源数据;基于所述源数据的数据标识,从第二数据源获取目标数据,所述目标数据与所述源数据具有相同的数据标识;根据预先配置的所述源数据与所述目标数据之间的字段映射关系,确定所述源数据以及所述目标数据中的待比对字段是否一致。
具体地,程序1510可以包括程序代码,该程序代码包括计算机操作指令。
处理器1502可能是中央处理器,或者是特定集成电路(Application SpecificIntegrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器1504,用于存放程序1510。存储器1504可能包含高速RAM存储器,也可能还包括非易失性存储器,例如至少一个磁盘存储器。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器、CD-ROM、磁带、软盘和光数据存储设备等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本发明旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求书指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求书来限制。