CN110419036B - 数据压缩方法、设备与计算设备 - Google Patents
数据压缩方法、设备与计算设备 Download PDFInfo
- Publication number
- CN110419036B CN110419036B CN201680089676.XA CN201680089676A CN110419036B CN 110419036 B CN110419036 B CN 110419036B CN 201680089676 A CN201680089676 A CN 201680089676A CN 110419036 B CN110419036 B CN 110419036B
- Authority
- CN
- China
- Prior art keywords
- data
- byte
- hash
- compressed
- value
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Storage Device Security (AREA)
Abstract
一种数据压缩方法,常用于存储阵列中。该方法通过将待压缩数据所在的存储空间的起始逻辑地址的末尾n bit地址设置为0,使得后续对该待压缩数据进行压缩的过程中,对哈希表的读写操作均更加简单,提升了压缩速度。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及数据压缩方法,以及该方法对应的数据压缩设备,以及用于执行该数据压缩方法的计算设备。
背景技术
压缩技术被广泛使用在数据存储、数据传输等领域,传统压缩技术包括了字典压缩,又称为Abraham Lempel and Jacob Ziv(简称:LZ)压缩。LZ压缩有着众多的压缩编码分支,如LZ4、LZ5、LZO、LZH等,这些压缩编码的共同特点是在当前数据进行编码时均会使用历史数据作为字典。
LZ压缩以字节/字符串的粒度进行数据压缩。以待压缩的数据block为4M Byte且窗口大小为4Byte为例,在压缩当前窗口内的4Byte数据时,会使用当前窗口内的4Byte与该待压缩数据block的历史数据进行匹配,如果该待压缩数据block的历史数据中存在与该4Byte数据相同的数据,那么该4Byte数据对应的编码只需要记录该历史数据的位置信息和长度,这样在解压缩的过程中,根据该4Byte数据对应的编码,就可以恢复出该4Byte数据。当前的LZ压缩的压缩速度仍有待提高。
发明内容
本申请提供了一种数据压缩方法,以提升数据压缩的速度。
本申请的第一方面,提供了一种由存储控制器或者数据压缩设备执行的数据压缩方法,包括:首先分配存储空间,该存储空间的起始逻辑地址的末尾N bit为0,N为大于1的整数。实际中,N的取值与后续处理的待压缩数据的大小相关。
然后,将待压缩数据存入该存储空间,该待压缩数据的大小为2nByte,n不大于N,这样该待压缩数据的起始逻辑地址的末尾N bit均为0,由于该待压缩数据的大小不大于2NByte,那么该待压缩数据的起始逻辑地址的有效部分均为0,而该待压缩数据的的起始逻辑地址的高于n bit的部分均为无效部分,因为待压缩数据的每个Byte数据的逻辑地址中高于n bit的部分均相同。
随后,对该待压缩数据的第a Byte数据到第a+m Byte数据进行哈希运算生成哈希值,a为大于0的整数,m为大于0的整数且(m+1)为进行该哈希运算的窗口的大小。随着窗口的起点从该待压缩数据的第1Byte数据往右移,a的取值可以从1取到(2n-m)。
随后,判断哈希表中是否存在与该哈希值相同的key,该哈希表的key为该第a+mByte数据的(m+1)Byte历史数据进行哈希运算生成的哈希值,该哈希表的value包括该第a+m Byte数据的(m+1)Byte历史数据的起始逻辑地址的末尾n bit。判断该哈希表中是否存储于该哈希值相同的key,也即用该哈希值逐个匹配该哈希表中的key,如果有匹配上的key,则说明该第a Byte数据到第a+m Byte数据在该待压缩数据的历史数据中出现过,如果没有匹配上的key,则说明该第a Byte数据到第a+m Byte数据在该待压缩数据中首次出现。
根据上一步骤的判断结果,若该哈希表中存在与该哈希值相同的key,根据该第aByte数据的逻辑地址的末尾n bit更新该哈希表中该哈希值对应的value;若该哈希表中不存在与该哈希值相同的key,将该哈希值和该待压缩数据的第a Byte数据的逻辑地址的末尾n bit加入该哈希表。
如果该第a Byte数据到第a+m Byte数据在其历史数据中出现过,则需要用该第aByte数据到第a+m Byte数据的起始逻辑地址替换记录在该哈希表中记录的该历史数据的起始逻辑地址。如果该第a Byte数据到第a+m Byte数据在该待压缩数据中首次出现,则将该哈希值和该待压缩数据的第a Byte数据的逻辑地址的末尾n bit插入该哈希表的新一行中,以便窗口继续右移后,后续的(m+1)Byte数据中如果有与该第a Byte数据到第a+m Byte相同的,可以匹配上该插入的行。
由于对该哈希表value的读写的最小粒度为Byte,因此如果n不为4的整数倍,则用于替换或加入到该哈希表的value的内容,除了包括该待压缩数据的第a Byte数据的逻辑地址的末尾n bit外,还可能包括高于n bit的1或多个bit。例如n=14的情况下,由于至少需要替换或加入4Byte内容到该哈希表的value,因此需要替换或加入该待压缩数据的第aByte数据的逻辑地址的末尾16bit。
以上提供的数据压缩方法,通过将用于存储待压缩数据的存储空间的起始逻辑地址的末尾N bit设置为0,简化了数据压缩过程中对哈希表的操作,提升了数据压缩速度。
结合第一方面,在第一方面的第一种实现方式中,该待压缩数据包括多个数据block。
将多个数据block同时存入存储空间并进行压缩,相对于每次仅对单个数据block进行压缩,提升了压缩率。
结合第一方面或第一方面的第一种实现方式,在第一方面的第二种实现方式中,在判断哈希表中是否存在与该哈希值相同的key前,还包括:判断该待压缩数据的大小是否大于2K Byte,K为大于0的整数。若该待压缩数据的大小大于2K Byte,设置该哈希表的value的长度不少于(K/8+1)Byte,也即如果待压缩数据的长度大于2K Byte,则最少需要用(K/8+1)Byte才能表达待压缩数据的相对地址,。与之相对的,若该待压缩数据的大小小于或等于2K Byte,设置该哈希表的value的长度不少于K/8Byte,也即如果待压缩数据的长度不大于2K Byte,则用K/8Byte就能表达待压缩数据的相对地址。
通过在用该哈希值匹配该哈希表中的key前判断待压缩数据的大小,得以确定需要写入该哈希表的value的待压缩数据的逻辑地址的长度。相对于在每次对哈希表进行更新或写入操作时,再判断需要写入该哈希表的待压缩数据的逻辑地址的长度,提升了压缩速度。
结合第一方面的第二种实现方式,在第一方面的第三种实现方式中,若该待压缩数据的大小大于2K Byte,则根据该第a Byte数据的逻辑地址的末尾n bit更新该哈希表中该哈希值对应的value后,该方法还包括:若该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差小于2K,则将该待压缩数据中该第a Byte数据及该第a Byte数据后的数据与该待压缩数据中该第aByte数据的历史数据进行匹配,根据匹配结果生成压缩编码;若该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差不小于2K,则不将该待压缩数据中该第a Byte数据及该第a Byte数据后的数据与该待压缩数据中该第a Byte数据的历史数据进行匹配。
数据压缩算法中包括如下设置:当该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差不小于2K时放弃本轮窗口的匹配。在采用了该设置的情况下,如果该待压缩数据的大小大于2K Byte,那么就有可能出现该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差不小于2K的可能性。而在采用了该设置的情况下,如果该待压缩数据的大小不大于2K Byte,则该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差必然不大于2K,因此仅在如果该待压缩数据的大小大于2K Byte的情况下,才需要对该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差是否大于2K进行判断。通过对该待压缩数据的大小是否大于2K Byte提前进行判断,在如果该待压缩数据的大小不大于2K Byte的情况下,无须对该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差是否大于或等于2K进行判断,节省了数据压缩中的判断流程,提升了压缩速度。
结合第一方面的第三种实现方式,在第一方面的第四种实现方式中,在根据匹配结果生成压缩编码后,还包括:判断该第a+m Byte数据是否为该待压缩数据的最后1Byte数据,若是,则结束对该待压缩数据的编码,若不是,则将进行该哈希运算的窗口右移。
本申请的第二方面,提供了一种数据压缩设备,包括:通信接口和处理芯片,该通信接口与该处理芯片相连。该通信接口用于与外部设备通信相连以获取待压缩的数据。该处理芯片,用于分配存储空间,该存储空间的起始逻辑地址的末尾N bit为0,N为大于1的整数;该通信接口,用于获取待压缩数据,并将该待压缩数据存入该存储空间,该待压缩数据的大小为2nByte,n不大于N;该处理芯片,还用于对该待压缩数据的第a Byte数据到第a+mByte数据进行哈希运算生成哈希值,a为大于0的整数,m为大于0的整数且(m+1)为进行该哈希运算的窗口的大小;判断哈希表中是否存在与该哈希值相同的key,该哈希表的key为该第a+m Byte数据的(m+1)Byte历史数据进行哈希运算生成的哈希值,该哈希表的value包括该第a+m Byte数据的(m+1)Byte历史数据的起始逻辑地址的末尾n bit,若该哈希表中存在与该哈希值相同的key,根据该第a Byte数据的逻辑地址的末尾n bit更新该哈希表中该哈希值对应的value,若该哈希表中不存在与该哈希值相同的key,将该哈希值和该待压缩数据的第a Byte数据的逻辑地址的末尾n bit加入该哈希表。
以上提供的数据压缩设备,通过将用于存储待压缩数据的存储空间的起始逻辑地址的末尾N bit设置为0,简化了数据压缩过程中对哈希表的操作,提升了数据压缩速度。
结合第二方面,在第二方面的第一种实现方式中,该待压缩数据包括多个数据block。
该数据压缩设备能够将多个数据block同时存入存储空间并进行压缩,相对于每次仅对单个数据block进行压缩,提升了压缩率。
结合第二方面或第二方面的第一种实现方式,在第二方面的第二种实现方式中,该处理芯片判断哈希表中是否存在与该哈希值相同的key前,还用于判断该待压缩数据的大小是否大于2K Byte,K为大于0的整数;若该待压缩数据的大小大于2K Byte,设置该哈希表的value的长度不少于(K/8+1)Byte;若该待压缩数据的大小小于或等于2K Byte,设置该哈希表的value的长度不少于K/8Byte。
该数据压缩设备通过在用该哈希值匹配该哈希表中的key前判断待压缩数据的大小,确定需要写入该哈希表的value的逻辑地址的长度,提升了压缩速度。
结合第二方面的第二种实现方式,在第二方面的第三种实现方式中,若该待压缩数据的大小大于2K Byte,则该处理芯片在根据该第a Byte数据的逻辑地址的末尾n bit更新该哈希表中该哈希值对应的value后,还用于若该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差小于2K,则将该待压缩数据中该第a Byte数据及该第a Byte数据后的数据与该待压缩数据中该第a Byte数据的历史数据进行匹配,根据匹配结果生成压缩编码;以及若该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差不小于2K,则不将该待压缩数据中该第a Byte数据及该第a Byte数据后的数据与该待压缩数据中该第a Byte数据的历史数据进行匹配。
该数据压缩设备通过对该待压缩数据的大小是否大于2K Byte提前进行判断,在如果该待压缩数据的大小不大于2K Byte的情况下,无须对该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希表中该哈希值对应的value之差是否大于或等于2K进行判断,节省了判断流程,进一步提升了压缩速度。
结合第二方面的第三种实现方式,在第二方面的第四种实现方式中,该处理芯片在根据匹配结果生成压缩编码后,还用于判断该第a+m Byte数据是否为该待压缩数据的最后1Byte数据,若是,则结束对该待压缩数据的编码,若不是,则将进行该哈希运算的窗口右移。
本申请第三方面提供了一种计算设备,该计算设备包括处理器、存储器。该处理器和该存储器通过总线建立通信连接,该处理器运行时读取该存储器中的程序,以执行前述第一方面提供的数据压缩方法。
本申请的第四方面,提供了一种存储介质,该存储介质中存储了程序代码,该程序代码被计算设备运行时,执行第一方面提供的数据压缩方法。该存储介质包括但不限于快闪存储器、硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid statedrive,缩写:SSD)。
本申请的第五方面,提供了一种计算机程序产品,该计算机程序产品可以为一个软件安装包,该软件安装包被计算设备运行时,执行第一方面提供的数据压缩方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作以简单地介绍,显而易见的,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的系统示意图;
图2为本申请实施例提供的另一系统示意图;
图3为本申请实施例提供的数据压缩方法的流程示意图;
图4为本申请实施例提供的数据压缩设备的组织结构示意图;
图5为本申请实施例提供的另一数据压缩设备的组织结构示意图;
图6为本申请实施例提供的计算设备的组织结构示意图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请中采用术语第一、第二等来区分各个对象,但各个“第一”、“第二”之间不具有逻辑或时序上的依赖关系。
贯穿本说明书,在块存储的场景下,数据block指代固定大小的数据,数据block的大小可以为4K Byte、8K Byte等;在文件存储的场景下,数据block指代一个文件,其大小不固定。
贯穿本说明书,数据chunk包括了多个数据block,常见的数据chunk的大小可以为256K Byte,4M Byte等。
贯穿本说明书,待压缩数据可以包括一个或多个数据block,该一个或多个数据block可以属于一个或多个数据chunk。
贯穿本说明书,清理(英文:clean)哈希表指代初始化哈希表,也即将哈希表内存储的数据归0,以避免使用哈希表的过程发生误匹配。
贯穿本说明书,当前数据的历史数据指代:待压缩的数据中逻辑地址位于该当前数据之前的数据,或待压缩的数据中逻辑地址位于小于该当前数据的数据。例如对于待压缩数据中第a Byte的数据而言,待压缩数据中第1byte至第a-1Byte的数据均为其历史数据。
贯穿本说明书,窗口包括了用于进行哈希运算的(m+1)Byte数据。窗口的起点为该(m+1)Byte数据的第1Byte,窗口的终点为该(m+1)Byte数据的最后1Byte,窗口的大小为(m+1)。以待压缩数据包括字符串“abcdefghijklmn”且m=3为例,窗口内首先包括“abcd”,如果没有与“abcd”匹配的历史数据,则窗口右移。右移的长度可以自行设定,以每次右移1Byte为例,则接下来使用“bcde”来生成哈希值。
贯穿本说明书,逻辑地址指代操作系统分配的虚拟地址。任意(m+1)Byte数据的起始逻辑地址,也即该(m+1)Byte数据的首Byte数据的逻辑地址。
贯穿本说明书,哈希表的value的长度的单位为Byte。
贯穿本说明书,任意1Byte数据的相对地址,指代该Byte数据相对于该Byte数据所在的待压缩数据的起始逻辑地址的偏移量。任意(m+1)Byte数据的相对地址,也即该(m+1)Byte数据的首Byte数据的相对地址。如果该(m+1)Byte数据所在的存储空间的起始逻辑地址的末尾N bit均为0且该(m+1)Byte数据所属的待压缩数据的大小为2n,n不大于N,则该(m+1)Byte数据的首Byte数据的相对地址,也即该(m+1)Byte数据的首Byte数据的逻辑地址的末尾n bit。
贯穿本说明书,或操作指代OR操作,也即只要A和B中之任一不为0,则A OR B=1,而如果A和B均为0,则A OR B=0。
贯穿本说明书,第a Byte到第a+m Byte数据,指代包括第a Byte、第a+m Byte、第aByte数据和第a+m Byte数据之间的数据。
本申请实施例所应用的系统
图1为本申请实施例所应用的一个系统的示意图,该系统包括了一个存储阵列,该存储阵列包括了至少一个存储控制器和多个存储设备,该存储设备一般为非易失性存储设备,具体可以为该快闪存储器(英文:flash memory)或HDD或SSD。每个存储控制器与多个存储设备相连接。为了节省存储阵列中存储设备的空间,该存储控制器用于将待存储的数据进行压缩,将获取的压缩编码存入存储设备。
图2为本申请实施例所应用的另一系统的示意图,该系统包括第一数据处理设备与第二数据处理设备。该第一数据处理设备中设置有数据压缩设备,第二数据处理设备中设置有数据解压缩设备。该数据压缩设备对需要传输给该第二数据处理设备的数据进行压缩,然后通过通信网络将压缩编码传输至第二数据处理设备。数据解压缩设备对该压缩编码进行解压缩。因此,在通信网络中仅需要传输压缩编码,减少了通信流量,加快了数据传输速度。
该存储控制器或该数据压缩设备运行时执行图3提供的数据压缩方法。
本申请还提供了一种数据压缩方法,其流程示意图如图3所示。以存储控制器执行本方法为例。
步骤202,分配第一存储空间,该第一存储空间用于存储待压缩数据,该第一存储空间的起始逻辑地址的末尾N bit为0,N为大于1的整数。
以N为32且该存储控制器采用64位的操作系统为例,该第一存储空间的起始逻辑地址为0x FFFF FFFF 0000 0000。
步骤204,分配第二存储空间,该第二存储空间用于存储压缩过程中生成的压缩编码。以便后续通过对该压缩编码进行解压操作可以复原对应的数据。
步骤206,分配第三存储空间,该第三存储空间用于存储哈希表。该哈希表可以采用key-value结构,每个key为对窗口内(m+1)Byte数据进行哈希运算后获取的哈希值,每个key对应的value包括生成该key的(m+1)Byte数据的起始逻辑地址的末尾n bit。其中,该哈希表的每个key对应的value需要包括生成该key的(m+1)Byte数据的相对地址,但由于该待压缩数据块的起始逻辑地址的末尾n bit均为0,因此该哈希表的每个key对应的value也包括生成该key的(m+1)Byte数据的起始逻辑地址的末尾n bit。
由于对该哈希表value的读写的最小粒度为Byte,因此如果n不为4的整数倍,则该哈希表的value除了包括该待压缩数据的第a Byte数据的逻辑地址的末尾n bit外,还可能包括高于末尾n bit的1个或多个bit。例如n=14的情况下,由于该哈希表的value的长度至少为4Byte,因此该哈希表的value需要包括待压缩数据的第a Byte数据的逻辑地址的末尾16bit。
示意性的该哈希表的结构如表1所示。
Key | Value |
hash value1 | 逻辑地址1的末尾n bit |
hash value 2 | 逻辑地址2的末尾n bit |
… | … |
hash value N | 逻辑地址N的末尾n bit |
表1
假设hash value 1为第a Byte至第a+m Byte数据对应的哈希值,则逻辑地址1为第a Byte数据的逻辑地址,表1中的其余行依此类推。
步骤202、步骤204、步骤206可以以任意顺序执行,也可以合并为同一步骤执行。该第一存储空间、该第二存储空间、该第三存储空间可以指代内存空间。
步骤207,获取待压缩数据,并将该待压缩数据存入该第一存储空间,该待压缩数据的大小为2nByte,n不大于N。因此,该待压缩数据的起始逻辑地址的末尾N bit为0。
步骤202中分配的第一存储空间的起始逻辑地址的末尾N bit为0后,可以执行多轮步骤207及步骤207以后的步骤,无须针对每一个待压缩数据均分配一次第一存储空间。由于每轮步骤207中获取的待压缩数据的大小可能不同,因此步骤202中设置的2N Byte需要大于或等于每个待压缩数据的大小,以保证后续每轮步骤207中获取的待压缩数据的起始逻辑地址的末尾n bit均为0。
该待压缩数据可以包括多个数据block。相比于待压缩数据仅包括一个数据block的方案,一次性将多个数据block存入该第一存储空间,即可以避免多次清理哈希表带来的性能损耗,同时由于该第一存储空间内的待压缩数据的大小增大,每个窗口内的数据都会更容易找到匹配的历史数据,因此可以提升压缩率。
存储控制器从客户端或其他设备获取待压缩数据,该待压缩数据为需要存入存储设备中的数据。
步骤208,判断该待压缩数据的大小是否大于2K Byte,K为大于0的整数。若大于,则执行步骤210所在的分支,若不大于,则执行步骤222所在的分支。
常见的K的取值包括:16或24或32。而大小大于216Byte的待压缩数据的逻辑地址最少需要3Byte,大小大于224的待压缩数据的逻辑地址最少需要4Byte,大小大于232的待压缩数据的逻辑地址最少需要5Byte。本申请中,示例性的采用K等于16。实际使用中,K的取值可以参考存储设备的缓存的大小。本分支中以该待压缩数据的大小为232Byte,m=3为例。
步骤210,清理该哈希表。
步骤212,设置该哈希表的value的长度不少于(K/8+H)Byte。
H为大于0的正整数,常见的取值可以为2。(8*该哈希表的value的长度)还需要不小于n,例如n=32,则该哈希表的value的长度不小于4,而如果n=24,则该哈希表的value的长度不小于3。本分支中,示例性的设置该哈希表的value的长度为4。由于本分支中,判断该待压缩数据的大小大于2K Byte,采用K/8Byte将无法表达该待压缩数据中每1Byte数据的相对地址,因此需要增加该哈希表的value的长度。
步骤210和步骤212的执行顺序可以互换。
步骤208后已经确定待压缩数据的大小,因此在步骤212以及后续的步骤224中可以根据待压缩数据的大小设置该哈希表的value的长度,以避免该哈希表的value的长度过大导致的存储空间浪费和对该哈希表进行操作时造成的难度增加,同时也避免了如果将该哈希表的value的长度设置的过短导致的该哈希表的value的长度不够。
常见的m的取值包括:2、3、4、5、6或7等。该哈希表的key的长度根据采用的哈希运算的类型进行设置。
步骤210的执行可以在步骤216之前任意时刻执行,保证在步骤216中使用该哈希表之前清理该哈希表即可。
步骤214,根据待压缩数据的第a Byte到第a+m Byte生成哈希值,a为大于0的整数。第一次执行步骤214时,a取值为1。
步骤216,判断该哈希表中是否存在与该哈希值相同的key,如果存在,执行步骤2161至步骤2162,如果不存在,执行步骤2163。
步骤2161,获取该哈希值所在行的value,并根据该待压缩数据的第a Byte数据的逻辑地址的末尾n bit更新该哈希值所在行的value。
如果n不为4的整数倍,用于更新该哈希值所在行的value的除了将该待压缩数据的第a Byte数据的逻辑地址的末尾n bit外,还可能包括高于末尾n bit的1个或多个bit。也即采用该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit来更新该哈希表所在行的value。
步骤2162,判断该第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希值所在行的value之差是否大于2K。
如果该哈希表的value的长度为U Byte,U为不小于(K/8+H)的整数,则判断该第aByte数据的逻辑地址的末尾8U bit与该哈希值所在行的value之差是否大于2K。
如果该第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希值所在行的value之差大于或等于2K,将生成哈希值的窗口右移,即a=a+Q,Q为大于0的整数,并返回步骤214。如果该第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希值所在行的value之差不大于2K,执行步骤218。
步骤2162中使用的该哈希值所在行的value,为步骤2161中执行更新动作之前,该哈希值所在行的value。
具体的,由于该待压缩数据的每个Byte数据的逻辑地址中高于末尾n bit的地址相同,因此仅需比较该第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与该哈希值所在行的value之差是否大于2K。
具体的,步骤2162中,如果判断不大于2K,则执行步骤218之前,还需要根据该哈希值所在行的value,获取与当前进行哈希运算的(m+1)Byte数据相同的历史数据的起始逻辑地址,以供步骤218中使用。
步骤2163,将该哈希值和该待压缩数据的第a Byte数据的逻辑地址的末尾n bit加入至该哈希表。并将生成哈希值的窗口右移,即a=a+W,W为大于0的整数,并返回步骤214。
如果n不为4的整数倍,加入该哈希表的除了该待压缩数据的第a Byte数据的逻辑地址的末尾n bit外,还可能包括高于末尾n bit的1个或多个bit。也即将该哈希值和该待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit加入至该哈希表的新一行中。
下面详细分析本申请提供的数据压缩方法相对于现有数据压缩方法的提升。
表2
如表2,当前逻辑地址为当前进行哈希运算的(m+1)Byte数据的起始逻辑地址。
如果第a Byte数据到第a+m Byte的数据对应的哈希值已经存在于该哈希表中的某一行的key,则需要读取该哈希表中该哈希值所在行的value,并用该第a Byte数据的相对地址更新该哈希值所在行的value,也即需要进行一次读哈希表和一次写哈希表。
现有技术中,以该哈希值所在行的value记录400为例,为了获取被匹配上的历史数据的完整起始逻辑地址,以供后续将当前进行哈希运算的(m+1)Byte数据与被匹配上的历史数据进行匹配。因此需要将400与0x FFFF FFFF 0000 0001进行加操作,获取0x FFFFFFFF 0000 0191。0x FFFF FFFF 0000 0191为与当前进行哈希运算的(m+1)Byte数据相同的历史数据的起始逻辑地址。
同时,现有技术中为了对该哈希值所在行的value进行更新,需要将当前进行哈希运算的(m+1)Byte数据的相对地址存入该被匹配上的行的value,因此需要将0x FFFF FFFF0000 07D1与0x FFFF FFFF 0000 0001进行减操作,获取2000,并用2000更新该哈希值所在行的value。
由此可见,现有技术中,如果当前进行哈希运算的(m+1)Byte数据对应的哈希值已经存在于该哈希表,则需要进行一次加操作和一次减操作。
与之对应的,本申请提供的压缩方法中,以该哈希值所在行的value记录0x0190为例,为了获取被匹配上的历史数据的完整起始逻辑地址,因此需要将0x0190与0x FFFFFFFF 0000 0000进行或操作,获取0x FFFF FFFF 0000 0190。0x FFFF FFFF 0000 0190为与当前进行哈希运算的(m+1)Byte数据相同的历史数据的起始逻辑地址。
同时,本申请提供的压缩方法中为了对该哈希值所在行的value进行更新,需要用当前进行哈希运算的(m+1)Byte数据的相对地址更新该哈希值所在行的value,由于该待压缩数据的起始逻辑地址的末尾N bit为0,因此直接用07D0更新该被匹配上的行的value即可。
由此可见,本申请提供的压缩方法中,如果当前进行哈希运算的(m+1)Byte数据对应的哈希值已经存在于该哈希表,仅需要进行一次或操作。相对于现有技术中需要使用一次加操作和一次减操作,降低了操作所需的时间,提升了压缩速度。
如果第a Byte数据到第a+m Byte的数据对应的哈希值不存在于该哈希表中的任一行的key,也即该第a Byte数据到第a+m Byte的数据对应的哈希值不能够匹配该哈希表中的任一行的key,将该第a Byte数据到第a+m Byte对应的哈希值,以及该待压缩数据的第a Byte数据的相对地址加入至该哈希表,也即需要进行一次写哈希表。
写哈希表的场景中,现有技术中需要将0x FFFF FFFF 0000 07D1与0x FFFF FFFF0000 0001进行减操作,获取2000。随后,将第a Byte数据到第a+m Byte的数据对应的哈希值和2000存入该哈希表。
与之对应的,本申请提供的压缩方法中,以第a Byte数据到第a+m Byte的数据的起始逻辑地址为0x FFFF FFFF 0000 07D0为例,将第a Byte数据到第a+m Byte的数据对应的哈希值和0x 07D0存入该哈希表。
由此可见,本申请提供的压缩方法中,如果当前进行哈希运算的(m+1)Byte数据对应的哈希值不存在于该哈希表中的任一行的key,直接将该第a Byte数据到第a+m Byte的数据的起始逻辑地址的末尾n bit写入该哈希表。相对于现有技术中需要使用一次减操作和一次写操作,降低了对该哈希表进行操作所需的时间,提升了压缩速度。
步骤218,将与当前进行哈希运算的(m+1)Byte数据相同的历史数据与当前进行哈希运算的(m+1)Byte数据向右逐Byte进行匹配,根据匹配结果生成本次匹配对应的压缩编码,并将该压缩编码存入该第三存储空间内。
具体的,获取了与当前进行哈希运算的(m+1)Byte数据相同的历史数据的起始逻辑地址后,根据该起始逻辑地址获取该待压缩数据的历史数据,并将该待压缩数据的历史数据与该第a Byte数据及该第a Byte数据后的数据进行逐Byte的匹配,直至无法匹配为止。
该压缩编码包括了:该第a Byte及该第a Byte后的数据与历史数据的匹配长度,该历史数据的相对地址,以及上次压缩编码记录的最后1Byte数据至本次匹配上的第1Byte数据之间的数据。
例如待压缩数据包括abcdefghabcdef,假设第一个a为的相对地址为100,当前窗口包括第9个字符至第12个字符,且E=1为例,如表3。
Key | Value |
abcd对应的hash值 | 100 |
bcde对应的hash值 | 101 |
cdef对应的hash值 | 102 |
defg对应的hash值 | 103 |
efgh对应的hash值 | 104 |
fgha对应的hash值 | 105 |
ghab对应的hash值 | 106 |
habc对应的hash值 | 107 |
表3
当获取第9个字符至第12个字符(也即abcd)对应的hash值后,由于在该哈希表中能够匹配上第一行的key,因此根据哈希表中第一行的value读取第1个字符,然后将第9个字符与第1个字符相比较,第10个字符与第2个字符相比较,依次类推,直至向右匹配至无法匹配为止。在本例中,第9个字符至第14个字符与第1至第6个字符相同。因此生成的压缩编码包括:abcdefgh,100,6。其中abcdefg为上次压缩编码记录的最后1Byte至本次匹配上第1Byte之间的数据,其中100为h后第1Byte数据匹配上的历史数据的相对地址,6为匹配长度。根据该压缩编码,恢复该待压缩数据的顺序如下:首先提取abcdefgh,然后根据100与6获取abcdefgh的前6个字符,也即abcdef,将abcdef添加在abcdefgh后,则恢复了该待压缩数据abcdefghabcdef。
其中,由于步骤2162和步骤2163后,都可能将生成哈希值的窗口右移。因此,可能会有部分数据既没有记录在上一次步骤218中生成的压缩编码中,同时又位于本次步骤218中窗口的起点之前,因此这部分数据需要记录在本次步骤218生成的压缩编码中。
步骤220,判断该待压缩的数据是否全部压缩完毕,也即第a+m Byte数据是否指向该待压缩的数据的最后1Byte数据。如果是,结束压缩编码,将该第三存储空间内的压缩编码存入存储设备。如果不是,将生成哈希值的窗口右移,即a=a+E,E为大于0的整数,并返回步骤214。
Q、W、E均为窗口右移的长度,也即窗口向右滑动多少Byte。
由于存储控制设备的缓存有限,为了避免步骤218中当前进行哈希运算的(m+1)Byte数据与匹配上的历史数据之间的距离太大,导致匹配上的历史数据和当前进行哈希运算的(m+1)Byte数据无法同时存储于缓存内,导致需要刷新缓存进而影响压缩速度。因此步骤2162中判断历史数据和当前进行哈希运算的(m+1)Byte数据的逻辑地址之差是否大于2K。2K Byte可以为存储控制器的缓存的大小。如果匹配上的历史数据和当前进行哈希运算的(m+1)Byte数据之间相隔大于或等于2K Byte的数据,则本次匹配中不执行步骤220。而如果匹配上的历史数据和当前进行哈希运算的(m+1)Byte数据之间相隔小于2KByte的数据,则说明本次匹配上的历史数据和当前进行哈希运算的(m+1)Byte数据可以同时存储于缓存内,因此执行步骤220。
需要说明的是步骤2162为可选步骤,也即步骤2161后可以无须执行步骤2162,直接执行步骤218。
本分支中以该待压缩数据的大小为216Byte,m=3为例。
步骤222,清理该哈希表。
步骤224,设置该哈希表的value的长度不少于K/8Byte。
步骤222和步骤224的执行顺序可以互换。
由于待压缩的数据的大小为216Byte,因此需要2Byte的value长度就能表现该待压缩数据的任一Byte数据的相对地址。
步骤222的执行可以在步骤228之前任意时刻执行,保证在步骤228中使用该哈希表之前清理该哈希表即可。
步骤226,根据待压缩数据的第b Byte到第b+m Byte生成哈希值,b为大于0的整数。第一次执行步骤226时,b取值为1。
步骤228,判断该哈希值是否能匹配上该哈希表的任一key。如果能够匹配,执行步骤2301,如果不能匹配,执行步骤2302。
步骤2301,获取匹配上的哈希值所在行的value,并根据该待压缩数据的第b Byte数据的逻辑地址的末尾n bit更新该匹配上的哈希值所在行的value。
如果n不为4的整数倍,用于更新该哈希值所在行的value的除了将该待压缩数据的第b Byte数据的逻辑地址的末尾n bit外,还可能包括高于末尾n bit的1个或多个bit。也即采用该待压缩数据的第b Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit来更新该哈希表所在行的value。
步骤2301中,还需要根据匹配上的哈希值所在行的value,获取与当前进行哈希运算的(m+1)Byte数据相同的历史数据的起始逻辑地址,以供步骤232中使用。
步骤2302,将该哈希值和该待压缩数据的第b Byte数据的逻辑地址的末尾n bit加入至该哈希表。并将生成哈希值的窗口右移,即b=b+R,R为大于0的整数,并返回步骤226。
如果n不为4的整数倍,加入该哈希表的除了该待压缩数据的第b Byte数据的逻辑地址的末尾n bit外,还可能包括高于末尾n bit的1个或多个bit。也即将该哈希值和该待压缩数据的第b Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit加入至该哈希表的新一行中。
参考前述表2对应的描述,本申请提供的压缩方法中,如果当前进行哈希运算的(m+1)Byte数据对应的哈希值能够匹配上该哈希表中的某一行的key,仅需要进行一次或操作。相对于现有技术中需要使用一次加操作和一次减操作,降低了操作所需的时间,提升了压缩速度。
同时,本申请提供的压缩方法中,如果当前进行哈希运算的(m+1)Byte数据对应的哈希值不能够匹配上该哈希表中的任一行的key,直接将该第b Byte数据到第b+m Byte的数据的起始逻辑地址的末尾(8*所述哈希表的value的长度)bit写入该哈希表。相对于现有技术中需要使用一次减操作和一次写操作,降低了操作所需的时间,提升了压缩速度。
步骤232,将当前进行哈希运算的(m+1)Byte数据相同的历史数据与当前进行哈希运算的(m+1)Byte数据向右逐Byte进行匹配,根据匹配结果生成本次匹配对应的压缩编码,并将该压缩编码存入该第三存储空间内。
步骤232中生成压缩编码相关的细节,参考前述步骤218中的描述。
步骤234,判断该待压缩的数据是否全部压缩完毕,也即第b+m Byte数据是否指向该待压缩的数据的最后1Byte数据。如果是,结束压缩编码,将该第三存储空间内的压缩编码存入存储设备。如果不是,将生成哈希值的窗口右移,即b=b+T,T为大于0的整数,并返回步骤226。
R和T均为窗口右移的长度,也即窗口向右滑动多少Byte的数据。
通过在步骤208中判断待压缩的数据是否大于2K Byte,在步骤222至步骤234这一支路中,由于待压缩的数据不大于2K Byte,因此任一Byte历史数据的逻辑地址和当前进行哈希运算的(m+1)Byte数据的逻辑地址之差肯定不大于2K,无需执行步骤2162类似的判断动作,节省了压缩流程,进一步提升了压缩速度。
需要说明的是,步骤208为可选步骤。
如果不采用步骤208,则步骤207后直接执行步骤210、步骤214以及步骤214的后续步骤。此种情况下,由于在步骤2161或步骤2163中对该哈希表进行操作之前不知道待压缩数据的大小,因此需要根据待压缩数据的大小判断需要写入该哈希表的逻辑地址的长度。
例如,待压缩数据的大小为216Byte,而存储控制器采用的操作系统为64位的系统。因此,在步骤2161或步骤2163之前需要根据待压缩数据的大小,确认采用该第a Byte数据的逻辑地址的末尾16bit来更新该哈希表。
通过步骤208的采用,避免了每次对该哈希表的操作均需要判断一次待压缩数据的大小,进一步提升了压缩速度。
如图4所示,本申请还提供了一种数据压缩设备400,该数据压缩设备可以为图1中的存储控制器或图2中的数据压缩设备。该数据压缩设备400包括通信接口402和处理芯片404,通信接口402和处理芯片404建立通信连接。该数据压缩设备400运行时,执行图3对应的数据压缩方法。
通信接口402用于与外部设备通信,例如写入待压缩数据的客户端、存储阵列中的存储设备、通信网络中的网络设备等。通信接口402可以为数据压缩设备400的输入/输出接口。
通信接口402具体用于执行步骤207中获取待压缩数据的步骤,以及步骤220和步骤234之后将第三存储空间内的压缩编码存入存储设备的步骤。如果该数据压缩设备400为图2中的数据压缩设备,则步骤220和步骤234之后,通信接口402用于将该第三存储空间内的压缩编码发往通信网络。
处理芯片404,用于执行步骤202至步骤206,并执行步骤207中将待压缩数据存入第一存储空间的步骤,还用于执行步骤208至步骤220,还用于执行步骤208至步骤234。
处理芯片404可以通过专用集成电路(英文:application-specific integratedcircuit,缩写:ASIC)实现,或可编程逻辑器件(英文:programmable logic device,缩写:PLD)实现。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logicdevice,缩写:CPLD),现场可编程门阵列(英文:field programmable gate array,缩写:FPGA),通用阵列逻辑(英文:generic array logic,缩写:GAL)或其任意组合。
如图5所示,处理芯片404还可以通过处理器、存储设备以及逻辑芯片实现,该逻辑芯片可以由PLD或ASIC实现。该处理芯片404运行时,该处理器和该逻辑芯片各执行一部分功能,两者功能的分配可以有多种。示例性的,由该处理器读取该存储器中的代码执行步骤202至步骤207。在第一存储空间、第二存储空间、第三存储空间均已在该存储器中分配完毕,并且待存储数据已经存储该第一存储空间后,由该逻辑芯片完成后续步骤。
以上提供的数据压缩设备,通过将存储待压缩数据的存储空间的末尾N bit地址设置为0,使得对该待压缩数据进行压缩的过程中对哈希表的读写操作均更加简单,提升了压缩速度。
图6为本申请提供的一种计算设备,该计算设备600可以为图1中的存储控制器或图2中的数据压缩设备。计算设备600包括处理器602、存储器604,还可以包括总线606以及通信接口608。
通信接口608用于与外部设备通信,例如写入待压缩数据的客户端、存储阵列中的存储设备、通信网络中的网络设备等。通信接口608可以为计算设备600的输入/输出接口。
处理器602、存储器604和通信接口608可以通过总线606实现彼此之间的通信连接,也可以通过无线传输等其他手段实现通信。
处理器602可以为中央处理器(英文:central processing unit,缩写:CPU)。
存储器604可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM)。
可选的,存储器604还可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器,HDD或SSD;存储器604还可以包括上述种类的存储器的组合。
当计算设备600为图1中的存储控制器时,由于存储控制器与存储阵列中的多个存储设备相连,因此存储器604也可以不包括非易失性存储器,计算设备600的非易失性存储器由存储阵列的存储设备提供。
当计算设备600为图2中的数据压缩设备时,由于其可以直接将压缩编码发往通信网络,不需要将压缩编码存入非易失性存储器,因此存储器604也可以不包括非易失性存储器。
在通过软件来实现本申请提供的技术方案时,用于实现本申请图3提供的数据压缩方法的程序代码保存在存储器604中,并由处理器602来执行。
以上提供的计算设备,通过将存储待压缩数据的存储空间的末尾N bit地址设置为0,使得对该待压缩数据进行压缩的过程中对哈希表的读写操作均更加简单,提升了压缩速度。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
结合本申请公开内容所描述的方法可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM、快闪存储器、ROM、可擦除可编程只读存储器(英文:erasable programmable read only memory,缩写:EPROM)、电可擦可编程只读存储器(英文:electrically erasable programmable read only memory,缩写:EEPROM)、硬盘、SSD、光盘或者本领域熟知的任何其它形式的存储介质中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请所描述的功能可以用硬件或软件来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上该的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上该仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的技术方案的基础之上,所做的任何修改、改进等,均应包括在本申请的保护范围之内。
Claims (11)
1.一种数据压缩方法,其特征在于,包括:
分配存储空间,所述存储空间的起始逻辑地址的末尾N bit为0,N为大于1的整数;
将待压缩数据存入所述存储空间,所述待压缩数据的大小为2n Byte,n不大于N;
对所述待压缩数据的第a Byte数据到第a+m Byte数据进行哈希运算生成哈希值,a为大于0的整数,m为大于0的整数且(m+1)为进行所述哈希运算的窗口的大小;
判断哈希表中是否存在与所述哈希值相同的key,所述哈希表的key为所述第a+m Byte数据的(m+1)Byte历史数据进行哈希运算生成的哈希值,所述哈希表的value包括所述第a+m Byte数据的(m+1)Byte历史数据的起始逻辑地址的末尾n bit;
若所述哈希表中存在与所述哈希值相同的key,根据所述第a Byte数据的逻辑地址的末尾n bit更新所述哈希表中所述哈希值对应的value;
若所述哈希表中不存在与所述哈希值相同的key,将所述哈希值和所述第a Byte数据的逻辑地址的末尾n bit加入所述哈希表;
在根据所述第a Byte数据的逻辑地址的末尾n bit更新所述哈希表中所述哈希值对应的value后,所述方法还包括:
若所述待压缩数据的大小大于2K Byte,且,所述第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与所述哈希表中所述哈希值对应的value之差小于2K,则将所述第a Byte数据及所述第a Byte数据后的数据与所述哈希值对应的value指示的历史数据进行匹配,根据匹配结果生成压缩编码。
2.如权利要求1所述的数据压缩方法,其特征在于,所述待压缩数据包括多个数据block。
3.如权利要求1或2所述的数据压缩方法,其特征在于,所述判断哈希表中是否存在与所述哈希值相同的key前,还包括:
判断所述待压缩数据的大小是否大于2K Byte,K为大于0的整数;
若所述待压缩数据的大小大于2K Byte,设置所述哈希表的value的长度不少于(K/8+1)Byte;
若所述待压缩数据的大小小于或等于2K Byte,设置所述哈希表的value的长度不少于K/8Byte。
4.如权利要求3所述的数据压缩方法,其特征在于,根据所述第a Byte数据的逻辑地址的末尾n bit更新所述哈希表中所述哈希值对应的value后,所述方法还包括:
若所述待压缩数据的大小大于2K Byte,且所述待压缩数据的第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与所述哈希表中所述哈希值对应的value之差不小于2K,则不将所述第a Byte数据及所述第a Byte数据后的数据与所述哈希值对应的value指示的历史数据进行匹配。
5.如权利要求4所述的数据压缩方法,其特征在于,所述根据匹配结果生成压缩编码后,还包括:
判断所述第a+m Byte数据是否为所述待压缩数据的最后1Byte数据,若是,则结束对所述待压缩数据的编码,若不是,则将进行所述哈希运算的窗口右移。
6.一种数据压缩设备,其特征在于,包括:通信接口和处理芯片,所述通信接口与所述处理芯片相连;
所述处理芯片,用于分配存储空间,所述存储空间的起始逻辑地址的末尾N bit为0,N为大于1的整数;
所述通信接口,用于获取待压缩数据,并将所述待压缩数据存入所述存储空间,所述待压缩数据的大小为2n Byte,n不大于N;
所述处理芯片,还用于对所述待压缩数据的第a Byte数据到第a+m Byte数据进行哈希运算生成哈希值,a为大于0的整数,m为大于0的整数且(m+1)为进行所述哈希运算的窗口的大小;判断哈希表中是否存在与所述哈希值相同的key,所述哈希表的key为所述第a+mByte数据的(m+1)Byte历史数据进行哈希运算生成的哈希值,所述哈希表的value包括所述第a+m Byte数据的(m+1)Byte历史数据的起始逻辑地址的末尾n bit,若所述哈希表中存在与所述哈希值相同的key,根据所述第a Byte数据的逻辑地址的末尾n bit更新所述哈希表中所述哈希值对应的value,若所述哈希表中不存在与所述哈希值相同的key,将所述哈希值和所述第a Byte数据的逻辑地址的末尾n bit加入所述哈希表,在根据所述第a Byte数据的逻辑地址的末尾n bit更新所述哈希表中所述哈希值对应的value后,所述处理芯片还用于:
若所述待压缩数据的大小大于2K Byte,且,所述第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit与所述哈希表中所述哈希值对应的value之差小于2K,则将所述第a Byte数据及所述第a Byte数据后的数据与所述哈希值对应的value指示的历史数据进行匹配,根据匹配结果生成压缩编码。
7.如权利要求6所述的设备,其特征在于,所述待压缩数据包括多个数据block。
8.如权利要求6或7所述的设备,其特征在于,所述处理芯片判断哈希表中是否存在与所述哈希值相同的key前,还用于判断所述待压缩数据的大小是否大于2K Byte,K为大于0的整数;若所述待压缩数据的大小大于2K Byte,设置所述哈希表的value的长度不少于(K/8+1)Byte;若所述待压缩数据的大小小于或等于2K Byte,设置所述哈希表的value的长度不少于K/8Byte。
9.如权利要求8所述的设备,其特征在于,所述处理芯片在根据所述第a Byte数据的逻辑地址的末尾(8*所述哈希表的value的长度)bit更新所述哈希表中所述哈希值对应的value后,还用于:若若所述待压缩数据的大小大于2K Byte,且所述待压缩数据的第a Byte数据的逻辑地址的末尾n bit与所述哈希表中所述哈希值对应的value之差不小于2K,则不将所述第a Byte数据及所述第a Byte数据后的数据与所述哈希值对应的value指示的历史数据进行匹配。
10.如权利要求9所述的设备,其特征在于,所述处理芯片在生成所述压缩编码后,还用于:
判断所述第a+m Byte数据是否为所述待压缩数据的最后1Byte数据,若是,则结束对所述待压缩数据的编码,若不是,则将进行所述哈希运算的窗口右移。
11.一种计算设备,其特征在于,所述计算设备包括处理器、存储器,所述处理器和所述存储器建立通信连接;
所述处理器运行时,读取所述存储器中的程序,执行权利要求1至5任一所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/101259 WO2018058604A1 (zh) | 2016-09-30 | 2016-09-30 | 数据压缩方法、设备与计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110419036A CN110419036A (zh) | 2019-11-05 |
CN110419036B true CN110419036B (zh) | 2022-04-12 |
Family
ID=61763588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680089676.XA Active CN110419036B (zh) | 2016-09-30 | 2016-09-30 | 数据压缩方法、设备与计算设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110419036B (zh) |
WO (1) | WO2018058604A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508334B (zh) * | 2018-11-23 | 2019-10-11 | 中科驭数(北京)科技有限公司 | 针对区块链数据库的数据压缩方法、访问方法和系统 |
CN111835359B (zh) * | 2019-04-22 | 2022-03-22 | 深圳捷誊技术有限公司 | 压缩装置、存储介质及重复信息查询、更新的方法和装置 |
CN111259203B (zh) * | 2020-01-08 | 2023-08-25 | 上海兆芯集成电路股份有限公司 | 数据压缩器以及数据压缩方法 |
CN113765854B (zh) * | 2020-06-04 | 2023-06-30 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN113326001B (zh) * | 2021-05-20 | 2023-08-01 | 锐掣(杭州)科技有限公司 | 数据处理方法、装置、设备、系统、介质及程序 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020317A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于重复数据删除的数据压缩方法和装置 |
CN104077272A (zh) * | 2014-06-23 | 2014-10-01 | 华为技术有限公司 | 一种字典压缩的方法和装置 |
CN105022593A (zh) * | 2015-08-18 | 2015-11-04 | 南京大学 | 一种基于数据压缩和数据去冗协同的存储优化方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8566295B2 (en) * | 2011-05-31 | 2013-10-22 | John E. G. Matze | System and method for electronically storing essential data |
KR102253592B1 (ko) * | 2014-12-23 | 2021-05-18 | 삼성전자주식회사 | 초기 문턱 전압 분포 변화를 보상할 수 있는 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템 |
US9971704B2 (en) * | 2015-03-27 | 2018-05-15 | International Business Machines Corporation | Data compression accelerator methods, apparatus and design structure with improved resource utilization |
CN105207678B (zh) * | 2015-09-29 | 2018-10-26 | 东南大学 | 一种改进型lz4压缩算法的硬件实现系统 |
CN105631013B (zh) * | 2015-12-29 | 2019-06-28 | 华为技术有限公司 | 生成哈希值的装置和方法 |
-
2016
- 2016-09-30 WO PCT/CN2016/101259 patent/WO2018058604A1/zh active Application Filing
- 2016-09-30 CN CN201680089676.XA patent/CN110419036B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020317A (zh) * | 2013-01-10 | 2013-04-03 | 曙光信息产业(北京)有限公司 | 基于重复数据删除的数据压缩方法和装置 |
CN104077272A (zh) * | 2014-06-23 | 2014-10-01 | 华为技术有限公司 | 一种字典压缩的方法和装置 |
CN105022593A (zh) * | 2015-08-18 | 2015-11-04 | 南京大学 | 一种基于数据压缩和数据去冗协同的存储优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110419036A (zh) | 2019-11-05 |
WO2018058604A1 (zh) | 2018-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110419036B (zh) | 数据压缩方法、设备与计算设备 | |
EP3358465B1 (en) | In-vehicle control device, program update system, and program update software | |
JP6692448B2 (ja) | ストレージ装置及びストレージ装置の制御方法 | |
EP2752760B1 (en) | Method of compressing data and devices for performing the same | |
CN107682016B (zh) | 一种数据压缩方法、数据解压方法及相关系统 | |
US20180205393A1 (en) | Encoding method and apparatus | |
JP6784636B2 (ja) | 制御装置、プログラム更新システム、プログラム更新方法 | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
US10303402B2 (en) | Data compression using partial statistics | |
US9362948B2 (en) | System, method, and computer program product for saving and restoring a compression/decompression state | |
CN113300715B (zh) | 一种数据处理方法、装置、硬件压缩设备以及介质 | |
CN111125033A (zh) | 一种基于全闪存阵列的空间回收方法及系统 | |
CN113497627A (zh) | 一种数据压缩和解压缩方法、装置及系统 | |
CN106484852B (zh) | 数据压缩方法、设备与计算设备 | |
CN109690957B (zh) | 熵编码的系统级测试 | |
US10509600B2 (en) | Method and apparatus for data compression and decompression using a standardized data storage and retrieval protocol | |
CN109558156B (zh) | 一种汽车仪表升级优化方法 | |
WO2017039906A1 (en) | Modifying a compressed block of data | |
CN106383670B (zh) | 一种数据处理方法及存储设备 | |
US11461008B2 (en) | Memory system for improving compression performance of a dictionary coder circuit | |
CN116601593A (zh) | 数据压缩装置、数据存储装置和用于数据压缩和重复数据删除的方法 | |
US11748307B2 (en) | Selective data compression based on data similarity | |
US20240204796A1 (en) | Code table generation device, memory system, and code table generation method | |
CN115225725B (zh) | 数据压缩存储方法、装置、车辆及存储介质 | |
CN118400094B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |