CN112217521B - 一种基于gzip的大文件分布式压缩方法 - Google Patents
一种基于gzip的大文件分布式压缩方法 Download PDFInfo
- Publication number
- CN112217521B CN112217521B CN202011093139.7A CN202011093139A CN112217521B CN 112217521 B CN112217521 B CN 112217521B CN 202011093139 A CN202011093139 A CN 202011093139A CN 112217521 B CN112217521 B CN 112217521B
- Authority
- CN
- China
- Prior art keywords
- content
- sub
- file
- subfiles
- huffman coding
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000007906 compression Methods 0.000 title claims abstract description 36
- 230000006835 compression Effects 0.000 title claims abstract description 33
- 238000000034 method Methods 0.000 title claims abstract description 32
- 230000011218 segmentation Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供一种基于GZIP的大文件分布式压缩方法,步骤如下:S1将大文件按照设定长度进行切割分段;S2大文件根据顺序切割形成多个子文件,子文件必须包含前一段子文件的最末尾的一个窗口长度的内容;S3:子文件按顺序编号,分发到专职处理压缩的第一集群进行处理;S4第一集群的某台服务器处理完成一个子文件的作业,将处理完成的子文件放置到统一的存储空间,再通过另一台独立服务器处理合并;S5总Huffman编码会送到第二集群,第二集群根据总Huffman编码,将之前处理后的子文件内容,替换成Huffman编码内容;S6将S5步骤完成后的Huffman编码内容按编号顺序重新组合,进行数据合并,完成最终压缩文件的组合。
Description
技术领域
本发明涉及一种文件压缩方法,尤其是涉及一种基于GZIP的大文件分布式压缩方法。
背景技术
GZIP技术在互联网中无处不在,对于小文件而言不存在较大问题。对于大文件,目前的压缩技术只能完全依赖CPU性能以及在多核的基础上进行计算优化。
主要缺陷在于:由于在压缩过程中使用了大量的计算资源,而对于大文件而言,计算过程将会随着CPU的性能持续不同的时间,一旦CPU性能有限,将会导致压缩过程过长,同时也会导致在压缩过程中,其他的计算将很难得到支持,接近于服务不可用。
发明内容
本发明提供了一种基于GZIP的大文件分布式压缩方法,解决了提高压缩性能,减少压缩成本的问题,其技术方案如下所述:
一种基于GZIP的大文件分布式压缩方法,包括以下步骤:
S1:将大文件按照设定的切割长度进行切割;
S2:大文件根据顺序切割形成多段子文件,除了首段子文件,其他子文件必须包含前一段子文件最末尾的一个滑动窗口长度的内容,作为重复串;
S3:所有子文件按顺序编号,并用调度程序统一调度,分发到专职处理压缩的第一集群进行处理,完成所有子文件的改进型LZ77算法与对应的Huffman编码处理;
S4:第一集群将处理完成的子文件放置到一个统一的存储空间,此时通过另一台独立服务器对处理完成的子文件根据Huffman编码处理合并,形成总的Huffman编码;
S5:总的Huffman编码会送到第二集群进行处理,第二集群会根据总的Huffman编码,将之前改进型LZ77算法处理后的子文件内容,替换成Huffman编码((p,l,c)中关于c的编码进行Huffman编码的替换;
S6:将S5步骤完成后的Huffman编码内容按步骤S3的编号顺序重新组合,进行数据合并,即完成了最终压缩文件的组合。
进一步的,步骤S2中,切割长度大于滑动窗口长度,滑动窗口长度为4KB,切割长度的上限能够根据提供切割处理的服务器性能动态调整,且不大于32Mb。
进一步的,步骤S2中,所述重复串是前一段子文件最末尾的一个滑动窗口长度的内容,其将直接作为后一段子文件进行改进型LZ77算法处理的窗口,如此子内容的编码相当于完全连续于前一段内容的后续编码过程。
进一步的,步骤S3中,所述第一集群是指服务器集合,每个服务器都统一部署了能够接收子文件并进行改进型LZ77算法与Huffman编码处理的服务;第一集群通过内部多台可无限扩展的服务器同时处理,每台服务器处理完成一个子文件的作业。
进一步的,步骤S4中,独立服务器只需要实现包含Huffman编码的子文件合并,合并是指分段统计后的汇总。
所述基于GZIP的大文件分布式压缩方法将计算分离,计算的性能成本,通常不是常数级提升,使用一个高性能的CPU来优化压缩性能,往往得不偿失,通过分布式压缩的方式,虽然增加了网路的开销,但是随着各种通信技术的提升与成熟(例如5G),此类开销将越来越低,同时可以横向扩展压缩性能,极端情况下,甚至可以达到传输速率的压缩速率。
附图说明
图1是所述基于GZIP的大文件分布式压缩方法的流程示意图;
图2是建立Huffman树的示意图;
图3是加入节点的Huffman树的示意图;
图4是选择剩余最小的字符的示意图;
图5是完成的Huffman的树的建立示意图;
具体实施方式
本发明提供的基于GZIP的大文件分布式压缩方法,压缩方式是将大文件切割后,对子文件进行处理,进而完成压缩。其中,子文件的处理主要分为两步,首先利用改进型LZ77算法通过各子文件的滑动窗口寻找重复串得处理结果,再通过Huffman编码完成大文件最终的压缩。
其中,LZ77算法是使用历史出现过的字符串做字典,编码未出现过的字符。具体实现中,是通过文件前端设置的滑动窗口实现,所述滑动窗口在数据扫描过程中用于存储历史字符。
对于待压缩字符串“CABAABCBADEFCBA”,下表1的第一个无内容的黑框是滑动窗口(一般应用中,滑动窗口是4kb长度,为简易说明,下面例子中是8个字节),通过额外设置一个“前向缓冲区”(下表中第二个黑框),前向缓冲区的目的是只编码(使用时应用为压缩)该区中的内容:
表1:
编码方式如下:
用(p,l,c)的结构表示前向缓冲区中字符串的最长匹配结果,其中,
p表示最长匹配时,字典中字符开始时的位置(相对于前向缓冲区的起始位置);
l为最长匹配字符串的长度;
c指前向缓冲区中最长匹配结束时的下一字符。
开始压缩:
移入字符C,由于滑动窗口中无内容,无法压缩编码,直接输出(0,0,C),并向右移动1格窗口,如表2,
表2:
A、B同理,分别输出编码(0,0,A),(0,0,B),并向右移动1格窗口,如表3,表3:
此时前向缓冲区中只有开头字母A发生匹配,输出(2,1,A),这里的A其实是前向缓冲区中“AABC”中的第二个A,并向右移动滑动窗口,如表4,
表4:
此时前向缓冲区中匹配了字符“AB”,输出(3,2,C),并向右移动2格窗口,如表5,
表5:
匹配C,输出(6,1,B),并向右移动1格窗口,如表6,
表6:
匹配BA,输出(5,2,D),并向右移动2格窗口,如表7,
表7:
此时首字符C滑出了窗口边界,不再参与匹配编码,仅由窗口中的“ABAABCBA”作为字典继续匹配与编码。重复以上步骤得到最终编码:(0,0,C)(0,0,A)(0,0,B)(2,1,A)(3,2,C)(6,1,B)(5,2,D)(0,0,E)(0,0,F)(0,0,C)(6,1,B)(6,2,null)
以上是lz77算法基于滑动窗口的处理步骤,基于此算法得到扩展结论,得到改进型LZ77算法:为了将连续的内容编码分段,本发明可以将分段后的子内容的首部,包含前一段子内容的最末尾的滑动窗口长度的内容,作为重复串,这段冗余的内容将直接作为分段后子内容进行编码的窗口(字典),如此子内容的编码相当于完全连续于前一段内容的后续编码过程。
Huffman编码算法:
通过lz77算法对待压缩字符串完成全部编码的处理后,再使用Huffman编码对上述最终编码中出现的C,A,B等字符进行编码,Huffman编码是对数据进行建立Huffman树的过程,以进一步压缩数据。
哈夫曼树是一个完全二叉树,每一叶子节点都有自己的权重,这里的权重是字符出现的次数,那么从根出发到叶子节点的路径一定是最短的,可以达到以最小位数完成字符编码的目的。具体步骤如下:
(1)统计编码出现的个数,上述的原始编码为C,A,B,A,C,B,D,E,F,C,B,统计后为C(3),A(2),B(3),D(1),E(1),F(1);
(2)如图2所示,寻找统计后,出现次数最少的2个字符,建立Huffman树,这里是D,E;
(3)如图3所示,加入节点F(1),建立Huffman树;
(4)如图4所示,选择剩余最小的字符,A(2);
(5)如图5所示,剩余的字符中,最小的是C与B,因为次数Huffman树的根节点已经达到了5,因此C与B建立新的Huffman树,此时完成了Huffman的树的建立;
(6)左子树路径编码为0,右子树编码为1,得到最终编码:
D:0000
E:0001
F:001
A:01
B:11
C:10
所述Huffman编码实际上是对字符数量的统计,那么可知,基于一个完整的数据内容关于字符数量的统计,与把这个数据内容分段统计后,再汇总统计,得到的结果必定是相同的。那么就可以对一个完整内容分段后的Huffman编码结果,再进行合并,可以得出一个针对完整内容直接进行Huffman编码完全相同的结果。
如图1所示,基于上述原理以及扩展结论,本发明提供的基于GZIP的大文件分布式压缩方法,包括以下步骤:
S1:将大文件按照设定的切割长度进行切割,切割长度的限定是大于4Kb,上限可根据实施切割处理的服务器性能动态调整,切割长度一般建议不大于32Mb;
其中,4Kb是滑动窗口长度。
S2:大文件根据顺序按固定尺寸切割后,形成多个子文件,除了包含首段的子文件,其他子文件必须包含前一段子文件的最末尾的一个滑动窗口长度的内容(见LZ77的扩展结论);
S3:子文件按顺序编号,并用调度程序统一调度,分发到专职处理压缩的集群进行处理,这里的集群是指一个普通的服务器集合,他们都统一部署了可以接收文件并进行LZ77编码与对应的Huffman编码处理的服务;
S4:集群中有多台可无限扩展的服务器对子文件进行同时处理,此时相当于将集中计算能力分布式处理;一旦有某一台服务器处理完成一个子文件的作业,即完成该子文件的LZ77算法处理与对应的Huffman编码处理,就会将处理完成的子文件放置到一个统一的存储空间,此时会有另一台独立服务器专职处理合并,独立服务器的工作内容只需要将包含Huffman编码的子文件合并,该阶段Huffman编码的子文件合并相当于分段统计后的汇总,得到总的Huffman编码,因此计算量相比整个过程可忽略不计。
S5:计算完成后的总的Huffman编码会送到一个新集群进行处理,这里几乎不涉及计算,是大量的内存读写操作,因此这里如果采用新集群,就可以有利于新集群关于计算和IO的成本充分利用;
新集群进行处理时,这里的新集群将会根据此总的Huffman编码,将之前改进型LZ77算法处理后的子文件内容,替换成Huffman编码((p,l,c)中关于c的编码进行Huffman编码的替换。
其中,(p,l,c)是一种和huffman不同的编码方式,其中的c本质上没有编码,需要用huffman编码进行替换来完成这部分编码的压缩。
S6:将S5步骤完成后的内容按步骤S3的编号顺序重新组合,即完成了大文件的最终压缩文件的组合。
本发明通过分布式压缩的方式,可以横向扩展压缩性能,极端情况下,甚至可以达到传输速率的压缩速率。
Claims (5)
1.一种基于GZIP的大文件分布式压缩方法,包括以下步骤:
S1:将大文件按照设定的切割长度进行切割;
S2:大文件根据顺序切割形成多段子文件,除了首段子文件,其他子文件必须包含前一段子文件最末尾的一个滑动窗口长度的内容,作为重复串;
S3:所有子文件按顺序编号,并用调度程序统一调度,分发到专职处理压缩的第一集群进行处理,完成所有子文件的改进型LZ77算法与对应的Huffman编码处理;
所述改进型LZ77算法,是将分段后的子内容的首部,包含前一段子内容的最末尾的滑动窗口长度的内容,作为重复串,这段冗余的内容将直接作为分段后子内容进行编码的窗口,如此子内容的编码相当于完全连续于前一段内容的后续编码过程;
所述Huffman编码是对数据进行建立哈夫曼树的过程;所述Huffman编码是对字符数量的统计,基于一个完整的数据内容关于字符数量的统计,与把这个数据内容分段统计后,再汇总统计,得到的结果必定是相同的,对一个完整内容分段后的Huffman编码结果,再进行合并,能够得出一个针对完整内容直接进行Huffman编码完全相同的结果;
完成一个子文件的作业,即完成该子文件的LZ77算法处理与对应的Huffman编码处理;
S4:第一集群将处理完成的子文件放置到一个统一的存储空间,此时通过另一台独立服务器对处理完成的子文件根据Huffman编码处理合并,形成总的Huffman编码;
形成总的Huffman编码是指将包含Huffman编码的子文件合并,该阶段Huffman编码的子文件合并相当于分段统计后的汇总,得到总的Huffman编码;
S5:总的Huffman编码会送到第二集群进行处理,第二集群会根据总的Huffman编码,将之前改进型LZ77算法处理后的子文件内容,替换成Huffman编码((p,l,c)中关于c的编码进行Huffman编码的替换;
其中,p表示最长匹配时,字典中字符开始时的位置,相对于前向缓冲区的起始位置;
l为最长匹配字符串的长度;
c指前向缓冲区中最长匹配结束时的下一字符;
S6:将S5步骤完成后的Huffman编码内容按步骤S3的编号顺序重新组合,进行数据合并,即完成了最终压缩文件的组合。
2.根据权利要求1所述的基于GZIP的大文件分布式压缩方法,其特征在于:步骤S2中,切割长度大于滑动窗口长度,滑动窗口长度为4KB,切割长度的上限能够根据提供切割处理的服务器性能动态调整,且不大于32Mb。
3.根据权利要求1所述的基于GZIP的大文件分布式压缩方法,其特征在于:步骤S2中,所述重复串是前一段子文件最末尾的一个滑动窗口长度的内容,其将直接作为后一段子文件进行改进型LZ77算法处理的窗口,如此子内容的编码相当于完全连续于前一段内容的后续编码过程。
4.根据权利要求1所述的基于GZIP的大文件分布式压缩方法,其特征在于:步骤S3中,所述第一集群是指服务器集合,每个服务器都统一部署了能够接收子文件并进行改进型LZ77算法与Huffman编码处理的服务;第一集群通过内部多台可无限扩展的服务器同时处理,每台服务器处理完成一个子文件的作业。
5.根据权利要求1所述的基于GZIP的大文件分布式压缩方法,其特征在于:步骤S4中,独立服务器只需要实现包含Huffman编码的子文件合并,合并是指分段统计后的汇总。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011093139.7A CN112217521B (zh) | 2020-10-13 | 2020-10-13 | 一种基于gzip的大文件分布式压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011093139.7A CN112217521B (zh) | 2020-10-13 | 2020-10-13 | 一种基于gzip的大文件分布式压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112217521A CN112217521A (zh) | 2021-01-12 |
CN112217521B true CN112217521B (zh) | 2024-01-09 |
Family
ID=74054066
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011093139.7A Active CN112217521B (zh) | 2020-10-13 | 2020-10-13 | 一种基于gzip的大文件分布式压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112217521B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115204754B (zh) * | 2022-09-15 | 2022-12-09 | 山东西曼克技术有限公司 | 一种基于大数据的热力供需信息管理平台 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102970043A (zh) * | 2012-11-14 | 2013-03-13 | 无锡芯响电子科技有限公司 | 一种基于gzip的压缩硬件系统及其加速方法 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
CN110995753A (zh) * | 2019-12-19 | 2020-04-10 | 中国电力科学研究院有限公司 | 用电信息采集系统中远程通信报文的组合压缩方法 |
KR20200044648A (ko) * | 2018-10-19 | 2020-04-29 | 펌킨네트웍스(주) | 트래픽 최적화 장치 및 그 방법 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7143115B2 (en) * | 2003-04-15 | 2006-11-28 | Pocket Soft, Inc. | Method and apparatus for finding differences between two computer files efficiently in linear time and for using these differences to update computer files |
US10944423B2 (en) * | 2019-03-14 | 2021-03-09 | International Business Machines Corporation | Verifying the correctness of a deflate compression accelerator |
-
2020
- 2020-10-13 CN CN202011093139.7A patent/CN112217521B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102970043A (zh) * | 2012-11-14 | 2013-03-13 | 无锡芯响电子科技有限公司 | 一种基于gzip的压缩硬件系统及其加速方法 |
CN108880556A (zh) * | 2018-05-30 | 2018-11-23 | 中国人民解放军战略支援部队信息工程大学 | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 |
KR20200044648A (ko) * | 2018-10-19 | 2020-04-29 | 펌킨네트웍스(주) | 트래픽 최적화 장치 및 그 방법 |
CN110995753A (zh) * | 2019-12-19 | 2020-04-10 | 中国电力科学研究院有限公司 | 用电信息采集系统中远程通信报文的组合压缩方法 |
Non-Patent Citations (3)
Title |
---|
FPGA-Based Lossless Data Compression using Huffman and LZ77 Algorithms;Suzanne Rigler;《2007 Canadian Conference on Electrical and Computer Engineering》;1235-1238 * |
基于OpenCL的Gzip数据压缩算法;赵雅倩;《计算机应用》;112-115 * |
多文件压缩传输及解压缩的方法;刘丽伟;《武汉理工大学学报(交通科学与工程版)》;1211-1214 * |
Also Published As
Publication number | Publication date |
---|---|
CN112217521A (zh) | 2021-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1183683C (zh) | 使用前缀预测的位自适应编码方法 | |
EP1320833B1 (en) | Improved huffman data compression method | |
US11431351B2 (en) | Selection of data compression technique based on input characteristics | |
CA2324608C (en) | Adaptive packet compression apparatus and method | |
EP0438955B1 (en) | Data compression method | |
US5970177A (en) | Data compression using selective encoding | |
WO2000038330A1 (en) | On-the-fly data re-compression | |
US20140266816A1 (en) | Method and apparatus for compressing data-carrying signals | |
WO2018219195A1 (zh) | 一种译码方法及译码器 | |
CN116610265B (zh) | 一种商务信息咨询系统的数据存储方法 | |
CN112217521B (zh) | 一种基于gzip的大文件分布式压缩方法 | |
US7253752B2 (en) | Coding apparatus, decoding apparatus, coding method, decoding method and program | |
CN114157305B (zh) | 一种基于硬件快速实现gzip压缩的方法及其应用 | |
CN114647764A (zh) | 图结构的查询方法、装置及存储介质 | |
CN108573069B (zh) | 一种加速压缩流量正则表达式匹配的Twins方法 | |
CN111384963B (zh) | 数据压缩解压装置和数据解压方法 | |
CN111384962B (zh) | 数据压缩解压装置和数据压缩方法 | |
US7209926B2 (en) | Methods and apparatus for lexicographically sorting cyclic data | |
Karpinski et al. | A fast algorithm for adaptive prefix coding | |
CN117200805B (zh) | 一种mcu的低内存占用的压缩和解压方法及装置 | |
CN111384968B (zh) | 数据压缩解压装置和数据解压方法 | |
CN111384964B (zh) | 数据压缩解压装置和数据压缩方法 | |
CN117811588B (zh) | 一种基于霍夫曼编码与lz77的日志压缩存取方法、系统、设备及可读存储介质 | |
Gagie et al. | Worst-case optimal adaptive prefix coding | |
Klein et al. | Parallel Lempel Ziv Coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |