掌桥专利:专业的专利平台
掌桥专利
首页

一种文件处理方法及系统

文献发布时间:2023-06-19 10:27:30


一种文件处理方法及系统

技术领域

本发明涉及计算机技术领域,更具体地说,涉及一种文件处理方法及系统。

背景技术

随着社会的不断发展,用户在银行办理的业务越来越多,随之产生了大量的交易文件,银行工作人员每天需要通过份额管理系统将大量的交易文件写入数据库。

在现有技术中,在从服务器中下载需要处理的交易文件后,对交易文件进行解压和解密,得到交易明文文件;通过份额管理系统对得到的交易明文文件进行单线程逐行读取交易明文文件中的每条用户交易数据至内存中,并且,每当读取一条用户交易数据至内存时,就根据内存中该条用户交易数据生成相应的SQL语句,以便根据生成的SQL语句将与其对应的用户交易数据写入数据库。

但是,所下载的交易文件包含大量的用户交易数据,逐行读取对交易明文文件中的用户交易数据需要较长的时间,并且,每读取一条用户交易数据就要根据所读取的用户交易数据生成相应的SQL语句,才能将所读取用户交易数据写入数据库,与数据库连接的次数过多,导致份额管理系统的性能降低。

发明内容

有鉴于此,本发明提供一种文件处理方法及系统,以提高文件处理系统处理交易文件的效率和性能为目的。

本发明第一方面公开一种文件处理方法,应用于文件处理系统,所述方法包括:

对服务器中的预设目录进行轮询,当查询到所述预设目录下存在交易文件时,下载所述交易文件,并对所述交易文件进行解压和解密,得到交易明文文件,其中,所述交易明文文件包括多条用户交易数据;

调用文件拆分进程每次从所述交易明文文件拆分出预设长度的文件块,并将所述文件块存储至预先设置的任一子文件,直至拆分完所述交易明文文件,其中,所述子文件的数量是根据校验进程的数量预先设置的,每个所述子文件中存储的所述文件块的数量相同;

并行执行每个所述校验进程读取一个所述子文件,并对所读取的所述子文件中的每条所述用户交易数据进行校验,直至读取完所有所述子文件为止;

若每个所述子文件中的每条所述用户交易数据均校验通过,利用预设的SQL语句模板生成与每个所述子文件中每条所述用户交易数据相关联的SQL语句,批量执行预设数量的所述SQL语句将相关联的所述用户交易数据写入数据库,直至将全部所述用户交易数据写入所述数据库。

可选的,所述对所述交易文件进行解压和解密,得到交易明文文件,包括:

对所述交易文件进行解压,得到密文文件;

每次对从所述密文文件中去读的预设长度的密文进行解密,直至对所述密文文件解密完成,得到交易明文文件。

可选的,所述调用文件拆分进程每次从所述交易明文文件拆分出预设长度的文件块,并将所述文件块存储至预先设置的任一子文件,直至拆分完所述交易明文文件,包括:

调用文件拆分进程每次从所述交易明文文件中拆分出预设长度的的文件块,并将所述文件块映射入所述文件拆分进程的进程地址空间,以便将所述进程地址空间中映射的所述文件块存储至预先设置的任一子文件,直至拆分完所述交易明文文件;

其中,所述预设长度是根据所述文件拆分进程的进程地址空间的大小预先设置的。

可选的,所述对所述用户交易数据进行校验,包括:

从所述用户交易数据中获取用户基本信息;

根据所述用户基本信息,从所述服务器中获取与所述用户基本信息对应的目标用户交易数据;

判断所述用户交易数据与所述目标用户交易数据是否一致;

若一致,确定所述用户交易数据校验通过;

若不一致,确定所述用户交易数据校验失败。

可选的,所述方法还包括:

若存在校验失败的所述用户交易数据,输出相应的报警信息,并将所述报警信息记录在所述文件处理系统的日志文件中。

本发明第二方面公开一种文件处理系统,所述系统包括:

文件下载解压解密模块,用于对服务器中的预设目录进行轮询,当查询到所述预设目录下存在交易文件时,下载所述交易文件,并对所述交易文件进行解压和解密,得到交易明文文件,其中,所述交易明文文件包括多条用户交易数据;

