一种文件的数据比对方法、装置、设备及存储介质与流程

文档序号:26503605发布日期:2021-09-04 06:34阅读:150来源:国知局
一种文件的数据比对方法、装置、设备及存储介质与流程

1.本申请实施例涉及金融科技(fintech)的数据处理技术领域,涉及但不限于一种文件的数据比对方法、文件的数据比对装置、文件的数据比对设备及计算机可读存储介质。


背景技术:

2.随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变,然而,由于金融行业的安全性、实时性要求,金融科技也对技术提出了更高的要求。
3.金融科技领域下,微众银行的交易类产品的用户和交易量都非常大,面对上亿的存量用户和单日交易,核对用户每天的交易是否正确处理是一个难题。例如微信用户端下零钱通产品会实时发起货币基金申购赎回交易,会实时处理用户持有的份额,交易处理记录会持久化存储到数据库,每天日终会产生对应的对账文件,针对申购交易会有一个申购日终对账文件,针对赎回会有一个赎回日终对账文件。对账文件使用特殊的协议格式,每一行记录一笔交易,上亿笔交易通过对账文件发给微信理财系统,微信理财系统需要将对账文件的内容和用户实时交易记录的数据进行一个核对,并且需要以对账文件内容为准处理核对不一致的数据。
4.相关技术中针对对账的处理,参照图1中的步骤实现,首先,直接读取对账文件,解析对账文件中每一行内容;其次,通过解析得到一些关键字段匹配数据库中的交易数据;最后,处理匹配的几种结果。在处理匹配的几种结果时,如果对账文件不存在交易记录,数据库存在交易记录,需要删除并回退处理交易。如果对账文件存在交易记录,数据库不存在交易记录,需要新增并处理交易。如果对账文件存在交易记录,数据库存在交易记录;此时,有两种情况,一种是交易数据不一致,需要已对账文件为准处理交易,另一种是交易数据一致,说明对账相符,无需处理。可见,相关技术在对账过程中至少存在大文件读取时直接边解析边处理,处理效率慢,耗时长的问题。


技术实现要素:

