CN114337678A - 数据压缩方法、装置、设备及存储介质 - Google Patents
数据压缩方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114337678A CN114337678A CN202011050444.8A CN202011050444A CN114337678A CN 114337678 A CN114337678 A CN 114337678A CN 202011050444 A CN202011050444 A CN 202011050444A CN 114337678 A CN114337678 A CN 114337678A
- Authority
- CN
- China
- Prior art keywords
- data
- compression
- block
- target block
- dictionary
- 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.)
- Pending
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种数据压缩方法、装置、设备及存储介质,属于编码技术领域。所述方法包括:获取第一压缩结果,所述第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,所述拼接块包括参考块和拼接在所述参考块之后的目标块;基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;对所述目标块的编码数据进行熵编码,输出第二压缩结果。
Description
技术领域
本申请涉及编码技术领域,特别涉及一种数据压缩方法、装置、设备及存储介质。
背景技术
数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间的技术。Delta压缩是一种常被用在程序更新、补丁传输等增量更新场景中的数据压缩方案。例如,采用更新前的程序作为参考块,将需要更新的内容作为目标块,Delta压缩将目标块内在参考块中出现过的内容进行压缩,从而缩小目标块的数据量。
相关技术中,提供了一种基于软件实现的Delta压缩方案,实现过程如下:首先,基于字典压缩(例如LZ77)算法将目标块内在参考块中出现过的内容进行压缩;然后使用熵编码对字典压缩后的目标块进一步压缩,输出最终压缩结果。在字典压缩过程中,为了压缩目标块内在参考块中出现过的内容,需要对目标块和参考块中相同的内容进行查找,该查找过程通过哈希运算以及哈希表的查找实现。
该压缩方案在寻找目标块内在参考块中出现过的内容时,需要进行大量哈希运算以及哈希表的查找,上述计算通常由执行该软件压缩方案的处理器执行,计算量大,造成压缩速度慢。
发明内容
本申请提供了一种数据压缩方法、装置、设备及存储介质,通过软件和硬件结合的方式,实现目标块的Delta的压缩,提高数据压缩的速度。
第一方面,本申请的至少一实施例提供了一种数据压缩方法,包括如下步骤:
获取第一压缩结果,该第一压缩电路是由其他电路处理得到的,该第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,所述拼接块包括参考块和拼接在所述参考块之后的目标块;基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述目标块只经过字典压缩而未经过熵编码的数据;对所述目标块的编码数据进行熵编码,输出第二压缩结果,第二压缩结果也即最终要进行传输或存储的数据。
本申请先获取第一压缩结果,该第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,而本申请要得到的Delta压缩的压缩结果是针对目标块压缩的结果。因此,需要想办法从第一压缩结果中把目标块压缩的结果提取出来。由于在熵编码时,是将拼接块作为一个整体进行压缩的,且压缩结果并非线性结构,无法直接拆分出目标块对应的部分,也即无法直接从第一压缩结果中将目标块的最终压缩结果提取出来;而字典压缩是以字符串为单位进行压缩的,将目标块只进行了字典压缩的结果提取出来,也即基于第一压缩结果还原出熵编码前的压缩结果,然后将其中目标块的编码数据提取出来,然后再重新进行熵编码,得到第二压缩结果,该第二压缩结果为Delta压缩结果。在上述方案中,Delta压缩中的字典压缩过程是由其他电路实现的,因此,处理器在执行该Delta压缩方案时减少了大量的哈希运算以及哈希表的查找,也就减少了处理器资源的消耗,提高了压缩速度。
可选地,基于所述第一压缩结果获取所述目标块的编码数据,包括:
对所述第一压缩结果进行熵解码,得到所述拼接块经过字典压缩的数据;基于所述参考块或所述目标块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据。
为了提取字典压缩后的目标块,需要先对压缩电路输出的第一压缩结果进行熵解码,还原出拼接块经过字典压缩的数据,然后再根据参考块或目标块的长度,从拼接块经过字典压缩的数据中把属于目标块的编码数据提取出来。
这里,提取目标块的编码数据的方式有如下两种:
在一种可能的实现方式中,基于所述参考块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据,包括:
从所述拼接块经过字典压缩的数据的头部开始,按照所述参考块的长度确定所述参考块经过字典压缩后的数据;
提取所述拼接块经过字典压缩的数据中除所述参考块经过字典压缩后的数据之外的数据,得到所述目标块的编码数据。
在另一种可能的实现方式中,基于所述目标块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据,包括:
从所述拼接块经过字典压缩的数据的尾部开始,按照所述目标块的长度确定所述目标块的编码数据;
提取所述目标块的编码数据。
从上述两种实现方式可以看出,在提取目标块的编码数据时,既可以从拼接块经过字典压缩的数据头部开始确定出属于参考块的部分,然后提取剩下的部分,也可以从拼接块经过字典压缩的数据尾部直接确定出属于目标块的部分并进行提取。
示例性地,前述字典压缩是LZ77压缩。
相应地,拼接块经过字典压缩的数据包括三元组序列,所述三元组序列包括压缩后的三元组和未被压缩的字符,所述三元组包括匹配字符串的偏移、匹配字符串的长度和匹配字符串的下一字符,所述匹配字符串为在所述三元组表示的字符串之前,且与所述三元组表示的字符串相同的字符串。所述目标块的编码数据包括所述目标块对应的三元组和未被压缩的字符,也即长度之和等于所述目标块的长度的三元组和未被压缩的字符;所述参考块经过字典压缩后的数据包括所述参考块对应的三元组和未被压缩的字符,也即长度之和等于所述述参考块的长度的三元组和未被压缩的字符。
相应地,从所述拼接块经过字典压缩的数据的尾部开始,按照所述目标块的长度确定所述目标块的编码数据,包括:
基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于所述目标块的长度的三元组和未被压缩的字符,得到所述目标块对应的三元组和未被压缩的字符。
相应地,从所述拼接块经过字典压缩的数据的头部开始,按照所述参考块的长度确定所述参考块经过字典压缩后的数据,包括:
基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的头部开始,确定出长度之和等于所述参考块的长度的三元组和未被压缩的字符,得到所述参考块对应的三元组和未被压缩的字符。
也即是从头部或外部开始逐个确定三元组对应的长度,将三元组对应的长度和未被压缩的字符的长度加起来,直到长度之和等于参考块或目标块为止。
字典压缩后得到三元组序列,三元组序列中可能出现如下两种情况:
第一种情况是,三元组序列中属于参考块的部分和属于目标块的部分是完全分离的,也即不存在一个三元组对应的数据,部分属于参考块,部分属于目标块;而第二种情况则正好相反,例如三元组序列中的第一三元组对应的数据,部分属于所述参考块,部分属于所述目标块,也即压缩过程中,参考块尾部和目标块头部的数据被压缩到了同一个三元组中。
在第一种情况中,确定所述参考块经过字典压缩后的数据时,直接基于所述三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的头部开始,确定出长度之和等于所述参考块的长度的三元组和未被压缩的字符;或者,基于所述三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于所述目标块的长度的三元组和未被压缩的字符即可。
在第二种情况中,确定所述参考块经过字典压缩后的数据时,会出现如下情况:从所述拼接块经过字典压缩的数据的尾部开始确定属于所述目标块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的尾部到所述第一三元组的第一长度大于所述目标块的长度,并且所述第一长度与所述目标块的长度差小于所述第一三元组的长度;或者,从所述拼接块经过字典压缩的数据的头部开始确定属于所述参考块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的头部到所述第一三元组的第二长度大于所述参考块的长度,并且所述第二长度与所述参考块的长度差小于第一三元组的长度。
此时,如果要确定出参考块经过字典压缩后的数据或者目标块的编码数据,则先需要对第一三元组的数据进行还原,然后确定出其中属于参考块的部分或属于目标块的部分。
例如,解码所述第一三元组,得到所述第一三元组对应的字符串;
确定出所述第一三元组对应的字符串中属于所述参考块的部分,得到长度之和等于所述参考块的长度的三元组和未被压缩的字符;或者,确定出所述第一三元组对应的字符串中属于所述目标块的部分,得到长度之和等于所述目标块的长度的三元组和未被压缩的字符。
可选地,获取所述目标块的编码数据,还包括:
压缩所述第一三元组对应的字符串中属于所述目标块的部分,得到第二三元组,所述第二三元组属于所述目标块的编码数据。将第一三元组对应的字符串中属于所述目标块的部分压缩后加入目标块的编码数据中,保证压缩率。
在本申请实施例中,第一压缩结果由压缩电路压缩得到,压缩电路是指专门用来进行数据压缩的硬件电路。例如,将所述拼接块输入压缩电路,所述压缩电路用于对所述拼接块依次进行字典压缩和熵编码;接收所述压缩电路输出的所述第一压缩结果。
在相关技术中,压缩电路对数据块依次进行字典压缩和熵编码,压缩电路利用其并行优势,加速数据块的压缩过程。但是,相关技术中的压缩电路只能对数据块进行整体压缩,而不能实现Delta压缩。本申请将拼接块输入到压缩电路中进行压缩,利用压缩电路对拼接块进行高速压缩,但此时压缩的结果是整个拼接块的压缩结果,也即前述第一压缩结果。需要通过后续熵解码、目标块的编码数据的提取、重新熵编码等处理,实现对目标块的Delta压缩,既节省了处理器的资源,又保证了压缩速度。
示例性地,所述熵编码包括FSE编码、ANS编码或者哈夫曼编码。
第二方面,本申请的至少一实施例提供了一种数据压缩装置,所述装置包括:
第一获取单元,用于获取第一压缩结果,所述第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,所述拼接块包括参考块和拼接在所述参考块之后的目标块;
第二获取单元,用于基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;
编码单元,用于对所述目标块的编码数据进行熵编码,输出第二压缩结果。
第三方面,本申请的至少一实施例提供了一种数据压缩装置,所述数据压缩装置包括处理器和存储器;所述存储器用于存储软件程序以及模块,所述处理器通过运行或执行存储在所述存储器内的软件程序和/或模块实现上述第一方面的任一种可能的实施方式中的方法。
可选地,所述处理器为一个或多个,所述存储器为一个或多个。
可选地,所述存储器可以与所述处理器集成在一起,或者所述存储器与处理器分离设置。
在具体实现过程中,存储器可以为非瞬时性(non-transitory)存储器,例如只读存储器(read only memory,ROM),其可以与处理器集成在同一块芯片上,也可以分别设置在不同的芯片上,本申请实施例对存储器的类型以及存储器与处理器的设置方式不做限定。
第四方面,本申请的至少一实施例提供了一种计算机程序(产品),所述计算机程序(产品)包括:计算机程序代码,当所述计算机程序代码被计算机运行时,使得所述计算机执行上述第一方面的任一种可能的实施方式中的方法。
第五方面,本申请的至少一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储处理器所执行的程序代码,所述程序代码包括用于实现上述第一方面的任一种可能的实施方式中的方法。
第六方面,提供了一种芯片,包括处理器,处理器用于从存储器中调用并运行所述存储器中存储的指令,使得安装有所述芯片的通信设备执行上述第一方面的任一种可能的实施方式中的方法。
第七方面,提供另一种芯片,包括:输入接口、输出接口、处理器和存储器,所述输入接口、输出接口、所述处理器以及所述存储器之间通过内部连接通路相连,所述处理器用于执行所述存储器中的代码,当所述代码被执行时,所述处理器用于执行上述第一方面的任一种可能的实施方式中的方法。
第八方面,提供一种数据压缩设备,所述压缩设备包括:处理器和压缩电路,所述处理器和所述压缩电路连接;
所述处理器,用于将拼接块输入到压缩电路,所述拼接块包括参考块和拼接在所述参考块之后的目标块;
所述压缩电路,用于对所述拼接块依次进行字典压缩和熵编码,输出第一压缩结果;
所述处理器,还用于获取所述压缩电路输出的第一压缩结果;基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;对所述目标块的编码数据进行熵编码,输出第二压缩结果。
可选地,所述压缩电路为GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路。采用GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路实现对拼接块的字典压缩和熵编码。
附图说明
图1是本申请实施例提供的一种应用场景的示意图;
图2是本申请实施例提供的用户设备的结构示意图;
图3是本申请实施例提供的一种数据压缩方法的流程图;
图4是本申请实施例提供的另一种数据压缩方法的流程图;
图5是本申请实施例提供的一种目标块压缩过程示意图;
图6是本申请实施例提供的一种数据解压方法的流程图;
图7是本申请实施例提供的一种目标块解压过程示意图;
图8是本申请实施例提供的一种数据压缩装置的结构示意图;
图9是本申请实施例提供的一种数据压缩设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为便于对本申请实施例提供的技术方案的理解,首先介绍一下本申请的应用场景。
图1是本申请实施例所提供的应用场景的示意图。参见图1,在该场景中包括源端100和目标端200。
如图1所示,源端100和目标端200可以是2个独立的用户设备,源端100和目标端200通过中间网络300进行数据传输。在其他场景下,源端100和目标端200也可以位于同一个用户设备中,源端100和目标端200通过设备中的线路进行数据传输。
无论源端100和目标端200是1个用户设备,还是2个用户设备,源端100在向目标端200传输数据时,为了节省传输带宽,都可以先对要传输的数据进行压缩,然后再传输到目标端200,目标端200接收到压缩数据时,进行解压,得到原始数据。
示例性地,源端100采用Delta压缩的方式在传输前进行数据压缩,也即以参考块为参考进行目标块的压缩。该参考块同时存储在源端100和目标端200中,这样才能保证目标端200正确地进行目标块的解压,还原出原始数据。
这种压缩和传输方式适用于数据复制、程序更新、补丁传输等增量更新场景。例如,数据复制业务需要消耗较多带宽,在数据复制前进行Delta压缩,减小传输时的带宽消耗;同时,数据复制对时延有要求,如果Delta压缩速度慢,就会造成传输时延较大,本申请提供的数据压缩方法就是为了提高Delta压缩速度,减小处理器资源消耗。
本申请所涉及到的用户设备可以包括计算机设备、手持设备、车载设备、可穿戴设备或连接到无线调制解调器的其它设备,以及云设备,终端(terminal),终端设备(Terminal Equipment),监控设备,服务器等等。
图2为图1所示的应用场景中用户设备的一种可能的硬件结构示意图。如图2所示,用户设备包括处理器10、存储器20以及通信接口30。本领域技术人员可以理解,图2中示出的结构并不构成对该用户设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器10是用户设备的控制中心,利用各种接口和线路连接整个用户设备的各个部分,通过运行或执行存储在存储器20内的软件程序和/或模块,以及调用存储在存储器20内的数据,执行用户设备的各种功能和处理数据,从而对用户设备进行整体控制。处理器10可以是CPU,还可以是其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持进阶精简指令集机器(advanced RISC machines,ARM)架构的处理器。
存储器20可用于存储软件程序以及模块。处理器10通过运行存储在存储器20的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器20可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***21、第一获取模块22、第二获取模块23、编码模块24和一个或多个功能所需的应用程序25(比如编码应用程序等)等;存储数据区可存储根据UE或者目标服务器的使用所创建的数据(比如业务类型识别模型等)等。该存储器20可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用。例如,静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic random access memory,DRAM)、同步动态随机存取存储器(synchronousDRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambusRAM,DR RAM)。相应地,存储器20还可以包括存储器控制器,以提供处理器10对存储器20的访问。
其中,处理器20通过运行第一获取模块22执行以下功能:获取第一压缩结果,第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,拼接块包括参考块和拼接在参考块之后的目标块;处理器20通过运行第二获取模块23执行以下功能:基于第一压缩结果获取目标块的编码数据,目标块的编码数据是拼接块经过字典压缩的数据中目标块对应的数据;处理器20通过运行编码模块24执行以下功能:对目标块的编码数据进行熵编码,输出第二压缩结果。
本申请实施例还提供了一种芯片,包括处理器,处理器用于从存储器中调用并运行存储器中存储的指令,使得安装有芯片的通信设备执行本申请提供的任一种的数据压缩方法。
本申请实施例还提供了一种芯片,包括:输入接口、输出接口、处理器和存储器,输入接口、输出接口、处理器以及存储器之间通过内部连接通路相连,处理器用于执行存储器中的代码,当代码被执行时,处理器用于执行上述任一种的数据压缩方法。
应理解的是,上述处理器可以是CPU,还可以是其他通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,处理器可以是支持ARM架构的处理器。
进一步地,在一种可选的实施例中,上述处理器为一个或多个,存储器为一个或多个。可选地,存储器可以与处理器集成在一起,或者存储器与处理器分离设置。上述存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器还可以包括非易失性随机存取存储器。例如,存储器还可以存储参考块和目标块。
该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是ROM、PROM、EPROM、EEPROM或闪存。易失性存储器可以是RAM,其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用。例如,SRAM、DRAM、SDRAM、DDR SDRAM、ESDRAM、SLDRAM和DR RAM。
图3是本申请实施例提供的一种数据压缩方法的流程图。该方法可以由图1所示的应用场景中的源端执行,如图3所示,该方法包括如下步骤。
步骤S31:获取第一压缩结果,第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,拼接块包括参考块和拼接在参考块之后的目标块。
参考块和目标块可以为文本、图片、视频、程序安装文件等各种类型的数据块。通常,参考块和目标块之间具有相关性,例如,参考块为程序安装文件,目标块为该程序安装文件的更新包。再例如,在数据复制业务下,通过数据指纹确定出具有相关性的两个文件,已经传输的作为参考块,待传输的作为目标块。
将参考块和目标块存入到存储介质中连续的存储空间内,参考块和目标块即可组成前述拼接块。
字典压缩是指将字典中出现过的字符串采用符号替代,从而减小数据块大小的一种压缩方案,字典压缩中使用的字典可以是数据块中的,例如采用数据块中位于前面的字符串作为后面字符串的字典。常见的字典压缩算法包括但不限于LZ77压缩算法。
熵编码是指在编码过程中按熵原理不丢失任何信息的编码。常见的熵编码包括但不限于有限状态熵(finite state entropy,FSE)编码、非对称数系(asymmetric numeralsystem,ANS)编码和哈夫曼编码。
步骤S32:基于第一压缩结果获取目标块的编码数据。
这里,目标块的编码数据是拼接块经过字典压缩的数据中目标块对应的数据,但未经过熵编码。
步骤S33:对目标块的编码数据进行熵编码,输出第二压缩结果。
本申请先获取第一压缩结果,该第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,而本申请要得到的Delta压缩的压缩结果是针对目标块压缩的结果。因此,需要想办法从第一压缩结果中把目标块压缩的结果提取出来。由于在熵编码时,是将拼接块作为一个整体进行压缩的,且压缩结果并非线性结构,无法直接拆分出目标块对应的部分,也即无法直接从第一压缩结果中将目标块的最终压缩结果提取出来;而字典压缩是以字符串为单位进行压缩的,将目标块只进行了字典压缩的结果提取出来,也即基于第一压缩结果还原出熵编码前的压缩结果,然后将其中目标块的编码数据提取出来,然后再重新进行熵编码,得到第二压缩结果,该第二压缩结果为Delta压缩结果。在上述方案中,Delta压缩中的字典压缩过程是由其他电路实现的,因此,处理器在执行该Delta压缩方案时减少了大量的哈希运算以及哈希表的查找,也就减少了处理器资源的消耗,提高了压缩速度。
图4是本申请实施例提供的一种数据压缩方法的流程图。该方法可以由图1所示的应用场景中的源端执行,例如由源端中的处理器执行,如图4所示,该方法包括如下步骤。
步骤S41:依次将参考块和目标块输入到压缩电路。
其中,参考块和目标块形成前述拼接块。示例性地,先将参考块和目标块依次写入到内存中连续的存储空间内,然后通过内存通道输出给压缩电路。
步骤S42:获取压缩电路输出的第一压缩结果,第一压缩结果为压缩电路对拼接块依次进行字典压缩和熵编码得到的结果。
压缩电路是指将压缩算法做成专门的集成电路,利用电路的并行优势,加速压缩过程,也可以称为具有压缩功能的加速器电路。硬件实现的压缩算法比软件的实现速度快10~100倍以上。
压缩电路可以集成GZIP(GNUzip)算法或者ZSTD(zstandard)算法,其中,集成GZIP算法的压缩电路会对拼接块依次进行LZ77算法压缩和哈夫曼编码,集成ZSTD算法的压缩电路会对拼接块依次进行LZ77算法压缩和FSE编码。
其中,LZ77算法为字典压缩的一种,哈夫曼编码和FSE编码为熵编码,其中,FSE是基于ANS编码理论开发的一种新型熵编码。
示例性地,压缩电路可以为GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路。
在一种可能的实现方式中,GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路,是集成在芯片等大规模的集成电路中。
例如,华为的Kunpeng 920芯片中集成的GZIP压缩的硬件加速电路;
或者,Intel的计算加速卡芯片中集成的GZIP压缩的硬件加速电路,如C62XSeries Chipset、Communications Chipset 8925to 8955Series、Communications Chipset8960to 8970Series等系列芯片;
在另一种实现方式中,GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路,采用加载有GZIP压缩算法或ZSTD压缩算法软核的FPGA实现。
例如,CAST提供支持GZIP的软核,该软核可以加载到FPGA加速卡上,如ZipAccel-CTMGZIP/ZLIB/Deflate Compression IP Core软核。
步骤S43:对第一压缩结果进行熵解码,得到拼接块经过字典压缩的数据。
由于相关技术中提供的压缩电路目前只有集成GZIP算法或者ZSTD算法,而没有集成Delta压缩算法的,因此,在使用压缩电路进行拼接块处理后,并不能直接得到Delta压缩结果。因此,需要对压缩电路输出的第一压缩结果进行步骤S43~S45的处理。
压缩电路在对拼接块进行处理时,会依次进行字典压缩和熵编码。在熵编码时,是将拼接块作为一个整体进行压缩的,且压缩结果并非线性结构,所以无法直接从第一压缩结果中将目标块的压缩结果提取出来;而字典压缩是以字符串为单位进行压缩的,将只经过字典压缩的数据中属于目标块的部分提取出来,然后通过重新编码,得到目标块的压缩结果。同时,这样做保证了字典压缩仍然是由压缩电路完成的,能够达到提高Delta压缩速度,节省处理器的资源的效果。
为了将只经过字典压缩的数据中属于目标块的部分提取出来,则需要先对压缩电路输出的第一压缩结果进行解码,然后再从中提取属于目标块的部分。
在进行解码时,需要选用压缩电路中使用的编码算法对应的解码算法,如前,压缩电路在进行字典压缩后,使用的是熵编码进行的编码,则步骤S43中使用对应的熵解码算法即可。
例如,如果压缩电路使用的是GZIP压缩的硬件加速电路,熵编码为哈夫曼编码,则步骤S43中则采用哈夫曼解码进行第一压缩结果的解码。
再例如,如果压缩电路使用的是ZSTD压缩的硬件加速电路,熵编码为FSE编码,则步骤S43中则采用FSE解码进行第一压缩结果的解码。
在对第一压缩结果进行熵解码后,得到拼接块经过字典压缩的数据。如前,压缩电路使用的字典压缩通常为LZ77算法压缩,LZ77算法压缩得到的结果为三元组序列,也即拼接块经过字典压缩的数据包括三元组序列。
三元组序列包括压缩后的三元组和未被压缩的字符,三元组包括匹配字符串的偏移(offset)、匹配字符串的长度(length)和匹配字符串的下一字符(nextchar)。其中,匹配字符串为在三元组表示的字符串之前,且与三元组表示的字符串相同的字符串。
例如,拼接块为如下字符串:“ABC,BBC,ABC+BBC”;
字典压缩后得到的三元组序列如下:“ABC,B(4,2,A)(8,3,+)+(8,3,NULL)”;
该三元组序列中(4,2,A)、(8,3,+)、(8,3,NULL)为前述三元组,其中NULL表示空,三元组序列中的其余部分为未被压缩的字符。
以(4,2,A)为例,表示拼接块中第二个“BC,”,其距离第一个“BC,”的偏移为4个字符,该字符串的长度为2,该字符串的下一字符为“A”。
字典压缩在匹配相同字符串时,需要基于哈希运算以及查找哈希表来实现,若通过处理器记载软件执行,需要消耗处理器大量计算资源,本申请通过采用压缩电路来实现字典压缩,避免消耗处理器的资源,同时保证了整个Delta压缩的速度。
步骤S44:基于参考块或目标块的长度,从拼接块经过字典压缩的数据中,获取目标块的编码数据。
其中,目标块的编码数据是目标块经过字典压缩的数据,目标块的编码数据包括目标块对应的三元组和未被压缩的字符。需要说明的是,当目标块全部被压缩时,目标块对应的未被压缩的字符为空。
在拼接块经过字典压缩后,虽然其中包含有三元组,但每个三元组对应的字符串的长度是确定的,根据三元组中匹配字符串的长度即可确定。并且,三元组序列的排列顺序也与拼接块相同,因此,根据参考块或目标块的长度,从三元组序列中,确定出哪些属于参考块,哪些属于目标块,从而将目标块的编码数据分离处理。
示例性地,步骤S44有如下两种实现方式:
第一种,从拼接块经过字典压缩的数据的头部开始,按照参考块的长度确定参考块经过字典压缩后的数据;提取拼接块经过字典压缩的数据中除参考块经过字典压缩后的数据之外的数据,得到目标块的编码数据。
这里,从拼接块经过字典压缩的数据的尾部开始,按照目标块的长度确定目标块的编码数据,包括:
基于拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于目标块的长度的三元组和未被压缩的字符,得到目标块对应的三元组和未被压缩的字符。
第二种,从拼接块经过字典压缩的数据的尾部开始,按照目标块的长度确定目标块的编码数据;提取目标块的编码数据。
这里,从拼接块经过字典压缩的数据的头部开始,按照参考块的长度确定参考块经过字典压缩后的数据,包括:
基于拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从拼接块经过字典压缩的数据的头部开始,确定出长度之和等于参考块的长度的三元组和未被压缩的字符,得到参考块对应的三元组和未被压缩的字符。
以步骤S43中的拼接块“ABC,BBC,ABC+BBC”为例,其对应的三元组序列为:“ABC,B(4,2,A)(8,3,+)+(8,3,NULL)”,假设拼接块中“ABC,BBC,ABC”为参考块,“+BBC”为目标块。参考块的长度为11个字符,目标块的长度为4个字符。
采用第一种实现方式,从头部开始确定出三元组序列中长度为11个字符对应的部分为“ABC,B(4,2,A)(8,3,+)”,该部分也即参考块经过字典压缩后的数据,提取三元组序列中除了参考块经过字典压缩后的数据外的部分,也即“+(8,3,NULL)”,该部分即为目标块的编码数据。
采用第二种实现方式,从尾部开始确定出三元组序列中长度为4个字符对应的部分为“+(8,3,NULL)”,提取该部分,即得到目标块的编码数据。
由于压缩电路在进行字典压缩时,对参考块和目标块依次压缩,因此,三元组序列中可能出现如下两种情况:第一种情况是,三元组序列中属于参考块的部分和属于目标块的部分是完全分离的,也即不存在一个三元组对应的数据,部分属于参考块,部分属于目标块;而第二种情况则正好相反,出现参考块和目标块相邻部分的字符被压缩到同一个三元组中的情况,也即,三元组序列中存在第一三元组,第一三元组对应的数据,部分属于参考块,部分属于目标块,此时,无法直接提取出目标块的全部编码数据。
在第一种情况中,确定参考块经过字典压缩后的数据时,直接基于三元组表示的字符串的长度,从拼接块经过字典压缩的数据的头部开始,确定出长度之和等于参考块的长度的三元组和未被压缩的字符;或者,基于三元组表示的字符串的长度,从拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于目标块的长度的三元组和未被压缩的字符即可。
在第二种情况中,确定参考块经过字典压缩后的数据时,会出现如下情况:从拼接块经过字典压缩的数据的尾部开始确定属于目标块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从拼接块经过字典压缩的数据的尾部到第一三元组的第一长度大于目标块的长度,并且第一长度与目标块的长度差小于第一三元组的长度;或者,从拼接块经过字典压缩的数据的头部开始确定属于参考块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从拼接块经过字典压缩的数据的头部到第一三元组的第二长度大于参考块的长度,并且第二长度与参考块的长度差小于第一三元组的长度。
此时,如果要确定出参考块经过字典压缩后的数据或者目标块的编码数据,则先需要对第一三元组的数据进行还原,然后确定出其中属于参考块的部分或属于目标块的部分。
例如,解码第一三元组,得到第一三元组对应的字符串;
确定出第一三元组对应的字符串中属于参考块的部分,得到长度之和等于参考块的长度的三元组和未被压缩的字符;或者,确定出第一三元组对应的字符串中属于目标块的部分,得到长度之和等于目标块的长度的三元组和未被压缩的字符。
以步骤S43中的拼接块“ABC,BBC,ABC+BBC”为例,其对应的三元组序列为:“ABC,B(4,2,A)(8,3,+)+(8,3,NULL)”,假设拼接块中“ABC,BBC,A”为参考块,“BC+BBC”为目标块。参考块的长度为9个字符,目标块的长度为6个字符。
此时,目标块最开始的2个字符“BC”被压缩到了三元组“(8,3,+)”中,但该三元组对应的第一个字符“A”又属于参考块。以直接确定目标块的编码数据为例,这种情况下,从拼接块经过字典压缩的数据的尾部开始确定属于目标块的三元组和未被压缩的字符,直到确定出第一三元组,得到的结果为“(8,3,+)+(8,3,NULL)”,其中(8,3,+)即为第一三元组,先将第一三元组“(8,3,+)”解码为“ABC”,得到“ABC+(8,3,NULL)”,在“ABC”中“A”属于参考块,不属于目标块,“BC”属于目标块,不属于参考块,此时,将“ABC+(8,3,NULL)”中不属于目标块的“A”去掉,得到长度之和等于目标块的长度的三元组和未被压缩的字符“BC+(8,3,NULL)”,也即目标块的编码数据。
可选地,获取目标块的编码数据,还包括:
压缩第一三元组对应的字符串中属于目标块的部分,得到第二三元组,第二三元组属于目标块的编码数据。将第一三元组对应的字符串中属于目标块的部分压缩后加入目标块的编码数据中,保证压缩率。
例如,在将三元组“(8,3,+)”解码为“ABC”后,对属于目标块的部分“BC”进行压缩,得到三元组“(4,2,+)”,此时目标块的编码数据为“(4,2,+)+(8,3,NULL)”。
如果参考块和目标块相邻部分的字符未被压缩到同一个三元组中,或者参考块和目标块相邻部分的字符未被压缩,则无需执行上述步骤,直接从拼接块经过字典压缩的数据中获取目标块的编码数据即可。
需要说明的是,上述示例只是对字典压缩的过程进行说明,并不用于体现其压缩效果,因此字符串结构较为简单。
步骤S45:对目标块的编码数据进行熵编码,输出第二压缩结果。
在该步骤S45中,熵编码包括但不限于FSE编码、ANS编码或者哈夫曼编码。
图5示出了目标块压缩的示意图,参见图5,参考块和目标块经过步骤S41送入压缩电路进行压缩,然后通过步骤S42获取到压缩电路输出的第一压缩结果;通过步骤S43进行解码,得到拼接块只经过字典压缩的数据;然后通过步骤S44提取出其中目标块的压缩数据;最后通过步骤S45再进行熵编码,输出第二压缩结果。图5中两种不同的填充分别代表参考块和目标块对应的数据,而矩形大小代表数据量的多少,例如第一压缩结果对应的矩形相比于参考块和目标块组成的拼接块对应的矩形的面积较小,说明第一压缩结果是拼接块经过充分压缩的结果,再例如,拼接块只经过字典压缩的数据对应的矩形相比于第一压缩结果对应的矩形面积更大,说明经过步骤S43部分被压缩的内容得到了还原。
图6所示的过程中,从拼接块到第一压缩结果的压缩过程是由压缩电路完成的,后续步骤则是由处理器加载软件完成。压缩电路通过电路并行处理优势进行数据压缩,通过软硬件结合的方式,解放处理器的计算能力,同时增加了数据匹配的速度,从而提高整个压缩的速度。
图6是本申请实施例提供的一种数据解压方法的流程图,如图6所示,该方法可以由图1所示的应用场景中的目标端执行,该方法可以在图4所提供的数据压缩方法之后执行,该方法包括如下步骤:
步骤S51:获取第二压缩结果,也即经过压缩的目标块。
源端在压缩得到第二压缩结果后,将第二压缩结果传输给目标端。
步骤S52:对第二压缩结果进行熵解码,得到目标块的编码数据。
该步骤的解码方式和步骤S43相同。
步骤S53:基于参考块对目标块的编码数据进行解压,得到目标块。
目标端原本就存储有参考块,在接收到经过压缩的目标块后,基于参考块完成目标块的解压。
这里,源端在发送目标块的压缩结果前,先和目标端进行交互,确定目标端中存储有参考块,确定的方式可以基于文件的版本号或sha-256等实现。
图7示出了目标块解压的示意图,参见图7,目标端通过步骤S51获取到源端发送的第二压缩结果;然后通过步骤S52进行熵解码,得到目标块的编码数据;通过步骤S53对目标块的编码数据进行解压,得到目标块。在目标块字典压缩时,使用了参考块中的字符串作为字典,因此,在解压时,仍然需要使用参考块作为字典,例如将参考块拼接在目标块的编码数据之前,使得目标块的编码数据中的三元组正确地参考参考块中的字符串,还原出原本的字符串。
图8是本申请实施例提供的一种数据压缩装置的框图。该数据压缩装置可以通过软件、硬件或者两者的结合实现成为用户设备的全部或者一部分。该数据压缩装置可以包括:第一获取单元601、第二获取单元602和编码单元603。
其中,第一获取单元601,用于获取第一压缩结果,第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,拼接块包括参考块和拼接在参考块之后的目标块;
第二获取单元602,用于基于第一压缩结果获取目标块的编码数据,目标块的编码数据是拼接块经过字典压缩的数据中目标块对应的数据;
编码单元603,用于对目标块的编码数据进行熵编码,输出第二压缩结果。
在一种可能的实现方式中,第二获取单元602,包括:
解码子单元6021,用于对第一压缩结果进行熵解码,得到拼接块经过字典压缩的数据;
获取子单元6022,用于基于目标块的长度,从拼接块经过字典压缩的数据中,获取目标块的编码数据。
在另一种可能的实现方式中,第二获取单元602,包括:
解码子单元6021,用于对第一压缩结果进行熵解码,得到拼接块经过字典压缩的数据;
获取子单元6022,用于基于参考块的长度,从拼接块经过字典压缩的数据中,获取目标块的编码数据。
可选地,获取子单元6022,用于从拼接块经过字典压缩的数据的尾部开始,按照目标块的长度确定目标块的编码数据;提取目标块的编码数据。
可选地,获取子单元6022,用于从拼接块经过字典压缩的数据的头部开始,按照参考块的长度确定参考块经过字典压缩的数据;提取拼接块经过字典压缩的数据中除参考块经过字典压缩的数据之外的数据,得到目标块的编码数据。
可选地,拼接块经过字典压缩的数据包括三元组序列,三元组序列包括三元组和未被压缩的字符,三元组包括匹配字符串的偏移、匹配字符串的长度和匹配字符串的下一字符,匹配字符串为在三元组表示的字符串之前,且与三元组表示的字符串相同的字符串;目标块的编码数据包括目标块对应的三元组和未被压缩的字符;
获取子单元6022,用于基于拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于目标块的长度的三元组和未被压缩的字符,得到目标块对应的三元组和未被压缩的字符。
可选地,拼接块经过字典压缩的数据包括三元组序列,三元组序列包括三元组和未被压缩的字符,三元组包括匹配字符串的偏移、匹配字符串的长度和匹配字符串的下一字符,匹配字符串为在三元组表示的字符串之前,且与三元组表示的字符串相同的字符串;参考块经过字典压缩后的数据包括参考块对应的三元组和未被压缩的字符;
获取子单元6022,用于基于拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从拼接块经过字典压缩的数据的头部开始,确定出长度之和等于参考块的长度的三元组和未被压缩的字符,得到参考块对应的三元组和未被压缩的字符。
可选地,获取子单元6022,用于从拼接块经过字典压缩的数据的尾部开始确定属于目标块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从拼接块经过字典压缩的数据的尾部到第一三元组的第一长度大于目标块的长度,并且第一长度与目标块的长度差小于第一三元组的长度;
解码子单元6021,还用于解码第一三元组,得到第一三元组对应的字符串;
获取子单元6022,还用于确定出第一三元组对应的字符串中属于目标块的部分,得到长度之和等于目标块的长度的三元组和未被压缩的字符。
可选地,获取子单元6022,用于从拼接块经过字典压缩的数据的头部开始确定属于参考块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从拼接块经过字典压缩的数据的头部到第一三元组的第二长度大于参考块的长度,并且第二长度与参考块的长度差小于第一三元组的长度;
解码子单元6021,还用于解码第一三元组,得到第一三元组对应的字符串;
获取子单元6022,还用于确定出第一三元组对应的字符串中属于参考块的部分,得到长度之和等于参考块的长度的三元组和未被压缩的字符。
可选地,第二获取单元602,还包括:
压缩子单元6023,用于压缩第一三元组对应的字符串中属于目标块的部分,得到第二三元组,第二三元组属于目标块的编码数据。
可选地,第一获取单元601,包括:
输入子单元6011,用于将拼接块输入压缩电路,压缩电路用于对拼接块依次进行字典压缩和熵编码;
接收子单元6012,用于接收压缩电路输出的第一压缩结果。
需要说明的是:上述实施例提供的数据压缩装置在进行数据压缩时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将设备的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据压缩装置与数据压缩方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图9是本申请实施例提供的一种数据压缩设备的框图。该压缩设备包括:处理器701和压缩电路702,处理器701和压缩电路702连接;
其中,处理器701,用于将拼接块输入到压缩电路702,拼接块包括参考块和拼接在参考块之后的目标块;压缩电路702,用于对拼接块依次进行字典压缩和熵编码,输出第一压缩结果;处理器701,还用于获取压缩电路输出的第一压缩结果;基于第一压缩结果获取目标块的编码数据,目标块的编码数据是拼接块经过字典压缩的数据中目标块对应的数据;对目标块的编码数据进行熵编码,输出第二压缩结果。
示例性地,处理器701包括但不限于中央处理器(central processing unit,CPU)、数字信号处理器(digital signal processing,DSP)等处理单元。
示例性地,压缩电路702为GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路,参见前文关于压缩电路702的实现说明。采用GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路实现对拼接块的字典压缩和熵编码。
上述各个附图对应的流程的描述各有侧重,某个流程中没有详述的部分,可以参见其他流程的相关描述。
本申请实施例中,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,当计算机可读存储介质中存储的计算机指令被计算机设备执行时,使得计算机设备执行上述所提供的数据压缩方法。
本申请实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得计算机设备执行上述所提供的数据压缩方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid StateDisk)等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。
Claims (26)
1.一种数据压缩方法,其特征在于,所述方法包括:
获取第一压缩结果,所述第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,所述拼接块包括参考块和拼接在所述参考块之后的目标块;
基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;
对所述目标块的编码数据进行熵编码,输出第二压缩结果。
2.根据权利要求1所述的方法,其特征在于,基于所述第一压缩结果获取所述目标块的编码数据,包括:
对所述第一压缩结果进行熵解码,得到所述拼接块经过字典压缩的数据;
基于所述目标块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据。
3.根据权利要求1所述的方法,其特征在于,基于所述第一压缩结果获取所述目标块的编码数据,包括:
对所述第一压缩结果进行熵解码,得到所述拼接块经过字典压缩的数据;
基于所述参考块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据。
4.根据权利要求2所述的方法,其特征在于,基于所述目标块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据,包括:
从所述拼接块经过字典压缩的数据的尾部开始,按照所述目标块的长度确定所述目标块的编码数据;
提取所述目标块的编码数据。
5.根据权利要求3所述的方法,其特征在于,基于所述参考块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据,包括:
从所述拼接块经过字典压缩的数据的头部开始,按照所述参考块的长度确定所述参考块经过字典压缩的数据;
提取所述拼接块经过字典压缩的数据中除所述参考块经过字典压缩的数据之外的数据,得到所述目标块的编码数据。
6.根据权利要求4所述的方法,其特征在于,所述拼接块经过字典压缩的数据包括三元组序列,所述三元组序列包括三元组和未被压缩的字符,所述三元组包括匹配字符串的偏移、所述匹配字符串的长度和所述匹配字符串的下一字符,所述匹配字符串为在所述三元组表示的字符串之前,且与所述三元组表示的字符串相同的字符串;所述目标块的编码数据包括所述目标块对应的三元组和未被压缩的字符;
从所述拼接块经过字典压缩的数据的尾部开始,按照所述目标块的长度确定所述目标块的编码数据,包括:
基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于所述目标块的长度的三元组和未被压缩的字符,得到所述目标块对应的三元组和未被压缩的字符。
7.根据权利要求5所述的方法,其特征在于,所述拼接块经过字典压缩的数据包括三元组序列,所述三元组序列包括三元组和未被压缩的字符,所述三元组包括匹配字符串的偏移、所述匹配字符串的长度和所述匹配字符串的下一字符,所述匹配字符串为在所述三元组表示的字符串之前,且与所述三元组表示的字符串相同的字符串;所述参考块经过字典压缩后的数据包括所述参考块对应的三元组和未被压缩的字符;
从所述拼接块经过字典压缩的数据的头部开始,按照所述参考块的长度确定所述参考块经过字典压缩后的数据,包括:
基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的头部开始,确定出长度之和等于所述参考块的长度的三元组和未被压缩的字符,得到所述参考块对应的三元组和未被压缩的字符。
8.根据权利要求6所述的方法,其特征在于,从所述拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于所述目标块的长度的三元组和未被压缩的字符,包括:
从所述拼接块经过字典压缩的数据的尾部开始确定属于所述目标块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的尾部到所述第一三元组的第一长度大于所述目标块的长度,并且所述第一长度与所述目标块的长度差小于所述第一三元组的长度;
解码所述第一三元组,得到所述第一三元组对应的字符串;
确定出所述第一三元组对应的字符串中属于所述目标块的部分,得到所述长度之和等于所述目标块的长度的三元组和未被压缩的字符。
9.根据权利要求7所述的方法,其特征在于,从所述拼接块经过字典压缩的数据的头部开始,确定出长度之和等于所述参考块的长度的三元组和未被压缩的字符,包括:
从所述拼接块经过字典压缩的数据的头部开始确定属于所述参考块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的头部到所述第一三元组的第二长度大于所述参考块的长度,并且所述第二长度与所述参考块的长度差小于第一三元组的长度;
解码所述第一三元组,得到所述第一三元组对应的字符串;
确定出所述第一三元组对应的字符串中属于所述参考块的部分,得到所述长度之和等于所述参考块的长度的三元组和未被压缩的字符。
10.根据权利要求8或9所述的方法,其特征在于,获取所述目标块的编码数据,还包括:
压缩所述第一三元组对应的字符串中属于所述目标块的部分,得到第二三元组,所述第二三元组属于所述目标块的编码数据。
11.根据权利要求1至10任一项所述的方法,其特征在于,所述获取第一压缩结果,包括:
将所述拼接块输入压缩电路,所述压缩电路用于对所述拼接块依次进行字典压缩和熵编码;
接收所述压缩电路输出的所述第一压缩结果。
12.一种数据压缩装置,其特征在于,所述装置包括:
第一获取单元,用于获取第一压缩结果,所述第一压缩结果是拼接块依次经过字典压缩和熵编码的数据,所述拼接块包括参考块和拼接在所述参考块之后的目标块;
第二获取单元,用于基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;
编码单元,用于对所述目标块的编码数据进行熵编码,输出第二压缩结果。
13.根据权利要求12所述的装置,其特征在于,所述第二获取单元,包括:
解码子单元,用于对所述第一压缩结果进行熵解码,得到所述拼接块经过字典压缩的数据;
获取子单元,用于基于所述目标块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据。
14.根据权利要求12所述的装置,其特征在于,所述第二获取单元,包括:
解码子单元,用于对所述第一压缩结果进行熵解码,得到所述拼接块经过字典压缩的数据;
获取子单元,用于基于所述参考块的长度,从所述拼接块经过字典压缩的数据中,获取所述目标块的编码数据。
15.根据权利要求13所述的装置,其特征在于,所述获取子单元,用于从所述拼接块经过字典压缩的数据的尾部开始,按照所述目标块的长度确定所述目标块的编码数据;提取所述目标块的编码数据。
16.根据权利要求14所述的装置,其特征在于,所述获取子单元,用于从所述拼接块经过字典压缩的数据的头部开始,按照所述参考块的长度确定所述参考块经过字典压缩的数据;提取所述拼接块经过字典压缩的数据中除所述参考块经过字典压缩的数据之外的数据,得到所述目标块的编码数据。
17.根据权利要求15所述的装置,其特征在于,所述拼接块经过字典压缩的数据包括三元组序列,所述三元组序列包括三元组和未被压缩的字符,所述三元组包括匹配字符串的偏移、所述匹配字符串的长度和所述匹配字符串的下一字符,所述匹配字符串为在所述三元组表示的字符串之前,且与所述三元组表示的字符串相同的字符串;所述目标块的编码数据包括所述目标块对应的三元组和未被压缩的字符;
所述获取子单元,用于基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的尾部开始,确定出长度之和等于所述目标块的长度的三元组和未被压缩的字符,得到所述目标块对应的三元组和未被压缩的字符。
18.根据权利要求16所述的装置,其特征在于,所述拼接块经过字典压缩的数据包括三元组序列,所述三元组序列包括三元组和未被压缩的字符,所述三元组包括匹配字符串的偏移、所述匹配字符串的长度和所述匹配字符串的下一字符,所述匹配字符串为在所述三元组表示的字符串之前,且与所述三元组表示的字符串相同的字符串;所述参考块经过字典压缩后的数据包括所述参考块对应的三元组和未被压缩的字符;
所述获取子单元,用于基于所述拼接块经过字典压缩的数据中的每个三元组表示的字符串的长度,从所述拼接块经过字典压缩的数据的头部开始,确定出长度之和等于所述参考块的长度的三元组和未被压缩的字符,得到所述参考块对应的三元组和未被压缩的字符。
19.根据权利要求17所述的装置,其特征在于,所述获取子单元,用于从所述拼接块经过字典压缩的数据的尾部开始确定属于所述目标块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的尾部到所述第一三元组的第一长度大于所述目标块的长度,并且所述第一长度与所述目标块的长度差小于所述第一三元组的长度;
所述解码子单元,还用于解码所述第一三元组,得到所述第一三元组对应的字符串;
所述获取子单元,还用于确定出所述第一三元组对应的字符串中属于所述目标块的部分,得到所述长度之和等于所述目标块的长度的三元组和未被压缩的字符。
20.根据权利要求18所述的装置,其特征在于,所述获取子单元,用于从所述拼接块经过字典压缩的数据的头部开始确定属于所述参考块的三元组和未被压缩的字符,直到确定出第一三元组;其中,从所述拼接块经过字典压缩的数据的头部到所述第一三元组的第二长度大于所述参考块的长度,并且所述第二长度与所述参考块的长度差小于第一三元组的长度;
所述解码子单元,还用于解码所述第一三元组,得到所述第一三元组对应的字符串;
所述获取子单元,还用于确定出所述第一三元组对应的字符串中属于所述参考块的部分,得到所述长度之和等于所述参考块的长度的三元组和未被压缩的字符。
21.根据权利要求19或20所述的装置,其特征在于,所述第二获取单元,还包括:
压缩子单元,用于压缩所述第一三元组对应的字符串中属于所述目标块的部分,得到第二三元组,所述第二三元组属于所述目标块的编码数据。
22.根据权利要求12至21任一项所述的装置,其特征在于,所述第一获取单元,包括:
输入子单元,用于将所述拼接块输入压缩电路,所述压缩电路用于对所述拼接块依次进行字典压缩和熵编码;
接收子单元,用于接收所述压缩电路输出的所述第一压缩结果。
23.一种数据压缩装置,其特征在于,所述数据压缩装置包括处理器和存储器;所述存储器用于存储软件程序以及模块,所述处理器通过运行或执行存储在所述存储器内的软件程序和/或模块实现如权利要求1至11任一项所述的方法。
24.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储处理器所执行的程序代码,所述程序代码包括用于实现如权利要求1至11任一项所述的方法的指令。
25.一种数据压缩设备,其特征在于,所述压缩设备包括:处理器和压缩电路,所述处理器和所述压缩电路连接;
所述处理器,用于将拼接块输入到压缩电路,所述拼接块包括参考块和拼接在所述参考块之后的目标块;
所述压缩电路,用于对所述拼接块依次进行字典压缩和熵编码,输出第一压缩结果;
所述处理器,还用于获取所述压缩电路输出的第一压缩结果;基于所述第一压缩结果获取所述目标块的编码数据,所述目标块的编码数据是所述拼接块经过字典压缩的数据中所述目标块对应的数据;对所述目标块的编码数据进行熵编码,输出第二压缩结果。
26.根据权利要求25所述的设备,其特征在于,所述压缩电路为GZIP压缩的硬件加速电路或者ZSTD压缩的硬件加速电路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011050444.8A CN114337678A (zh) | 2020-09-29 | 2020-09-29 | 数据压缩方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011050444.8A CN114337678A (zh) | 2020-09-29 | 2020-09-29 | 数据压缩方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114337678A true CN114337678A (zh) | 2022-04-12 |
Family
ID=81011060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011050444.8A Pending CN114337678A (zh) | 2020-09-29 | 2020-09-29 | 数据压缩方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114337678A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115065732A (zh) * | 2022-06-08 | 2022-09-16 | 珠海格力电器股份有限公司 | 数据传输方法、装置、电子设置及存储介质 |
CN117097442A (zh) * | 2023-10-19 | 2023-11-21 | 深圳大普微电子股份有限公司 | 一种数据解码方法、***、设备及计算机可读存储介质 |
WO2024105793A1 (ja) * | 2022-11-15 | 2024-05-23 | 株式会社メガチップス | メモリシステム、復号回路、及び符号化データ生成方法 |
WO2024130889A1 (zh) * | 2022-12-22 | 2024-06-27 | 深圳大普微电子科技有限公司 | 一种数据压缩方法、***、设备及计算机可读存储介质 |
-
2020
- 2020-09-29 CN CN202011050444.8A patent/CN114337678A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115065732A (zh) * | 2022-06-08 | 2022-09-16 | 珠海格力电器股份有限公司 | 数据传输方法、装置、电子设置及存储介质 |
CN115065732B (zh) * | 2022-06-08 | 2023-08-11 | 珠海格力电器股份有限公司 | 数据传输方法、装置、电子设置及存储介质 |
WO2024105793A1 (ja) * | 2022-11-15 | 2024-05-23 | 株式会社メガチップス | メモリシステム、復号回路、及び符号化データ生成方法 |
JP7493062B1 (ja) | 2022-11-15 | 2024-05-30 | 株式会社メガチップス | メモリシステム、復号回路、及び符号化データ生成方法 |
WO2024130889A1 (zh) * | 2022-12-22 | 2024-06-27 | 深圳大普微电子科技有限公司 | 一种数据压缩方法、***、设备及计算机可读存储介质 |
CN117097442A (zh) * | 2023-10-19 | 2023-11-21 | 深圳大普微电子股份有限公司 | 一种数据解码方法、***、设备及计算机可读存储介质 |
CN117097442B (zh) * | 2023-10-19 | 2024-01-16 | 深圳大普微电子股份有限公司 | 一种数据解码方法、***、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107395209B (zh) | 数据压缩方法、数据解压缩方法及其设备 | |
CN114337678A (zh) | 数据压缩方法、装置、设备及存储介质 | |
US11463102B2 (en) | Data compression method, data decompression method, and related apparatus, electronic device, and system | |
US7924183B2 (en) | Method and system for reducing required storage during decompression of a compressed file | |
RU2630750C1 (ru) | Устройство и способ для кодирования и декодирования исходных данных | |
US9225355B2 (en) | Boosting decompression in the presence of reoccurring Huffman trees | |
US8254700B1 (en) | Optimized method and system for entropy coding | |
CN107888197B (zh) | 一种数据压缩方法和装置 | |
US9836248B2 (en) | In-memory data compression complementary to host data compression | |
US9966971B2 (en) | Character conversion | |
US7821426B2 (en) | Adaptive entropy coding compression output formats | |
CN108377394B (zh) | 视频编码器的图像数据读取方法、计算机装置及计算机可读存储介质 | |
CN112584155B (zh) | 一种视频数据处理方法和装置 | |
US10601441B2 (en) | Efficient software closing of hardware-generated encoding context | |
CN106293542B (zh) | 一种文件解压缩的方法及装置 | |
CN112380196A (zh) | 一种用于数据压缩传输的服务器 | |
CN111510716A (zh) | 通过图像文件的像素变换提高压缩率的方法和*** | |
CN113014551B (zh) | 数据解压缩方法和基于其的数据传输方法、计算机设备和可读存储介质 | |
US10505713B2 (en) | Compression and/or encryption of a file | |
CN111405293A (zh) | 一种视频传输方法及装置 | |
CN113765854B (zh) | 一种数据压缩方法及服务器 | |
US10168909B1 (en) | Compression hardware acceleration | |
CN117827775A (zh) | 数据压缩方法、装置、计算设备及存储*** | |
CN116418997A (zh) | 特征数据压缩方法、装置、***、电子设备及存储介质 | |
CN107690071B (zh) | 图像数据的压缩方法和装置 |
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 |