文件拆分模块,用于调用文件拆分进程每次从所述交易明文文件拆分出预设长度的文件块,并将所述文件块存储至预先设置的任一子文件,直至拆分完所述交易明文文件,其中,所述子文件的数量是根据校验进程的数量预先设置的,每个所述子文件中存储的所述文件块的数量相同;

并行文件解析模块,用于并行执行每个所述校验进程读取一个所述子文件,并对所读取的所述子文件中的每条所述用户交易数据进行校验,直至读取完所有所述子文件为止;

批量导入模块,用于若每个所述子文件中的每条所述用户交易数据均校验通过,利用预设的SQL语句模板生成与每个所述子文件中每条所述用户交易数据相关联的SQL语句,批量执行预设数量的SQL语句将相关联的所述用户交易数据写入数据库,直至将全部所述用户交易数据写入所述数据库。

可选的,所述文件下载解压解密模块,包括:

解压单元,用于对所述交易文件进行解压,得到密文文件;

解密单元,用于每次对从所述密文文件中去读的预设长度的密文进行解密,直至对所述密文文件解密完成,得到交易明文文件。

可选的,所述文件拆分模块,包括:

文件拆分单元,用于调用文件拆分进程每次从所述交易明文文件中拆分出预设长度的的文件块,并将所述文件块映射入所述文件拆分进程的进程地址空间,以便将所述进程地址空间中的所述文件块存储至预先设置的任一子文件,直至拆分完所述交易明文文件;

其中,所述预设长度是根据所述文件拆分进程的进程地址空间的大小预先设置的。

可选的,所述并行文件解析模块,包括:

第一获取单元,用于从所述用户交易数据中获取用户基本信息;

第二获取单元,用于根据所述用户基本信息,从所述服务器中获取与所述用户基本信息对应的目标用户交易数据;

判断单元,用于判断所述用户交易数据与所述目标用户交易数据是否一致;

第一确定单元,用于若一致,确定所述用户交易数据校验通过;

第二确定单元,用于若不一致,确定所述用户交易数据校验失败。

可选的,所述装置还包括:

输出单元,用于若存在校验失败的所述用户交易数据,输出相应的报警信息,并将所述报警信息记录在所述文件处理系统的日志文件中。

本发明提供一种文件处理方法及系统,在对服务器中的预设目录进行轮询,当查询到预设目录下存在交易文件时,下载交易文件,并对所下载的交易文件进行解压和解密,得到交易明文文件后,调用文件拆分进程每次从交易明文文件拆分出预设长度的文件块,并将文件块存储至预先设置的任一子文件,直至拆分完交易明文文件,其中,子文件的数量是根据校验进程的数量预先设置的;并行执行每个校验进程读取内存中的一个子文件,直至读取完所有子文件为止,不用逐行读取对交易明文文件中的用户交易数据,从而提高了处理交易文件的效率;在每个子文件中的每条用户交易数据均校验通过的情况下,利用预设的SQL语句模板就能生成与每个子文件中每条用户交易数据相关联的SQL语句,节省了SQL语句的生成时间,最后批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库,不仅能够提高的交易文件的处理效率,还能够减少与数据库连接的次数,从而提高了文件处理系统的性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种文件处理系统的结构示意图;

图2为本发明实施例提供的一种内容映射技术的示意图;

图3为本发明实施例提供的一种并行文件解析模块的核心结构图;

图4为本发明实施例提供的一种Spring Batch工具的结构示意图;

图5为本发明实施例提供的一种文件处理方法的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

为了便于理解本发明的技术方案,对本发明中出现的技术术语进行说明:

3DES算法:三重数据加密(Triple DES,3DES)算法,是一种对称密钥加密块密码,相当于是对每个数据块应用三次数据加密标准算法。

SFTP:安全文件传送协议(SSH File TransferProtocol,SFTP),可以为传输文件提供一种安全的网络加密算法,SFTP服务器即通过SFTP协议来完成文件传输的服务器。

OOM:内存溢出(Out OfMemory,OOM),指程序申请过多内存而导致虚拟机压力过大,分配不出内存空间而报出的错误。

JavaNIO:一种新式的I/O标准。标准的I/O基于字节流和字符流进行操作,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,通过通道读入缓冲区或由缓冲区写入通道两种方式来高效完成文件的处理。

