大文件排序方法及系统的制作方法

文档序号:6401861阅读:225来源:国知局
专利名称:大文件排序方法及系统的制作方法
技术领域
本发明涉及一种大文件排序方法及系统,主要用于解决IBM大型机环境、z/OS操作系统下海量的顺序文件(QSAM文件)排序的性能问题。
背景技术
在使用IBM大型机(z/OS操作系统)环境下进行批量处理的过程中,为了提高处理效率,往往会采用DFSORT工具对海量的顺序文件进行排序处理。DFSORT工具是IBM研发的排序工具软件,在业界被广泛地使用,它可以有效地提高批量处理速度。但在处理海量数据时,IBM的DFSORT工具仍显不足,排序处理的时间过长,不能够满足应用要求。例如,某银行的一个中等规模的分行客户资料包括13227038条客户数据记录,每条数据记录多达2576字节,采用DFSORT工具对该文件进行排序的时间高达29.48分钟。排序步骤所用的时间较长,影响了批处理的效率,成为制约批处理速度的关键环节。

发明内容
针对现有技术的上述问题,本发明要解决的技术问题是提供一种利用DFSORT工具对包含有海量的数据记录的大文件的进行快速排序的方法和系统。为了解决上述技术问题,本发明提供了大文件排序方法,所述大文件包括海量数据记录,包括如下步骤:(a)压缩:将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件;(b)排序:将所述新文件所包括的新数据记录使用DFSORT工具进行排序;(C)解压:将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。作为优选,其中,所述压缩步骤进一步包括:(al)拆分:将每一条所述原始数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段;(a2)分类赋值:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,根据字符类别的不同分别赋予不同的字符类别代码:如果该字符段全部为空格,定义为第一类字符段,赋予第一字符类别代码;如果字符段全部为数字0,定义为第二类字符段,赋予第二字符类别代码;如果该字符段既不全部为空格也不全部为数字0,定义为第三类字符段,赋予第三字符类别代码;(a3)按顺序生成所述新数据记录:其中由第一类字符段和第二类字符段生成的第一类新字符串和第二类新字符串分别只包括与其对应的控制字,由第三类字符段生成的第三类新字符串包括与其对应的控制字和位于该控制字后的该字符段自身;其中,所述解压步骤进一步包括:(Cl)根据控制字将新数据记录拆分为多个所述新字符串;
(c2)根据控制字中的字符类别代码对新字符串进行分类处理:如果是第一类新字符串和第二类新字符串,根据控制字的字符类别代码及字符长度还原为相应的由空格和数字O组成的字符段,如果是第三类新字符串,提出位于第三类字符串的控制字之后的字符,还原为原始的字符段;(c3)按顺序还原成所述原始数据记录;将新字符串对应的原始的字符按顺序组合,还原为所述原始数据记录。进一步地,其中步骤(a2)和(a3)之间还包括:如果相邻的两个或多个字符段属于相同的字符类别,则将其合并为一个字符段。作为优选,其中所述固定的字节数为四。本发明还提供了一种大文件排序系统,包括:压缩模块:用于将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件;排序模块:用于将所述新文件所包括的新数据记录使用DFSORT工具进行排序;解压模块:用于将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。作为优选,所述压缩模块进一步包括:拆分模块:用于将每一条所述原始数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段;赋值模块:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,每一类别的字符段分别赋予一个字符类别代码,其中字符类别按如下规则进行分类:如果该字符段全部为空格,定义为第一类字符段;如果字符段全部为数字0,定义为第二类字符段;如果该字符段既不全部为空格也不全部为数字0,定义为第三类字符段;组合模块:将由各个字符段生成的新字符串进行组合,其中由第一类字符段和第二类字符段生成的新字符串分别只包括与其对应的控制字,由第三类字符段生成的新字符串则包括与其对应的控制字和位于该控制字之后的该字符段自身。进一步地,所述大文件排序系统还包括预组合模块,用于将属于相同字符类别的两个或多个相邻的字符段合并为一个字符段。与现有技术相比,本发明的有益效果在于:通过压缩,缩小了参与排序的数据记录以及由这些数据记录组成的文件的大小,降低了 CPU及内存开销,提高了排序速度。