5.本申请实施例提供一种文件的数据比对方法、文件的数据比对装置、文件的数据比对设备及计算机可读存储介质,以解决相关技术在对账过程中至少存在大文件读取时直接边解析边处理,处理效率慢,耗时长的问题。
6.本申请实施例的技术方案是这样实现的:
7.本申请实施例提供一种文件的数据比对方法,包括:
8.对获取到的对账文件进行等比拆分,得到n个拆分文件;
9.按照所述对账文件关联的交易所具有的用户标识,将所述n个拆分文件分到m个数据分区中;其中,所述m个数据分区中每一数据分区对应一个用户标识,所述每一数据分区包含m个子文件;
10.按照交易类型和交易时间信息,对所述每一数据分区中的所述m个子文件进行数
据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;
11.按照所述交易时间信息,对所述m个数据分区中的所述n个待排序文件进行排序,得到n个排序后的文件;
12.基于差异比对算法,对所述n个排序后的文件进行数据比对。
13.一种文件的数据比对装置,包括:
14.处理模块,用于对获取到的对账文件进行等比拆分,得到n个拆分文件;
15.所述处理模块,用于按照所述对账文件关联的交易所具有的用户标识,将所述n个拆分文件分到m个数据分区中;其中,所述m个数据分区中每一数据分区对应一个用户标识,所述每一数据分区包含m个子文件;
16.所述处理模块,用于按照交易类型和交易时间信息,对所述每一数据分区中的所述m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;
17.所述处理模块,用于按照所述交易时间信息,对所述m个数据分区中的所述n个待排序文件进行排序,得到n个排序后的文件;
18.对账模块,用于基于差异比对算法,对所述n个排序后的文件进行数据比对。
19.本申请实施例提供一种设备,包括:
20.存储器,用于存储可执行指令;处理器,用于执行存储器中存储的可执行指令时,实现上述的方法。
21.本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现上述的方法。
22.本申请实施例具有以下有益效果:
23.通过对获取到的对账文件进行等比拆分,得到n个拆分文件;按照对账文件关联的交易所具有的用户标识,将n个拆分文件分到m个数据分区中;其中,m个数据分区中每一数据分区对应一个用户标识,每一数据分区包含m个子文件;按照交易类型和交易时间信息,对每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件;基于差异比对算法,对n个排序后的文件进行数据比对;也就是说,本申请先针对对账文件进行拆分,实现大文件分片解析处理,加快了处理性能,进一步地,针对分区中的文件进行排序,提高了文件处理的精准度,避免了直接处理无序文件较大概率导致处理失败的现象。
附图说明
24.图1是相关技术中的一种对账流程示意图;
25.图2本申请实施例提供的一种服务器的一个可选的架构示意图;
26.图3是本申请实施例提供的文件的数据比对方法的一个可选的流程示意图;
27.图4是本申请实施例提供的文件拆分的流程示意图;
28.图5是本申请实施例提供的文件拆分的结果示意图;
29.图6是本申请实施例提供的文件的数据比对方法的一个整体流程示意图;
30.图7是本申请实施例提供的数据清洗的结果示意图;
31.图8是本申请实施例提供的文件编号的结果示意图;
32.图9是本申请实施例提供的文件块内数据排序的流程示意图;
33.图10是本申请实施例提供的文件块内数据排序的结果示意图;
34.图11是本申请实施例提供的两个文件块之间数据排序的结果示意图;
35.图12是本申请实施例提供的三个文件块之间数据排序的结果示意图;
36.图13是本申请实施例提供的两个不同编号的文件之间数据排序的示意图;
37.图14是本申请实施例提供的从数据库导出文件的过程示意图;
38.图15是本申请实施例提供的从数据库导出文件的结果示意图;
39.图16是本申请实施例提供的从数据库导出文件的流程示意图;
40.图17是本申请实施例提供的不同分区中的对账文件与数据库文件的示意图;
41.图18是本申请实施例提供的对账文件与数据库文件的对比示意图;
42.图19是本申请实施例提供的对账文件与数据库文件之间去重保留差异文件的结果示意图;
43.图20是本申请实施例提供的对账文件与数据库文件之间去重保留差异文件的流程示意图;
44.图21是本申请实施例提供的通过计算sha1值去重文件块的流程示意图;
45.图22是本申请实施例提供的关联数据的键值对的相关信息的示意图;
46.图23是本申请实施例提供的对账的流程示意图。
具体实施方式
47.为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
48.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。除非另有定义,本申请实施例所使用的所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的含义相同。本申请实施例所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
49.下面说明本申请实施例提供的文件的数据比对设备的示例性应用,本申请实施例提供的文件的数据比对设备可以实施为笔记本电脑,平板电脑,台式计算机,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备),智能机器人等任意具有屏幕显示功能的终端,也可以实施为服务器。下面,将说明文件的数据比对设备实施为服务器时的示例性应用。
50.参见图2,图2是本申请实施例提供的服务器100的结构示意图,图2所示的服务器100包括:至少一个处理器110、至少一个网络接口120、用户接口130和存储器150。服务器100中的各个组件通过总线系统140耦合在一起。可理解,总线系统140用于实现这些组件之间的连接通信。总线系统140除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统140。
51.处理器110可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数
字信号处理器(dsp,digital signal processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
52.用户接口130包括使得能够呈现媒体内容的一个或多个输出装置131,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口130还包括一个或多个输入装置132,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
53.存储器150可以是可移除的,不可移除的或其组合。示例性地硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器150可选地包括在物理位置上远离处理器110的一个或多个存储设备。存储器150包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(read only memory,rom),易失性存储器可以是随机存取存储器(random access memory,ram)。本申请实施例描述的存储器150旨在包括任意适合类型的存储器。在一些实施例中,存储器150能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
54.操作系统151,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
55.网络通信模块152,用于经由一个或多个(有线或无线)网络接口120到达其他计算设备,示例性地网络接口120包括:蓝牙、无线相容性认证(wi

fi)、和通用串行总线(universal serial bus,usb)等;
56.输入处理模块153,用于对一个或多个来自一个或多个输入装置132之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
57.在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图2示出了存储在存储器150中的一种文件的数据比对装置154,该文件的数据比对装置154可以是服务器100中的文件的数据比对装置,其可以是程序和插件等形式的软件,包括以下软件模块:处理模块1541、对账模块1542,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
58.在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的文件的数据比对方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(application specific integrated circuit,asic)、dsp、可编程逻辑器件(programmable logic device,pld)、复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程门阵列(field

programmable gate array,fpga)或其他电子元件。
59.下面将结合本申请实施例提供的服务器100的示例性应用和实施,说明本申请实施例提供的文件的数据比对方法。参见图3,图3是本申请实施例提供的文件的数据比对方法的一个可选的流程示意图,将结合图3示出的步骤进行说明,
60.步骤s201,对获取到的对账文件进行等比拆分,得到n个拆分文件。
61.本申请实施例中,在获取到对账文件的情况下,按照大文件分片解析处理算法,将对账文件即大文件按块等比切分为子文件,得到n个拆分文件,切分的文件以换行符结束。
这里,将对账文件拆分为子文件,可以使用分布式系统并行计算的优势,同时对每一子文件进行处理,加快处理性能。
62.本申请其他实施例中,参见图4所示,如果对账文件比较小,例如小于10mb的文件,则无需拆分,待执行对账时,直接使用本申请提供的差异比对算法进行数据比对即可。一般情况下,对账文件都是大文件,例如大于10mb的文件,通过对大文件进行等比拆分,得到n个子文件,进而等待下一步处理,例如下述的按照客户维度进行文件分区即数据分区。
63.步骤s202,按照对账文件关联的交易所具有的用户标识,将n个拆分文件分到m个数据分区中。
64.其中,m个数据分区中每一数据分区对应一个用户标识,每一数据分区包含m个子文件。这里,服务器分配给用户的用户标识例如账号关联有数据分区的分区编号,如此可以实现按照客户维度将n个拆分文件分到m个数据分区中。
65.本申请实施例中,用户在注册帐号的时候,服务器生成一个全局唯一的帐号标识(identity document,id),帐号id包含用户所属的分区编号。例如某一用户的16位帐号id是0010000000000001,前三位001是分区编号,后13位是当前分区下自增序列,后续该用户的每个交易操作都需要用到这个帐号。
66.系统部署在服务器上,按照客户进行分区,例如现有40个分区,不同的客户在微众银行注册账号的时候,按照预设规则注册到40个分区中的一个分区,本申请对分区的数量不做具体地限定,在后续需要扩容的时候,可以根据需求增加更多的分区。示例性的,参考图5所示,图5中示出了将n个拆分文件中的某一拆分文件分到m个数据分区中的三个数据分区的示意,三个数据分区各自的分区编号为001、002和003。
67.也就是说,本申请在对获取到的对账文件进行等比拆分,得到n个拆分文件之后,逐行读取解析n个拆分文件中的每个拆分文件,按照用户帐号所属的系统分区进行文件分区,生成中间分片子文件,每个分区生成了一些子文件分片集合。这里,n个文件里的数据需要且分到m个分区,分区下的每个分片文件也是按某个大小存放的,这里以10mb为例。需要说明的是,这一步文件分区生成的文件是无序的,仅仅是按照用户帐号所属的分区做一个数据的拆分,到分区之后,先往一个文件写数据,如果文件大于设定的大小值,则新写第二个文件,直到所有的数据都写到指定分区的文件里面。
68.步骤s203,按照交易类型和交易时间信息,对每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件。
69.本申请考虑到对账文件一般是无序的,直接处理较大概率处理失败,需要二次或多次解析处理对账文件,然而,交易类型的处理顺序是有要求的,因此,本申请按照交易类型和交易时间信息,对m个分区的每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件,这里,按照交易类型和交易时间信息这两个因素对数据进行清洗归类,有效地提高了排序的效率。
70.步骤s204,按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件。
71.本申请实施例中,在数据清洗归类得到m个数据分区中的n个待排序文件的情况下,以交易时间信息为排序参考维度,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件排序后的每个文件也是按某个大小存放,这里以2mb为例,如此,通过对分
区内文件的排序提高了文件处理的精准度。
72.步骤s205,基于差异比对算法,对n个排序后的文件进行数据比对。
73.在一个可实现的实施例中,参照图6所示,图6示出了本申请的文件的数据比对方法的整体流程,首先将对账文件即大文件等比拆分为n个子文件;然后按照用户维度做分区,将这n个子文件进行数据分区分到m个数据分区中,每个分区包含有m个子文件,接着按分区将每个分区的m个子文件做数据清洗,得到每个分区有n个子文件,最后对按分区对n个子文件中每个子文件进行业务逻辑的数据处理如排序处理,进而对处理后的数据进行数据比对。本申请提供的先拆分后排序的方式对大文件进行处理,提高了文件读取效率以及对账的准确性。
74.本申请提供的文件的数据比对方法,通过对获取到的对账文件进行等比拆分,得到n个拆分文件;按照对账文件关联的交易所具有的用户标识,将n个拆分文件分到m个数据分区中;其中,m个数据分区中每一数据分区对应一个用户标识,每一数据分区包含m个子文件;按照交易类型和交易时间信息,对每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件;基于差异比对算法,对n个排序后的文件进行数据比对;也就是说,本申请先针对对账文件进行拆分,实现大文件分片解析处理,加快了处理性能,进一步地,针对分区中的文件进行排序,提高了文件处理的精准度,避免了直接处理无序文件较大概率导致处理失败的现象。
75.在一些实施例中,步骤s203按照交易类型和交易时间信息,对每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件,可以通过如下的步骤实现:
76.a11,读取m个子文件中每一子文件,遍历每一子文件中的每一行数据的交易类型和交易时间信息。
77.a12,对每一子文件中的所有行数据,按照具有第j类交易类型且交易时间信息为一小时的清洗归类条件进行处理,得到清洗归类后的所有文件。
78.其中,交易类型包括第j类交易类型。需要说明的是,清洗归类后的所有文件中的数据是无序的。本申请实施例中,按照交易时间对数据进行排序。
79.本申请实施例中,交易类型至少包括申购和赎回。
80.针对m个数据分区中的每一分区,读取每个子文件,遍历每一行,按照交易类型、交易时间范围如一小时对数据进行数据清洗归类,存储到不同的文件中。示例性的,本申请的对账文件中文件每一行的各个数据字段使用“|”分隔,这里列出一些关键字段,格式如下:交易流水号|用户帐号|交易类型|交易日期|交易时间|交易金额|交易份额|备注。
81.参见图7所示,对于某一分区内的文件处理,不同交易类型的数据按照交易时间段存放到指定文件中,时间段以一小时为例,其中,交易类型字段0为申购,1为赎回,非关键字段用**代替。图7示出了对于上述一分区内的文件进行清洗归类后的文件,例如包括:申购09小时交易数据,即交易类型为申购且交易时间为09小时的交易数据;赎回09小时交易数据,即交易类型为赎回且交易时间为09小时的交易数据;以及赎回10小时交易数据,即交易类型为赎回且交易时间为10小时的交易数据。
82.a13,对清洗归类后的所有文件进行等比拆分,得到w个拆分文件。
83.其中,w个拆分文件中包括待排序的具有第j类交易类型且交易时间信息为一小时的w个文件,所有交易类型对应的w个文件组成n个待排序文件。
84.这里,每个分区内的文件数据按照交易类型和小时范围归集到不同的文件里面。在数据清洗归类后,每个分区内的文件数据按照交易类型和小时范围归集到不同的文件里面。有些小时交易的数据量可能比较大,按照前面的文件切分原则,文件到了10mb大小之后,数据切分到第二个文件存储。所以同一个交易类型同一个小时文件下面可能会有w个文件即很多个交易文件。
85.在一些实施例中,步骤s204按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件,可以通过如下的步骤实现:
86.a21,对每一w个文件中的每一文件进行编号,得到编号1至编号w的多个文件。
87.对于需要排序某交易类型某一个小时的w个文件,每个文件10mb为例,对这w个一小时的文件进行编号1到w,如图8所示,交易类型为申购且交易时间为09点对应有w个文件,对这一w个文件中的每一文件进行编号,得到编号1至编号w的多个文件,包括:09申购小时交易数据文件1、09申购小时交易数据文件2、09申购小时交易数据文件3
……
09申购小时交易数据文件w。此时所有文件中的数据是无序的。本申请中,采用如下的命名方式给文件“{交易类型}_交易时间段_文件编号”命名。例如申购09小时的文件名为0_09_000001,赎回09小时的文件名为1_09_000001,编号使用6位的整数递增。
88.a22,按照文件内存映射方式针对编号1至编号w中编号i的文件,每次并行读取编号i的文件中预设大小的文件块,得到编号i的大小相同的多个文件块。
89.本申请实施例中,在排序的过程中,针对w个文件中具有不同编号的文件,并行排序处理。这里,以针对编号i的文件例如编号1的文件进行排序为例说明,其他编号的文件采用相同的排序方式。针对编号1的文件大小为10mb,每次读取2mb文件块,那么编号1的文件会等分为5块读取。
90.a23,读取编号i的大小相同的多个文件块中的文件块k,并行解析文件块k中每一行数据,得到文件块k中每一行数据的交易时间信息。
91.示例性的,读取编号1的大小相同的多个文件块中的文件块k,并行解析文件块k中每一行数据,得到文件块k中每一行数据的交易时间信息,这里,读取第一块2mb数据,逐行解析每一行数据,获取交易时间作为排序的依据。
92.a24,若读取到文件块k中第i+1行数据,将第i+1行数据与前i行数据进行比较,确定第i+1行数据在文件块k中的目标位置,并将第i+1行数据插入目标位置,得到排序后的文件块k。
93.其中,排序后的文件块k中位于目标位置的第i+1行数据的交易时间,在位于目标位置的前一相邻位置的第i行数据的交易时间之后,且在位于目标位置的后一相邻位置的第i+2行数据的交易时间之前。
94.这里,针对文件块k,每读取一行数据,就与文件块k中读取的行数据的前面的数据比较,找到大于等于前面时间同时小于后面时间的位置,将那一行数据插入到那个位置,后面的数据往后移一行。将排序后的文件块重新写编号1这个文件的第一个2mb文件块,实现针对文件块k的排序。
95.示例性的,参见图9所示,对于文件块1,文件块1包含6行数据,读取第一行数据后,
仅与后一行的数据进行比较,由于090002小于后一行092005所以第一行数据的位置不变;读取第二行数据后,092005大于090002的时间,与后一行的数据进行比较092005仍旧大于090102,说明应该将092005对应的行数据与090102对应的行数据的位置交换,交换后,读取第三行数据,092005大于090102且小于094002,继续读取后续的行数据进行排序,直至文件块1中每一行数据对应的时间大于等于前面时间同时小于后面时间,则针对文件块1排序完成,排序后的文件块1如图10所示。
96.本申请实施例中,针对编号i的大小相同的多个文件块中的文件块k中每一文件块进行排序后,得到多个排序后的文件块,例如对于文件块1得到了5个排序后的文件块。
97.针对编号1的文件块2、文件块3、文件块4和文件块5,也是采用与文件1相同的排序方法进行排序,将排序后的每一文件块k重新写编号i这个文件,将内排结果持久化到磁盘上,实现针对每一文件块的排序。
98.a25,基于多行匹配的排序方式,对编号i的排序后的所有文件块之间进行排序,得到编号i的排序后的所有文件块。
99.本申请实施例中,a24得到的是针对文件块k各自排序后的文件块,进一步地,使用多行匹配进行排序,实现对编号i的多个文件块之间的排序。
100.这里,对于文件块1和文件块2之间的排序,读取文件块1和文件块2,找到文件块2连续m行(这个m可能为1)在文件块1里面大于等于前面时间同时小于后面时间的位置,将这m行插入这个位置,同时将后面的行从第一个文件块往后下移,并且文件块1最后的m行会往文件块2下移m行,下移到文件块2的m行也反向比较,移到文件块2对应排序的位置放进去,实现两个文件块排序的目的。
101.示例性的,参照图11所示,读取文件块1和文件块2,找到文件块2连续2行在文件块1里面大于等于前面时间同时小于后面时间的位置,即文件块1中第4

5行所在的位置,将文件块2连续2行插入这个位置,同时将后面的行从第一个文件块往后下移,并且文件块1中移动后的第7

8行会往文件块2下移m行,下移到文件块2的2行也反向比较,找到文件块1中移动后的第7

8行在文件块2里面大于等于前面时间同时小于后面时间的位置,例如文件块1中移动后的第7行应该插入文件块2中的第4行,文件块1中移动后的第8行应该插入文件块2中的第6行,移到文件块2对应排序的位置放进去,实现两个文件块排序的目的。
102.这样,文件块1和文件块2再内存中就排序好了,把排序后的结果重新写回编号1的第一个和第二个2mb文件块。
103.同样的,参照图12所示,文件块3分别和文件块1和文件块2比较,找到合适的位置,将文件块3中的m行移到文件块1或文件块2块合适的位置,对应的,插入后多余的m行下移到文件块2或文件块3,若移到文件块2,排序后余下的m行继续下移到文件块3,最终达到三个文件块排序的目的。
104.文件块4和文件块5块也同样如此处理,文件块4分别和文件块1、文件块2和文件块3比较选择合适位置插入排序,文件块5分别和文件块1、文件块2、文件块3和文件块4比较,选择合适位置插入排序。最后编号1的多个文件块之间的排序就完成了。
105.a26,基于多行匹配的排序方式,对编号1至编号w的文件之间进行排序,得到n个排序后的文件。
106.本申请实施例中,编号2到编号w的文件使用编号1文件的排序方式进行排序,不同
编号的文件各自的排序可以并行处理,使用多线程或分布式集群等技术实现,这样就把w个文件都单独排序好了。
107.进一步地,扩展编号1排序的方法,针对多个文件块的排序,如下图13所示,文件编号2的文件块1的p行数据,与文件编号1的文件块1比较,若有合适位置,将p行数据插入该位置,接着文件编号1的所有文件块下移p行数据,移到文件编号2内,继续反向找到合适位置存入。循环往复,将文件编号1和文件编号2的所有文件块的所有数据行都排序好了。
108.进一步地,文件编号3到文件编号n也这样操作,和文件编号1和文件编号2比较,最终就完成了申购09小时文件的排序。
109.在一些实施例中,步骤s205基于差异比对算法,对n个排序后的文件进行数据比对,可以通过如下的步骤实现:
110.a31,按照编号i的排序后的所有文件块的首行交易时间字段和尾行交易字段,从数据库中导出与数据库文件i。
111.其中,编号i的排序后的所有文件块与数据库文件i具有相同的数据分区标识。
112.本申请实施例中,在对账的过程中,按照前述的数据清洗同样的规则从数据库导出数据,根据框定的数据类型、交易时间范围导出子文件。从数据库导出数据是,首先,读取分区内已排序好的文件的时间范围,以单个文件为例,直接读取文件首行和尾行的交易时间字段。其次,根据范围导出交易数据。
113.本申请实施例中,在从数据库导出文件的过程中,根据文件名可以获取交易类型,这样从数据库导出交易记录的时候就可以框定时间范围,同时使用数据库脚本还可以直接排序。
114.进一步地,对于导出的文件,可以按规则命名文件名,数据库导出的文件命名规则在前面的对账文件名之前加上“db_”前缀。例如分区内排序后对账文件名为“0_09_000001”,则数据库导出文件名为“db_0_09_000001”115.在一些实施例中,排序数据库导出文件有两种情况,第一种,如果一个分区只有一个数据库,那么步骤中数据库导出文件已经按规则排序好了。第二种,如果一个分区使用了多个数据库,那么一个对账文件对应的数据库导出文件就有多个,示例性的,参照图14所示,以三个数据库为例,即对账文件名为“0_09_000001”对应数据库导出文件为“db1_0_09_000001”、“db2_0_09_000001”、“db3_0_09_000001”。此时,对这三个文件的数据行做排序和合并成一个文件。这里使用前面用到的文件排序算法即可。
116.示例性的,参照图15和图16所示,按照编号1的所有文件块的首行交易时间字段090002和尾行交易时间字段095716,从数据库中导出数据库文件1,导出的数据库文件1的文件名为db_09_000001。这里,在导出之前,还可以判断交易类型,如果交易类型不符,则停止导出。
117.a32,基于差异比对算法计算编号i的排序后的所有文件块的第一散列值。
118.本申请实施例中,差异比对算法包括但不限于消息摘要算法md5。
119.a33,基于差异比对算法计算数据库文件i的第二散列值。
120.本申请实施例中,使用基于消息摘要算法的差异比对算法,对于图17所示的各个分区,将每个分区里面一一对应的文件比对差异,筛选出有差异的文件,参照图18所示,对各个文件使用消息摘要算法md5计算一个值h,以0_09_000001和db_0_09_000001两个文件
为例,若对账文件0_09_000001和数据库导出文件db_0_09_000001计算出的h比较相同的,说明对账是一致的,不需要处理,直接排除掉。
121.若对账文件0_09_000001和数据库导出文件db_0_09_000001计算出的h比较不相同,说明对账不一致,需要继续下一步处理。
122.a34,若第一散列值与第二散列值不同,确定编号i的排序后的所有文件块与数据库文件i不同。
123.a35,基于数据匹配算法,从数据库文件i中去掉与编号i的排序后的所有文件块中相同的文件块,筛选出数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块。
124.这里,经过对文件md5值的比较之后,完全一致的文件被去重掉了,剩下的是对账文件和数据库导出文件有差异的文件。在有差异的文件里面,因为是排序过的,可能大部分连续行的块也是相等的,这里就可以使用文件块数据匹配的方式,去掉相同的文件块,留下差异部分。
125.本申请实施例中,经过对文件md5值的比较之后,完全一致的文件被去重掉了,剩下的是对账文件和数据库导出文件有差异的文件。
126.a36,确定数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块之间的差异信息,并基于差异信息进行数据比对。
127.在一些实施例中,a35基于数据匹配算法,从数据库文件i中去掉与编号i的排序后的所有文件块中相同的文件块,筛选出数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块,可以通过如下的步骤实现:
128.a351,若编号i的排序后的所有文件块与数据库文件i中包含的数据的行数不同,至少一次去掉编号i的排序后的所有文件块和数据库文件i中的首行数据和尾行数据,得到编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块。
129.其中,编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块具有相同的交易时段。
130.a352,基于差异比对算法计算编号i的去行后的排序后的所有文件块的第三散列值。
131.a353,基于差异比对算法计算数据库文件i的去行后的文件块的第四散列值。
132.a354,若第三散列值与第四散列值不同,确定编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块不同。
133.a355,基于数据匹配算法,从数据库文件i的去行后的文件块中去掉与编号i的去行后的排序后的所有文件块中相同的文件块,筛选出数据库文件i的去行后的文件块中的第三差异文件块和编号i的去行后的排序后的所有文件块中的第四差异文件块。
134.a356,至少一次去掉编号i的第四差异文件块和数据库文件i的第三差异文件块的尾行数据,筛选出数据库文件i中的第一差异文件块和编号i的第二差异文件块;其中,数据库文件i中的第一差异文件块和编号i的第二差异文件块具有相同的尾行交易时间。
135.参照图19、图20和图21所示,1)、以对账文件0_09_0000002和数据库导出文件db_0_09_000002为例,先比较两个文件的行数,一般可能存在如下三种情况:
136.第一种情况是,0_09_0000002文件行数大于db_0_09_000002。
137.第二种情况是,0_09_0000002文件行数等于db_0_09_000002。
138.第三种情况是,0_09_0000002文件行数小于db_0_09_000002。
139.2)、继续比较两个文件首行,去掉两个文件中首行交易时间较小的行
140.3)、接着比较两个文件尾行,去掉两个文件中尾行交易时间较大的行
141.4)、多次去掉首行和尾行的操作之后,直到两个文件首行交易时间相等,尾行交易时间也相等,并且两个文件数据的行数相等时,使用消息摘要算法sha1取两个文件的sha1并比较。
142.5)、如果两个sha1值相等,去掉两个文件中相等的文件块,留下两个文件当中前面被排除调的行。到步骤7)
143.6)、如果两个sha1值不相等,两个文件同时去掉尾行,继续比较尾行的交易时间,重新等到两个文件尾行交易时间相等,行数相等的场景,回到步骤5)
144.7)、循环步骤1)到步骤6),直到没有相同的文件块。
145.进一步地,可以使用连个关联数组分别存储两个差异文件的sha1值和数据行。
146.在一些实施例中,a36确定数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块之间的差异信息,并基于差异信息进行数据比对,可以通过如下的步骤实现:
147.a361,基于差异比对算法计算数据库文件i中的第一差异文件块的第五散列值,并将第五散列值作为键且将数据库文件i中的第一差异文件块的数据行作为值记录为数据库文件i的第一关联数组。
148.a362,基于差异比对算法计算编号i的第二差异文件块的第六散列值,并将第六散列值作为键且将编号i的第二差异文件块的数据行作为值记录为编号i的第二关联数组。
149.a363,在每一分区内,将数据库文件i的第一关联数组的键与编号i的第二关联数组的键比较,去掉两个关联数组中键相同的数据行,得到数据库文件i的第三关联数组与编号i的第四关联数组。
150.其中,数据库文件i的第三关联数组中的键为每行数据的交易流水号且值为数据行;编号i的第四关联数组中的键为每行数据的交易流水号且值为数据行。
151.示例性的,如图22所示,得到键为每行数据的交易流水号且值为数据行的关联数组。
152.本申请实施例中,编号i的第二关联数组用关联数组a表示,数据库文件i的第一关联数组用关联数组b表示,编号i的第四关联数组用关联数组c表示,数据库文件i的第三关联数组用关联数组d表示。
153.a364,确定数据库文件i的第三关联数组与编号i的第四关联数组之间的差异信息,并基于差异信息进行数据比对。
154.在一些实施例中,a364确定数据库文件i的第三关联数组与编号i的第四关联数组之间的差异信息,并基于差异信息进行数据比对,可以通过如下的步骤实现:
155.a3641,若编号i的第四关联数组中存在数据库文件i的第三关联数组中不存在的第一键,确定差异信息表征对账文件有数据库没有的数据,基于第一键确定编号i的第四关联数组对应的数据行,在数据库文件i的第三关联数组中增加编号i的第四关联数组对应的数据行。
156.a3642,若编号i的第四关联数组中不存在数据库文件i的第三关联数组中存在的第二键,确定差异信息表征对账文件没有数据库有的数据,基于第二键确定数据库文件i的第三关联数组对应的数据行,并删除数据库文件i的第三关联数组对应的数据行。
157.a3643,若编号i的第四关联数组中存在数据库文件i的第三关联数组中存在的第三键,确定差异信息表征对账文件和数据库均存在交易数据,且交易数据不一致,将编号i的第四关联数组中第三键对应的数据行替换为编号i的第四关联数组中第三键对应的数据行。
158.在一个可实现的实施例中,参照图23所示,以关联数组a、关联数组b、关联数组c以及关联数组d,针对本申请对账的实现作出进一步的说明,这里,将所有的文件处理完之后,每个分区只剩下对账文件和数据库文件比较后的两个差异的关联数组。将对账文件产生的差异关联数组标记为关联数组a,数据库文件产生的差异关联数组标记为关联数组b。到这里,数据已经很少了,但是依旧有比较小的几率可能存在相同的文件行。
159.在每个分区内,分别遍历两个关联数组。将所有关联数组a的key与所有关联数组b的key比较,排除两个关联数组中key相同的数据。将两个关联数组a和b中额剩余数据重新映射为新的关联数组c和关联数组d,取每行数据唯一的交易流水号作为key,数据行作为value。
160.将所有关联数组c的key与所有关联数组d的key比较,存在三种情况:
161.第一种,关联数组c存在,关联数组d不存在的key,说明对账文件有数据库没有的数据,需要使用key再关联数组c对应的数据行,将key关联的数组c对应的数据行增加到关联数组d中,如此,实现在关联数组d中新增交易流水号,以及针对新增交易流水号增加交易数据。
162.第二种,关联数组c不存在,关联数组d存在的key,说明对账文件没有数据库有的数据,需要使用key再关联数组d对应的数据行,并删除key关联的数组d对应的数据行,如此,实现对数据库中多余的且不正确的交易信息的删除。
163.第三种,关联数组c存在,关联数组d也存在的key,说明对账文件和数据库都存在的数据,但是交易数据不一致(因为一致的数据前面的算法已经去掉了),需要使用key再关联数组c对应的数据行,将key关联的数组d对应的数据行,替换为key关联的数组c对应的数据行,如此,确保数据库中的数据与对账文件中的数据是一致的。
164.由上述可知,本申请的文件与数据差异比对算法,采用大文件分片解析处理算法中的排序,以及分区的设计,方便使用分布式系统并行计算,文件块数据匹配效率会比较高;同时文件处理的正确性高,大大降低了文件处理失败的几率。
165.下面继续说明本申请实施例提供的文件的数据比对装置154实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器150的文件的数据比对装置154中的软件模块可以是服务器100中的文件的数据比对装置,包括:
166.处理模块1541,用于对获取到的对账文件进行等比拆分,得到n个拆分文件;
167.处理模块1541,用于按照对账文件关联的交易所具有的用户标识,将n个拆分文件分到m个数据分区中;其中,m个数据分区中每一数据分区对应一个用户标识,每一数据分区包含m个子文件;
168.处理模块1541,用于按照交易类型和交易时间信息,对每一数据分区中的m个子文
件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;
169.处理模块1541,用于按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件;
170.对账模块1542,用于基于差异比对算法,对n个排序后的文件进行数据比对。
171.在一些实施例中,处理模块1541,用于读取m个子文件中每一子文件,遍历每一子文件中的每一行数据的交易类型和交易时间信息;对每一子文件中的所有行数据,按照具有第j类交易类型且交易时间信息为一小时的清洗归类条件进行处理,得到清洗归类后的所有文件;其中,交易类型包括第j类交易类型;对清洗归类后的所有文件进行等比拆分,得到w个拆分文件;其中,w个拆分文件中包括待排序的具有第j类交易类型且交易时间信息为一小时的w个文件,所有交易类型对应的w个文件组成n个待排序文件。
172.在一些实施例中,处理模块1541,用于对每一w个文件中的每一文件进行编号,得到编号1至编号w的多个文件;按照文件内存映射方式针对编号1至编号w中编号i的文件,每次并行读取编号i的文件中预设大小的文件块,得到编号i的大小相同的多个文件块;读取编号i的大小相同的多个文件块中的文件块k,并行解析文件块k中每一行数据,得到文件块k中每一行数据的交易时间信息;若读取到文件块k中第i+1行数据,将第i+1行数据与前i行数据进行比较,确定第i+1行数据在文件块k中的目标位置,并将第i+1行数据插入目标位置,得到排序后的文件块k;其中,排序后的文件块k中位于目标位置的第i+1行数据的交易时间,在位于目标位置的前一相邻位置的第i行数据的交易时间之后,且在位于目标位置的后一相邻位置的第i+2行数据的交易时间之前;基于多行匹配的排序方式,对编号i的排序后的所有文件块之间进行排序,得到编号i的排序后的所有文件块;基于多行匹配的排序方式,对编号1至编号w的文件之间进行排序,得到n个排序后的文件。
173.在一些实施例中,对账模块1542,用于按照编号i的排序后的所有文件块的首行交易时间字段和尾行交易字段,从数据库中导出与数据库文件i;其中,编号i的排序后的所有文件块与数据库文件i具有相同的数据分区标识;基于差异比对算法计算编号i的排序后的所有文件块的第一散列值;基于差异比对算法计算数据库文件i的第二散列值;若第一散列值与第二散列值不同,确定编号i的排序后的所有文件块与数据库文件i不同;基于数据匹配算法,从数据库文件i中去掉与编号i的排序后的所有文件块中相同的文件块,筛选出数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块;确定数据库文件i中的第一差异文件块和编号i的排序后的所有文件块中的第二差异文件块之间的差异信息,并基于差异信息进行数据比对。
174.在一些实施例中,对账模块1542,用于若编号i的排序后的所有文件块与数据库文件i中包含的数据的行数不同,至少一次去掉编号i的排序后的所有文件块和数据库文件i中的首行数据和尾行数据,得到编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块;其中,编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块具有相同的交易时段;基于差异比对算法计算编号i的去行后的排序后的所有文件块的第三散列值;基于差异比对算法计算数据库文件i的去行后的文件块的第四散列值;若第三散列值与第四散列值不同,确定编号i的去行后的排序后的所有文件块和数据库文件i的去行后的文件块不同;基于数据匹配算法,从数据库文件i的去行后的文件块中去掉与编号i的去行后的排序后的所有文件块中相同的文件块,筛选出数据库文件i的去行后的文件块
中的第三差异文件块和编号i的去行后的排序后的所有文件块中的第四差异文件块;至少一次去掉编号i的第四差异文件块和数据库文件i的第三差异文件块的尾行数据,筛选出数据库文件i中的第一差异文件块和编号i的第二差异文件块;其中,数据库文件i中的第一差异文件块和编号i的第二差异文件块具有相同的尾行交易时间。
175.在一些实施例中,对账模块1542,用于基于差异比对算法计算数据库文件i中的第一差异文件块的第五散列值,并将第五散列值作为键且将数据库文件i中的第一差异文件块的数据行作为值记录为数据库文件i的第一关联数组;基于差异比对算法计算编号i的第二差异文件块的第六散列值,并将第六散列值作为键且将编号i的第二差异文件块的数据行作为值记录为编号i的第二关联数组;在每一分区内,将数据库文件i的第一关联数组的键与编号i的第二关联数组的键比较,去掉两个关联数组中键相同的数据行,得到数据库文件i的第三关联数组与编号i的第四关联数组;其中,数据库文件i的第三关联数组中的键为每行数据的交易流水号且值为数据行;编号i的第四关联数组中的键为每行数据的交易流水号且值为数据行;确定数据库文件i的第三关联数组与编号i的第四关联数组之间的差异信息,并基于差异信息进行数据比对。
176.在一些实施例中,对账模块1542,用于若编号i的第四关联数组中存在数据库文件i的第三关联数组中不存在的第一键,确定差异信息表征对账文件有数据库没有的数据,基于第一键确定编号i的第四关联数组对应的数据行,在数据库文件i的第三关联数组中增加编号i的第四关联数组对应的数据行;若编号i的第四关联数组中不存在数据库文件i的第三关联数组中存在的第二键,确定差异信息表征对账文件没有数据库有的数据,基于第二键确定数据库文件i的第三关联数组对应的数据行,并删除数据库文件i的第三关联数组对应的数据行;若编号i的第四关联数组中存在数据库文件i的第三关联数组中存在的第三键,确定差异信息表征对账文件和数据库均存在交易数据,且交易数据不一致,将编号i的第四关联数组中第三键对应的数据行替换为编号i的第四关联数组中第三键对应的数据行。
177.本申请提供的文件的数据比对装置,通过对获取到的对账文件进行等比拆分,得到n个拆分文件;按照对账文件关联的交易所具有的用户标识,将n个拆分文件分到m个数据分区中;其中,m个数据分区中每一数据分区对应一个用户标识,每一数据分区包含m个子文件;按照交易类型和交易时间信息,对每一数据分区中的m个子文件进行数据清洗归类,并对清洗归类后的所有文件进行等比拆分,得到n个待排序文件;按照交易时间信息,对m个数据分区中的n个待排序文件进行排序,得到n个排序后的文件;基于差异比对算法,对n个排序后的文件进行数据比对;也就是说,本申请先针对对账文件进行拆分,实现大文件分片解析处理,加快了处理性能,进一步地,针对分区中的文件进行排序,提高了文件处理的精准度,避免了直接处理无序文件较大概率导致处理失败的现象。
178.需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
179.本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法。
180.在一些实施例中,存储介质可以是计算机可读存储介质,例如,铁电存储器(fram,
ferromagnetic random access memory)、只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read only memory)、可擦除可编程只读存储器(eprom,erasable programmable read only memory)、带电可擦可编程只读存储器(eeprom,electrically erasable programmable read only memory)、闪存、磁表面存储器、光盘、或光盘只读存储器(cd

rom,compact disk

read only memory)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
181.在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
182.作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(超文本标记语言,hyper text markup language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
183.以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1