Spring Batch:Spring的子项目,一种轻量级的、完善的批量处理框架,旨在帮助企业建立健壮、高效的批量处理应用。

MyBatis-Foreach:Mybatis的一种语法标签,可以通过动态生成SQL的方式来提升数据库操作性能。

Spring JdbcTemplate:JdbcTemplate是Spring对JDBC的封装,它处理了资源的连接与释放,使得JDBC易于使用。

预设的SQL语句模板:在多数情况下,预设的SQL语句模板会被反复调用执行,或每次执行的时候只有个别的值不同,预设的SQL语句模板可将此类SQL语句中的值用占位符代替,可以实现一次编译,多次运行,省去了解析优化过程

参见图1,示出了本发明实施例提供的一种文件处理系统的结构示意图,该文件处理系统100包括文件下载解压解密模块101、文件拆分模块102、并行文件解析模块103和批量导入模块104。

文件下载解压解密模块101,用于对服务器中的预设目录进行轮询,当查询到预设目录下存在交易文件时,下载交易文件,并对交易文件进行解压和解密,得到交易明文文件,其中,交易明文文件包括多条用户交易数据。

在本申请文件中,文件处理系统100可以为份额管理系统。

在本申请实施例中,在文件处理系统100中集成文件下载解压解密模块101,在文件处理系统100中集成的文件下载解压解密模块101可以为具有文件下载、解压、3DES算法等多个功能的文件下载解压解密器。其中,3DES算法解密的方式是通过文件IO流的方式循环从密文文件中读取一定长度的密文并对读取的密文进行解密,直至对密文文件解密完成,这样可以避免对密文文件解密的过程中出现内存过载OOM的情况。

可选的,文件下载解压解密模块101在从服务器的预设目录中查询到交易文件后,对交易文件进行解密,得到密文文件;每次从密文文件中读取预设长度的密文,并对读取的密文进行解密,直至对该密文文件解密完成,得到交易明文文件。

需要说明的是,还可以预先设置对服务器中预设目录进行轮询时间,比如,每隔5分钟就对服务器中的预设目录进行轮询。

比如,预先设置对服务器中预设目录进行轮询时间为每隔1分钟就对服务器中的预设目录进行轮询,当文件利用文件下载解压解密模块101为文件下载解压解密器时,文件下载解压解密器通过SFTP连接程序登录SFTP服务器后,通过文件下载解压解密器每隔1分钟对预先在SFTP服务器中设置的预设目录进行轮询,当查询到预设目录中存在交易文件时下载该交易文件,并对所下载的交易文件进行解密,得到密文文件,利用3DES算法从密文文件中读取预设长度的密文并对读取的密文进行解密,直至对密文文件解密完成。

文件拆分模块102,用于调用文件拆分进程每次从交易明文文件拆分出预设长度的文件块,并将文件块存储至预先设置的任一子文件,直至拆分完交易明文文件,其中,子文件的数量是根据校验进程的数量预先设置的,每个子文件中存储的文件块的数量相同。

在本申请实施例中,通过在文件处理系统100中集成文件拆分模块102,文件拆分模块102中预先设置有文件拆分进程,以及根据预先设置的文件拆分进程的进程地址空间大小预先设置拆分出的每个文件块的预设映射长度,以便根据预先设置的文件拆分进程的映射比确定每个文件块的预设长度。

需要说明的是,预先设置的拆分出的文件块的预设映射长度不大于预先设置的文件拆分进程的进程地址空间的大小,预先设置的拆分出的文件块的预设长度为预先设置的拆分出的文件块的预设映射长度比上预先设置的文件拆分进程的映射比。比如,预先设置的文件拆分进程的进程地址空间大小为2M,则预先设置的拆分出的文件块的预设映射长度可以为1.5M,若预先设置的文件拆分进程的映射比为1:10,则预先设置的文件块的预设长度为15M。可以根据实际应用进行设置,本申请实施例不加以限定。

在本申请实施例中,还可以根据交易明文文件的大小,预先计算拆分出的文件块的数量,再根据预先设置的子文件的数量确定每个子文件中包含文件块的数量,即拆分出的每个子文件的长度。其中,预先设置的拆分出的文件块的预设映射长度不大于预先设置的文件拆分进程的进程地址空间的大小。