图1为本发明的一个实施例的大文件排序方法的流程图。图2为本发明的大文件排序方法的压缩过程的详细流程示意图。图3为采用本发明的大文件排序方法对一条数据记录进行压缩后生成新的数据记录与原始数据记录的对应图。图4为本发明的一个实施例的大文件排序系统的组成框图。
具体实施例方式下面结合附图和具体实施例对本发明作进一步详细描述,但不作为对本发明的限定。在本申请文件中,数据记录对应于数据源(文件)中的一组完整的信息,是进行数据处理的基本单位。大文件指的是包括海量的数据记录的数据文件,由于其包括的数据记录的条数特别多,一般在百万级以上设置多达上亿条数据记录,因此其所占据的存储空间也较大。图1为本发明的一个实施例的大文件排序方法的流程图。如图1所示,本发明的大文件排序方法,包括如下步骤:(a)压缩:将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件;(b)排序:将所述新文件所包括的新数据记录使用DFSORT工具进行排序;(C)解压:将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。本发明的大文件排序方法对所采用的压缩方法的要求是,对大文件所包括的每一条原始数据记录分别进行压缩,而不是对大文件整体进行压缩。经过压缩后的数据记录所占用的存储空间减少,而且在排序过程中所消耗的内存与CPU等资源也较少,从而提高了整体的处理效率。图2为本发明的大文件排序方法的压缩过程的详细流程示意图。图3为采用本发明的大文件排序方法对一条数据记录进行压缩后生成新的数据记录与原始数据记录的对应图。为了尽可能地提高排序效率,在减少数据记录所占的存储空间的同时不能影响后续的排序操作,本实施例采用独特的压缩方法。如图2所示,本实施例中,压缩步骤进一步包括:(al)拆分:将每一条原始数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段;(a2)分类赋值:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,根据字符类别的不同分别赋予不同的字符类别代码:如果该字符段全部为空格,定义为第一类字符段,赋予第一字符类别代码;如果字符段全部为数字0,定义为第二类字符段,赋予第二字符类别代码;如果该字符段既不全部为空格也不全部为数字0,定义为第三类字符段,赋予第三字符类别代码;(a3)按顺序生成新数据记录:其中由第一类字符段和第二类字符段生成的第一类新字符串和第二类新字符串分别只包括与其对应的控制字,由第三类字符段生成的第三类新字符串包括与其对应的控制字和位于该控制字后的该字符段自身。虽然图2中未示出解压步骤,但参照图2所示的压缩步骤可以帮助理解解压步骤,与上述的压缩步骤相对应(解压步骤是压缩步骤的逆过程),所述解压步骤进一步包括:(Cl)根据控制字将新数据记录进行拆分,分为多个新字符串;(c2)根据控制字中的字符类别代码对新字符串进行分类处理:如果是第一类新字符串和第二类新字符串,根据控制字的字符类别代码及字符长度分别还原为相应的由空格和数字O组成的字符段,如果是第三类新字符串,提出位于第三类字符串的控制字之后的字符,还原为原始的由空格和数字O之外的普通字符组成的字符段;(c3)按顺序还原成原始的数据记录;将新字符串对应的原始的字符按顺序组合,还原为原始的数据记录。
以下以图3中所示的数据记录并参照图2所示的流程图来说明本实施例的大文件排序方法,其中“ABCDEFGH”代表参与排序的字符,是不能压缩的普通字符,“S”代表空格,“0”代表数字0,都是可压缩的字符。压缩处理以一个WORD (字,即4个字节)为单位,主要考虑到IBM大型机的很多指令是以WORD为处理单位,这样可以提高处理效率。图3所示的数据记录被拆分为八个字符段,每段字符段都会被赋予一个字长的控制字,其中高2位字节的X’ 0001’、X’ 0002’、X’ 0003’(均为十六进制),分别表示空格、数字O、普通字符,低2位字节表示相应的字符段的长度。作为优选处理,为了提高压缩效率,如果相邻的两个或多个字符段属于相同的字符类别,则将其合并为一个字符段。例如在图3中,将“ABCDEFGH”合并为一个字符段,将四个字长的16个S合并为一个字符段,将2个字长的数字0合并为一个字符段。如图3所示,对于普通字符段,也就是除了全部为空格的第一类字符段和全部为数字0的第二类字符段的第三类字符段,例如“ABCDEFGH”,被压缩后,生成的第三类新字符串为“X’ 00030008’ AB⑶EFGH”,其中的控制字“X’ 0003’ ”为字符类别代码,即说明其代表的是普通字符,“X’ 0008”代表字符长度,即普通字符有8位。其中,字符类别代码可以根据实际需要进行赋值,只要不同的字符类别对应不同的代码即可。在解压缩时,如果一个新字符串中的控制字的字符类别代码表示其为由普通字符段生成的第三类字符串,则提出位于第三类字符串的控制字之后的字符,还原为原始的字符段。对于全部由空格组成的第一类字符段,则仅生成控制字即可,即图3所示的16个空格对应“X,00010010’”,其中“X,0001’”表示此处为空格,“X’ 0010’”表示空格长度为16。在解压时,只需还原为对应长度的空格即可。同理,对于全部由数字0组成的第二类字符段,比如图3所示的8个0,生成为“X’ 00020008’”,其中“X,0002”表示此处为数字0,“X’ 0008’”表示有8个O。在解压缩时采用与此相反的方式从各个控制字得到原始的字符段。与上文所述的对大文件进行排序的相对应,如图4所示,本发明实施例的对大文件进行排序的系统,包括:压缩模块1:用于对所述大文件的每一条原始数据记录均进行压缩处理生成对应的新数据记录,将所有的新数据记录组成一个新文件;排序模块2:用于将新文件所包括的所有的新数据记录使用DFSORT工具进行排序;解压模块3:用于将排序后的每一条新数据记录进行解压处理,还原为原始数据记录。如图4所示,所述压缩模块I进一步包括:拆分模块11:用于将每一条数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段。为了尽可能地压缩每一条数据记录,还包括预组合模块12,在拆分模块之后赋值模块还未工作之前,用于将属于相同字符类别的两个或多个相邻的字符段合并为一个字符段。赋值模块13:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,每一类别的字符段分别赋予一个字符类别代码,其中字符类别按如下规则进行分类:如果该字符段全部为空格,定义为第一类字符段;如果字符段全部为数字O,定义为第二类字符段;如果该字符段既不全部为空格也不全部为数字O,定义为第三类字符段。组合模块14:将由各个字符段生成的新字符串进行组合,其中由第一类字符段和第二类字符段生成的新字符串分别只包括与其对应的控制字,由第三类字符段生成的新字符串则包括与其对应的控制字和位于该控制字之后的该字符段自身。本发明的排序方法主要适用于包含有大量的连续空格和/或连续d数字O的文件。采用本实施例的排序方法对背景技术所述的包括13227038条数据记录,每条数据记录多达2576字节的大文件进行处理时,其压缩的速度达到400万条记录/分钟。经过测试,原文件大小为31.73G的客户资料,压缩后大小为6.70G,压缩率为21.1%。在同样的硬件和软件环境下,采用本发明的方法对原文件进行排序的运行时间,在采用DFSORT工具直接排序的运行时间的30-40%之间。以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
权利要求
1.大文件排序方法,所述大文件包括海量数据记录,其特征在于, 包括如下步骤: (a)压缩:将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件; (b)排序:将所述新文件所包括的新数据记录使用DFSORT工具进行排序; (c)解压:将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。
2.根据权利要求1所述的大文件排序方法,其特征在于,其中, 所述压缩步骤进一步包括: (al)拆分:将每一条所述原始数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段; (a2)分类赋值:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,根据字符类别的不同分别赋予不同的字符类别代码:如果该字符段全部为空格,定义为第一类字符段,赋予第一字符类别代码;如果字符段全部为数字0,定义为第二类字符段,赋予第二字符类别代码;如果该字符段既不全部为空格也不全部为数字0,定义为第三类字符段,赋予第三字符类别代码; (a3)按顺序生成所述新数据记录:其中由第一类字符段和第二类字符段生成的第一类新字符串和第二类新字符串分别只包括与其对应的控制字,由第三类字符段生成的第三类新字符串包括与其对应的控制字和位于该控制字后的该字符段自身; 其中,所述解压步骤进一 步包括: (Cl)根据控制字将新数据记录拆分为多个所述新字符串; (c2)根据控制字中的字符类别代码对新字符串进行分类处理:如果是第一类新字符串和第二类新字符串,根据控制字的字符类别代码及字符长度还原为相应的由空格和数字0组成的字符段,如果是第三类新字符串,提出位于第三类字符串的控制字之后的字符,还原为原始的字符段; (c3)按顺序还原成所述原始数据记录;将新字符串对应的原始的字符按顺序组合,还原为所述原始数据记录。
3.根据权利要求2所述的大文件排序方法,其特征在于,其中步骤(a2)和(a3)之间还包括: 如果相邻的两个或多个字符段属于相同的字符类别,则将其合并为一个字符段。
4.根据权利要求2或3所述的大文件排序方法,其特征在于,其中所述固定的字节数为四。
5.大文件排序系统,其特征在于,包括: 压缩模块:用于将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件; 排序模块:用于将所述新文件所包括的新数据记录使用DFSORT工具进行排序; 解压模块:用于将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。
6.如权利要求5所述的对大文件进行排序的系统,其特征在于,所述压缩模块进一步包括:拆分模块:用于将每一条所述原始数据记录的字符从高位到低位以固定的字节数为单位按顺序拆分成多个字符段; 赋值模块:为每一字符段赋予一个控制字,所述控制字包括字符类别代码和字符长度,每一类别的字符段分别赋予一个字符类别代码,其中字符类别按如下规则进行分类:如果该字符段全部为空格,定义为第一类字符段;如果字符段全部为数字O,定义为第二类字符段;如果该字符段既不全部为空格也不全部为数字O,定义为第三类字符段; 组合模块:将由各个字符段生成的新字符串进行组合,其中由第一类字符段和第二类字符段生成的新字符串分别只包括与其对应的控制字,由第三类字符段生成的新字符串则包括与其对应的控制字和位于该控制字之后的该字符段自身。
7.如权利要求6所述的对大文件进行排序的系统,其特征在于,还包括预组合模块,用于将属于相同字符类别的两 个或多个相邻的字符段合并为一个字符段。
全文摘要
本发明公开了一种大文件排序方法,包括如下步骤(a)压缩将所述大文件包括的每一条原始数据记录均进行压缩处理生成对应的新数据记录,并将所有新数据记录组成一个新文件;(b)排序将所述新文件所包括的新数据记录使用DFSORT工具进行排序;(c)解压将排序后的每一条新数据记录进行解压处理,还原为所述原始数据记录。本发明还公开了一种大文件排序系统,用于对包括海量数据记录的大文件进行排序处理。本发明的有益效果在于通过压缩,缩小了参与排序的数据记录以及由这些数据记录组成的文件的大小,降低了CPU及内存开销,提高了排序速度。
文档编号G06F17/30GK103198127SQ20131012359
公开日2013年7月10日 申请日期2013年4月10日 优先权日2013年4月10日
发明者廖文胜, 徐慧斌 申请人:中国银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1