比如,预先设置的文件拆分进程的进程地址空间大小为2M,映射比为1:10,若预先设置的文件块的映射长度为1.6,交易明文文件的大小为10000M,则可以确定预先设置的文件块的预设长度为16M,可以拆分出625个文件块,若预先设置的子文件的个数为25,则每个子文件存储的文件块的个数为25,即每个子文件的平均长度为400M。

进一步需要说明的,可以根据校验进程的数量预先在文件处理系统的文件磁盘中设置多个子文件。比如,若校验进程的数量为25个,则可以预先在文件处理系统的文件磁盘中设置25个子文件。

在本申请实施例中,在文件处理系统100中集成的文件拆分模块102可以为高效的NIO文件拆分器,高效的NIO文件拆分器通过javaNIO内存映射技术来进行文件拆分。其中,内容映射技术是一种内存映射文件的方法,如图2所示,将一个文件块映射到应用进程(文件拆分进程)的进程地址空间,从而实现文件块和应用进程(文件拆分进程)的进程地址空间中一段虚拟地址(文件块的存储映射部分)的一一映射关系,在实现这样的映射关系后,应用进程(文件拆分进程)就可以采用指针的方式读写操作交易明文文件中与应用进程(文件拆分进程)的进程地址空间中的虚拟地址对应的一段文件块了,从而自动读取文件块存储至对应的子文件上。

可选的,文件拆分模块102通过调用预先设置的文件拆分进程每次从交易明文件中拆分出预设长度的文件块,并将所拆分出的文件块的映射入文件拆分进程的进程地址空间,以便将该进程地址空间中映射的文件块存储至预先设置的任一子文件中,直至拆分完该交易明文文件。

比如,预先设置的子文件的数量为25,预先设置的文件拆分进程的进程地址空间大小为2M,映射比为1:10,预先设置的文件块的映射长度为1.6,交易明文文件的大小为10000M,则可以确定预先设置的文件块的预设长度为16M,在文件处理系统100中集成的文件拆分模块102为高效的NIO文件拆分器,高效的NIO文件拆分器通过调用应用进程(文件拆分进程)每次从交易明文文件中拆分与16M的文件块,并将所拆分出的文件块映射入如图2所示的子文件的存储映射部分(进程地址空间中的虚拟地址),以便将虚拟地址中映射的文件块存储至子文件中,直至拆分完交易明文文件,得到大小相同的25个子文件,且每个子文件中存储有25个大小相同的文件块。

并行文件解析模块103,用于并行执行每个校验进程读取一个子文件,并对所读取的子文件中的每条用户交易数据进行校验,直至读取完所有子文件为止。

在本申请实施例中,通过在文件处理系统100中集成并行文件解析模块103,具体的,可以通过利用SpringBatch工具的开箱即用组件构建并行文件解析模块103,利用Spring Batch工具构建的并行文件解析模块103的核心结构分为三层:应用层、核心层、基础架构层,如图3所示,利用Spring Batch工具构建的并行文件解析模块具有支持更多种类的交易文件,并且具有对并发读取的能力。

其中,Spring Batch工具是使用Java语言并基于Spring框架为基础开发的,开发人员使用Spring Batch编写的所有自定义的批处理作业和自定义代码,核心层包括JobLauncher、Job和Step,应用层和核心层都建立在通用基础架构之上,基础结构包含通用的读(ItemReader)、写(ItemWriter)和服务处理(ItemProcessor)。在利用Spring Batch工具的开箱即用组件构建并行文件解析模块103时,引用spring-batch-infrastructure和spring-batch-core包,即可使用基础架构层及核心层内容,然后基于这两层进行应用业务逻辑从而实现并行文件解析模块103的构建。

SpringBatch工具的结构如图4所示,通过把任务抽象为Job(批处理任务)和Step(一个任务的具体的执行逻辑单位),一个Job由多个Step来完成,每个step对应一个ItemReader、ItemProcessor及ItemWriter,Job是通过JobLaunche(作业执行器)来启动,Job及Job的运行结果和状态、每个Step的运行结果和状态,都会保存在JobRepository(作业仓库)中。

可选的,并行文件解析模块103并行执行每个校验进程(Step)的ItemReader读取内存中的一个子文件,同时通过每个校验进程(Step)对应的ItemProcessor对所读取的子文件中的每条用户交易数据进行校验,直至读取完内存中的子文件,并对最后读取的子文件中的每条用户交易数据校验完为止。其中,每个校验进程(Step)对应的ItemProcessor对所读取的子文件中的每条用户交易数据进行校验得到的校验结果还可以通过各个校验进程(Step)对应的ItemWriter保存在JobRepository中。

可选的,对所读取的每个子文件中的每条用户交易数据进行校验的过程可以为:从该用户交易数据中获取用户基本信息,以便根据用户基本信息从服务器中获取与该用户基本信息对应的目标用户交易数据,并判断该用户交易数据与目标用户交易数据是否一致,在用户交易数据与目标用户交易数据一致的情况下,确定该用户交易数据通过;在用户交易数据与目标用户交易数据不一致的情况下,确定该用户交易数据不通过,并输出与该用户交易数据相应的报警信息,并将报警信息记录在文件处理系统100的日志文件中。

批量导入模块104,用于若每个子文件中的每条用户交易数据均校验通过,利用预设的SQL语句模板生成与每个子文件中每条用户交易数据相关联的SQL语句;批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库。

在本申请实施例中,在文件处理系统100中集成批量导入模块104,在文件处理系统100中集成的批量导入模块104可以为高效的批量导入工具。其中,批量导入工具是一个Java持久化框架,通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

批量导入工具内置的ExecutorType(执行类型)有3种,simple模式(批量导入工具默认的模式)、reuse模式、batch模式。在simple模式下的批量导入工具可以为每条用户交易数据创建一个相应的SQL语句;在reuse模式下的批量导入工具,不需要为每条用户交易数据创建新的SQL语句,但是该模式下需要为每个SQL语句创建一个新的预处理语句;而batch模式下的批量导入工具可以重复使用预先设置的SQL语句模板,并且可以批量执行所有根据该SQL语句模板生成的的SQL语句。

可选的,在文件处理系统100中集成的高效的批量导入工具,在batch模式下,利用预设的SQL语句模板生成与每个子文件中的每条用户交易数据相关联的SQL语句,批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库。其中,预设数量可以为100、200、300等等,可以根据实际情况进行设置,本申请实施例不加以限定。

本发明提供一种文件处理系统,该文件处理系统集成了文件下载解压解密模块、文件拆分模块、并行文件解析模块和批量导入模块,通过文件下载解压解密模块对服务器中的预设目录进行轮询,当查询到所述预设目录下存在交易文件时,下载所述交易文件,并对所述交易文件进行解压和解密,得到交易明文文件后,通过文件拆分模块调用文件拆分进程每次从交易明文文件拆分出预设长度的文件块,并将文件块存储至预先设置的任一子文件,直至拆分完交易明文文件,其中,子文件的数量是根据校验进程的数量预先设置的,以便通过并行文件解析模块并行执行每个校验进程读取一个子文件,直至读取完内存中的子文件为止,不用逐行读取对交易明文文件中的用户交易数据,从而提高了处理交易文件的效率;最后在每个子文件中的每条用户交易数据均校验通过的情况下,通过批量导入模块利用预设的SQL语句模板就能生成与每个子文件中每条用户交易数据相关联的SQL语句,节省了SQL语句的生成时间,最后批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库,还能够减少与数据库连接的次数,从而提高了文件处理系统的性能。

基于图1示出的文件处理系统,本发明还对应公开了一种文件处理方法,该文件处理方法应用于文件处理系统,参见图5,示出了本发明实施例提供的一种文件处理方法的流程示意图,该文件处理方法具体包括以下步骤:

S501:对服务器中的预设目录进行轮询,当查询到预设目录下存在交易文件时,下载交易文件,并对交易文件进行解压和解密,得到交易明文文件,其中,交易明文文件包括多条用户交易数据。

在本申请文件中,文件处理系统可以为份额管理系统。

在步骤S501中,在文件处理系统中集成文件下载解压解密模块,在文件处理系统中集成的文件下载解压解密模块可以为具有文件下载、解压、3DES算法等多个功能的文件下载解压解密器。其中,3DES算法解密的方式是通过文件IO流的方式循环从密文文件中读取一定长度的密文并对读取的密文进行解密,直至对密文文件解密完成,这样可以避免对密文文件解密的过程中出现内存过载OOM的情况。

在具体执行步骤S501的过程中,文件下载解压解密器在从服务器的预设目录中查询到交易文件后,对交易文件进行解密,得到密文文件;每次从密文文件中读取预设长度的密文,并对读取的密文进行解密,直至对该密文文件解密完成,得到交易明文文件。

需要说明的是,还可以预先设置对服务器中预设目录进行轮询时间,比如,每隔5分钟就对服务器中的预设目录进行轮询。

S502:调用文件拆分进程每次从交易明文文件拆分出预设长度的文件块,并将文件块存储至预先设置的任一子文件,直至拆分完交易明文文件,其中,子文件的数量是根据校验进程的数量预先设置的,每个子文件中存储的文件块的数量相同。

在步骤S502中,可以在文件处理系统中集成文件拆分模块,文件拆分模块中预先设置有文件拆分进程,以及根据预先设置的文件拆分进程的进程地址空间大小预先设置拆分出的每个文件块的预设映射长度,以便根据预先设置的文件拆分进程的映射比确定每个文件块的预设长度。

需要说明的是,预先设置的拆分出的文件块的预设映射长度不大于预先设置的文件拆分进程的进程地址空间的大小,预先设置的拆分出的文件块的预设长度为预先设置的拆分出的文件块的预设映射长度比上预先设置的文件拆分进程的映射比。比如,预先设置的文件拆分进程的进程地址空间大小为2M,则预先设置的拆分出的文件块的预设映射长度可以为1.5M,若预先设置的文件拆分进程的映射比为1:10,则预先设置的文件块的预设长度为15M。可以根据实际应用进行设置,本申请实施例不加以限定。

在步骤S502中,还可以根据交易明文文件的大小,预先计算拆分出文件块的数量,再根据预先设置的子文件的数量确定每个子文件中包含文件块的数量,即拆分出的每个子文件的长度。其中,预先设置的拆分出的文件块的预设映射长度不大于预先设置的文件拆分进程的进程地址空间的大小。

在步骤S502中,在文件处理系统中集成的文件拆分模块可以为高效的NIO文件拆分器,高效的NIO文件拆分器通过javaNIO内存映射技术来进行文件拆分。其中,内容映射技术是一种内存映射文件的方法,如图2所示,将一个文件块的映射到应用进程(文件拆分进程)的进程地址空间,从而实现文件块和应用进程(文件拆分进程)的进程地址空间中一段虚拟地址(文件块的存储映射部分)的一一映射关系,在实现这样的映射关系后,应用进程(文件拆分进程)就可以采用指针的方式读写操作交易明文文件中与应用进程(文件拆分进程)的进程地址空间中的虚拟地址对应的一段文件块了,从而自动读取文件块存储至到对应的子文件中。

在具体执行步骤S502的过程中,文件拆分模块通过调用预先设置的文件拆分进程每次从交易明文件中拆分出预设长度的文件块,并将所拆分出的文件块映射入文件拆分进程的进程地址空间,以便将该进程地址空间中映射的文件块存储至预先设置的任一子文件中,直至拆分完该交易明文文件。

S503:并行执行每个校验进程读取一个子文件,并对所读取的子文件中的每条用户交易数据进行校验,直至读取完所有子文件为止。

在步骤S503中,可以在文件处理系统中集成并行文件解析模块,具体的,可以通过利用Spring Batch工具的开箱即用组件构建并行文件解析模块,利用Spring Batch工具构建的并行文件解析模块的核心结构分为三层:应用层、核心层、基础架构层,如图3所示,利用Spring Batch工具构建的并行文件解析模块具有支持更多种类的交易文件,并且具有对并发读取的能力。

其中,Spring Batch工具是使用Java语言并基于Spring框架为基础开发的,开发人员使用Spring Batch编写的所有自定义的批处理作业和自定义代码,核心层包括JobLauncher、Job和Step,应用层和核心层都建立在通用基础架构之上,基础结构包含通用的读(ItemReader)、写(ItemWriter)和服务处理(ItemProcessor)。在利用Spring Batch工具的开箱即用组件构建并行文件解析模块时,引用spring-batch-infrastructure和spring-batch-core包,即可使用基础架构层及核心层内容,然后基于这两层进行应用业务逻辑从而实现并行文件解析模块的构建。

SpringBatch工具的结构如图4所示,通过把任务抽象为Job(批处理任务)和Step(一个任务的具体的执行逻辑单位),一个Job由多个Step来完成,每个step对应一个ItemReader、ItemProcessor及ItemWriter,Job是通过JobLaunche(作业执行器)来启动,Job及Job的运行结果和状态、每个Step的运行结果和状态,都会保存在JobRepository(作业仓库)中。

在具体执行步骤S503的过程中,并行文件解析模块并行执行每个校验进程(Step)的ItemReader读取内存中的一个子文件,同时通过每个校验进程(Step)对应的ItemProcessor对所读取的子文件中的每条用户交易数据进行校验,直至读取完内存中的子文件,并对最后读取的子文件中的每条用户交易数据校验完为止。其中,每个校验进程(Step)对应的ItemProcessor对所读取的子文件中的每条用户交易数据进行校验得到的校验结果还可以通过各个校验进程(Step)对应的ItemWriter保存在JobRepository中。

可选的,对所读取的每个子文件中的每条用户交易数据进行校验的过程可以为:从该用户交易数据中获取用户基本信息,以便根据用户基本信息从服务器中获取与该用户基本信息对应的目标用户交易数据,并判断该用户交易数据与目标用户交易数据是否一致,在用户交易数据与目标用户交易数据一致的情况下,确定该用户交易数据通过;在用户交易数据与目标用户交易数据不一致的情况下,确定该用户交易数据不通过,并输出与该用户交易数据相应的报警信息,并将报警信息记录在文件处理系统的日志文件中。

S504:若每个子文件中的每条用户交易数据均校验通过,利用预设的SQL语句模板生成与每个子文件每条用户交易数据相关联的SQL语句;批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库。

在步骤S504中,在文件处理系统中集成批量导入模块,在文件处理系统中集成的批量导入模块可以为高效的批量导入工具。其中,批量导入工具是一个Java持久化框架,通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

批量导入工具内置的ExecutorType(执行类型)有3种,simple模式(批量导入工具默认的模式)、reuse模式、batch模式。在simple模式下的批量导入工具可以为每条用户交易数据创建一个相应的SQL语句;在reuse模式下的批量导入工具,不需要为每条用户交易数据创建新的SQL语句,但是该模式下需要为每个SQL语句创建一个新的预处理语句;而batch模式下的批量导入工具可以重复使用预先设置的SQL语句模板,并且可以批量执行所有根据该SQL语句模板生成的的SQL语句。

在具体执行步骤S504的过程中,在文件处理系统中集成的高效的批量导入工具,在batch模式下,利用预设的SQL语句模板生成与每个子文件中的每条用户交易数据相关联的SQL语句,批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库。其中,预设数量可以为100、200、300等等,可以根据实际情况进行设置,本申请实施例不加以限定。

本发明提供一种文件处理方法及系统,在对服务器中的预设目录进行轮询,当查询到预设目录下存在交易文件时,下载交易文件,并对所下载的交易文件进行解压和解密,得到交易明文文件后,调用文件拆分进程每次从交易明文文件拆分出预设长度的文件块,并将文件块存储至预先设置的任一子文件,直至拆分完交易明文文件,其中,子文件的数量是根据校验进程的数量预先设置的;并行执行每个校验进程读取内存中的一个子文件,直至读取完所有子文件为止,不用逐行读取对交易明文文件中的用户交易数据,从而提高了处理交易文件的效率;在每个子文件中的每条用户交易数据均校验通过的情况下,利用预设的SQL语句模板就能生成与每个子文件中每条用户交易数据相关联的SQL语句,节省了SQL语句的生成时间,最后批量执行预设数量的SQL语句将相关联的用户交易数据写入数据库,直至将全部用户交易数据写入数据库,不仅能够提高的交易文件的处理效率,还能够减少与数据库连接的次数,从而提高了文件处理系统的性能。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 一种大文件存储文件系统以及大文件处理方法
  • 一种linux系统下归档文件和压缩文件乱码的处理方法和系统
技术分类

06120112553855