CN105426413A - 一种编码方法及装置 - Google Patents
一种编码方法及装置 Download PDFInfo
- Publication number
- CN105426413A CN105426413A CN201510733615.XA CN201510733615A CN105426413A CN 105426413 A CN105426413 A CN 105426413A CN 201510733615 A CN201510733615 A CN 201510733615A CN 105426413 A CN105426413 A CN 105426413A
- Authority
- CN
- China
- Prior art keywords
- data
- block
- target data
- sub
- hash table
- 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.)
- Granted
Links
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/60—General implementation details not specific to a particular type of compression
- H03M7/6011—Encoder aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
-
- 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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- 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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3091—Data deduplication
Abstract
本发明公开了一种编码方法及装置,用于解决在采用Delta编码时数据压缩效率较低的技术问题。该方法中,在得到目标块中第一子目标块时,先将其进行哈希运算,然后根据运算结果在第一哈希表中查询对应的哈希值,再根据查询到的哈希值在参考块中找到相应的位置,即找到第一参考数据,将第一子目标块的首个目标数据与第一参考数据进行匹配,将目标块中的第二目标数据与参考块中的第二参考数据进行匹配。这样,通过预先确定出一个大概的位置,缩小了需要匹配的范围,节省了数据压缩的时间,提高了数据压缩的效率。
Description
技术领域
本发明涉及数据压缩技术领域,特别涉及一种编码方法及装置。
背景技术
Delta算法是无损数据压缩技术中的一种,用于计算一个新文件和一个已经存储在系统中的参考文件之间的Delta编码。比如,在需要存储一个新文件时,将新文件和已经存储在系统中的多个参考文件分别进行匹配,如果新文件和其中一个参考文件之间的相似性超过了预先设定的阀值时,就计算出一个与该新文件对应的Delta编码,只须把这个Delta编码存储在系统里即可,无需存储新文件本身。在恢复新文件时,根据与新文件相似的参考文件,以及新文件对应的Delta编码,就可以恢复出新文件。这样,在存储具有相似性的文件时,使用Delta编码进行文件压缩,可以极大地节省存储空间。
目前,XDelta编码是一种常用的Delta编码算法。XDelta编码的核心思想就是在参考块中寻找是否有与目标块匹配的子块,例如一般连续3个或4个字节相同则认为匹配成功。
然而,XDelta编码在进行匹配时,是按照逐字节的匹配方式,如果参考块的数据量比较大的话,那么匹配过程的工作量就比较大,耗费的时间也比较多,导致数据压缩的效率较低。
发明内容
本申请提供一种编码方法及装置,用于解决在采用Delta编码时数据压缩效率较低的技术问题。
第一方面,提供一种编码方法,包括:
获取第一子目标块,所述第一子目标块属于目标块;
对所述第一子目标块进行哈希运算得到第一键值,根据所述第一键值查询第一哈希表,所述第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在所述第一哈希表中查到与所述第一键值对应的第一哈希值,根据所述第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第二参考数据为所述参考块中位于所述第一参考数据之后的其他参考数据;
根据所述首个目标数据及所述第二目标数据的匹配结果生成第一编码序列;其中,所述第一编码序列中包括匹配长度和偏移量,所述匹配长度用于指示本次匹配成功的目标数据的长度,所述偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
本申请中,在得到目标块中的一个子目标块时(例如称为第一子目标块),先将其进行哈希运算,然后根据运算结果在第一哈希表中查询对应的哈希值,再根据查询到的哈希值在参考块中找到相应的位置,即找到第一参考数据,从而可以将第一子目标块在该位置处进行向后匹配(即,将第一子目标块的首个目标数据与第一参考数据进行匹配,将目标块中的第二目标数据与参考块中的第二参考数据进行匹配)。这样,通过预先确定出一个大概的位置,缩小了需要匹配的范围,节省了数据压缩的时间,提高了数据压缩的效率。
结合第一方面,在第一方面的第一种可能的实现方式中,所述根据所述第一键值查询第一哈希表之前,还包括:
按照第一步长,从所述参考块中获取参考数据块;每个参考数据块包括n位参考数据,所述第一子目标块包括n位目标数据,所述n为正整数;
构建所述第一哈希表,所述第一哈希表的键值为所述参考数据块通过所述哈希运算获取的。
即,可以根据已知的参考块中的参考数据预先构建第一哈希表,以备后续使用。本申请中,构建第一哈希表时,每次参与哈希运算的参考数据的数据量,与将目标块进行匹配时每次参与运算的模板数据的数据量(即一个子目标块所包括的数据的数据量)需相等,否则可能会出现得到的运算结果的长度不同而无法进行匹配的情况。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述生成第一编码序列前还包括:将所述目标块中位于所述第一子目标块之前的目标数据与所述参考块中位于所述第一参考数据之前的其他参考数据进行匹配。
即,除了如前提到的后向匹配之外,还可以将第一子目标块及目标块中位于第一子目标块之前的目标数据与第一参考数据及参考块中位于第一参考数据之前的其他参考数据进行前向匹配,直到无法匹配为止。这样,可以一次匹配尽量多的目标数据,以有效减少匹配次数,也减少后续生成的编码序列的数量,减轻系统的负担。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述第一编码序列中还包括未匹配成功的目标数据,所述未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
在匹配时,可能会存在无法匹配的数据,即未匹配成功的数据,那么,为了在解码时能够尽量准确地恢复原来的目标数据,需要将未匹配成功的数据也记录下来,本申请中的编码序列即提供了用于存储未匹配成功的目标数据的字段,以使得后续进行解码时得到的解码结果尽量与原目标数据一致。
结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第四种可能的实现方式中,
所述对所述第一子目标块进行所述哈希运算得到第一键值后,还包括:
根据所述第一键值查询第二哈希表;若在所述第二哈希表中查到与所述第一键值对应的第二哈希值,所述第二哈希表中的键值对应的哈希值指示所述目标块中目标数据的地址,根据所述第二哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据,并将所述目标块中位于所述第一子目标块之前的目标数据与所述目标块中位于所述第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;
所述将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;所述生成第一编码序列,包括:
从所述第一匹配结果和所述第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成所述第一编码序列;所述第一编码序列中还包括指示位,用于当所述第一匹配结果中匹配的目标数据量大于所述第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述目标块,或用于当所述第二匹配结果中匹配的目标数据量大于所述第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述参考块。
即本申请中提供了第一哈希表和第二哈希表,对于一个键值,可以在这两个哈希表中进行查询匹配。同一个哈希值在第一哈希表和第二哈希表中可能都会出现,所以在根据运算结果进行查表及匹配时可能会得到两个匹配结果,那么可以选择数据量较大的匹配结果进行编码,这样做可以提高匹配准确度,及提高压缩率。
结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第五种可能的实现方式中,若在所述第一哈希表中未查到与所述第一键值对应的哈希值,所述生成第一编码序列前还包括:
根据所述第一键值查询第二哈希表;
若在所述第二哈希表中查到与所述第一键值对应的哈希值,所述第二哈希表中键值对应的哈希值指示目标数据的地址;根据所述第二哈希表中所述第一键值对应的哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据;
所述第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于所述目标块。
本申请中提供了第一哈希表和第二哈希表,对于一个键值,可以在这两个哈希表中进行查询匹配。如果一个哈希值只在其中一个哈希表中出现,则在根据运算结果进行查表及匹配时可能只得到一个匹配结果,那么就可以直接对该匹配结果进行编码即可。考虑到这种情况,因此本申请中的编码序列中提供指示位,可以指示与本次匹配成功的目标数据相匹配的数据是位于目标块还是参考块,这样在后续解码时就能够准确找到与该编码序列对应的目标数据匹配成功的目标数据相匹配的数据是位于哪里,从而提高解码的准确率。另外,直接在编码序列中就可以通过指示位来指示数据的位置,无需再另外耗费存储空间用于记录该信息,可以有效节省存储空间,也方便解码时直接使用,提高解码效率。
结合第一方面的第四种可能的实现方式或第五种可能的实现方式,在第一方面的第六种可能的实现方式中,还包括:
更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
即,可以根据本次的第一键值对应的哈希值来更新第二哈希表中存储的的第一键值对应的哈希值,这里的更新,可以是指用新的哈希值替换第二哈希表中的旧的哈希值,这样可以保证第二哈希表中的哈希值得到及时更新,提高下一次的匹配成功率。
结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第七种可能的实现方式中,
在根据所述第一键值查询第一哈希表之后,若在所述第一哈希表中未查到与所述第一键值对应的哈希值,则根据所述第一键值查询第二哈希表;
若在所述第二哈希表中未查到与所述第一键值对应的哈希值,则更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
结合第一方面或第一方面的第一种可能的实现方式至第三种可能的实现方式中的任一种可能的实现方式,在第一方面的第八种可能的实现方式中,
在对所述第一子目标块进行哈希运算得到第一键值之后,根据所述第一键值查询第二哈希表;
若在所述第二哈希表中未查到与所述第一键值对应的哈希值,则根据更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
即,如果在第二哈希表中未查询到与第一键值对应的哈希值,可以将该第一键值对应的哈希值插入第二哈希表中的相应位置,即根据该第一键值对应的哈希值更新第二哈希表,这样,在下次再出现该第一键值时,就可以在第二哈希表中查找到对应的哈希值。
第二方面,提供一种编码装置,包括:
存储器,用于存储指令;
处理器,用于通过执行所述指令:
获取第一子目标块,所述第一子目标块属于目标块;
对所述第一子目标块进行哈希运算得到第一键值,根据所述第一键值查询第一哈希表,所述第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在所述第一哈希表中查到与所述第一键值对应的第一哈希值,根据所述第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第二参考数据为所述参考块中位于所述第一参考数据之后的其他参考数据;
根据所述首个目标数据及所述第二目标数据的匹配结果生成第一编码序列;其中,所述第一编码序列中包括匹配长度和偏移量,所述匹配长度用于指示本次匹配成功的目标数据的长度,所述偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
结合第二方面,在第二方面的第一种可能的实现方式中,所述处理器还用于:
在所述根据所述第一键值查询第一哈希表之前,按照第一步长,从所述参考块中获取参考数据块;每个参考数据块包括n位参考数据,所述第一子目标块包括n位目标数据,n为正整数;
构建所述第一哈希表,所述第一哈希表的键值为所述参考数据块通过所述哈希运算获取的。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述处理器还用于:
在所述生成第一编码序列之前,将所述目标块中位于所述第一子目标块之前的目标数据与所述参考块中位于所述第一参考数据之前的其他参考数据进行匹配。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述第一编码序列中还包括未匹配成功的目标数据,所述未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述处理器还用于:
在所述对所述第一子目标块进行所述哈希运算得到第一键值之后,根据所述第一键值查询第二哈希表;若在所述第二哈希表中查到与所述第一键值对应的第二哈希值,所述第二哈希表中的键值对应的哈希值指示所述目标块中目标数据的地址,根据所述第二哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据,并将所述目标块中位于所述第一子目标块之前的目标数据与所述目标块中位于所述第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;所述将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;
从所述第一匹配结果和所述第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成所述第一编码序列;所述第一编码序列中还包括指示位,用于当所述第一匹配结果中匹配的目标数据量大于所述第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述目标块,或用于当所述第二匹配结果中匹配的目标数据量大于所述第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述参考块。
结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式,在第二方面的第五种可能的实现方式中,所述处理器还用于:
若在所述第一哈希表中未查到与所述第一键值对应的哈希值,则在所述生成第一编码序列之前,根据所述第一键值查询第二哈希表;
若在所述第二哈希表中查到与所述第一键值对应的哈希值,所述第二哈希表中键值对应的哈希值指示目标数据的地址;根据所述第二哈希表中所述第一键值对应的哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据;
所述第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于所述目标块。
结合第二方面的第四种可能的实现方式或第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述处理器还用于:
更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式,在第二方面的第七种可能的实现方式中,所述处理器还用于:
在根据所述第一键值查询第一哈希表之后,若在所述第一哈希表中未查到与所述第一键值对应的哈希值,则根据所述第一键值查询第二哈希表;
若在所述第二哈希表中未查到与所述第一键值对应的哈希值,则更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
结合第二方面或第二方面的第一种可能的实现方式至第三种可能的实现方式,在第二方面的第八种可能的实现方式中,所述处理器还用于:
在对所述第一子目标块进行哈希运算得到第一键值之后,根据所述第一键值查询第二哈希表;
若在所述第二哈希表中未查到与所述第一键值对应的哈希值,则更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
第三方面,提供一种编码装置,该编码装置包括用于执行第一方面的方法的模块。
相较于现有技术,本申请提出的方案能够更快的完成对子目标块的匹配,节省了数据压缩的时间,提高了数据压缩的效率。
附图说明
图1为本发明实施例中编码方法的流程图;
图2为本发明实施例中构建第一哈希表的过程的一种示意图;
图3为本发明实施例中编码序列的一种示意图;
图4为本发明实施例中编码方法的另一种流程图;
图5为本发明实施例中编码装置的结构框图;
图6为本发明实施例中编码装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,在采用XDelta编码方式时,需要进行逐字节的匹配,那么,如果参考块的数据量比较大的话,匹配过程的工作量就比较大,耗费的时间也比较多,导致数据压缩的效率较低。
本发明充分考虑到以上问题,在得到一个子目标块时,先将其进行哈希运算,然后根据运算结果在参考块对应的第一哈希表中查询对应的哈希值,再根据查询到的哈希值在参考块中找到相应的位置,即找到相应的参考数据,从而可以将该子目标块在该位置处进行匹配,例如可以以找到的参考数据作为起点,将子目标块进行向后匹配。这样,通过预先确定出一个大概的位置,缩小了需要匹配的范围,极大地减少了系统的工作量,节省了数据压缩的时间,提高了数据压缩的效率,也提高了系统性能。
在待压缩的目标块较多时,本发明实施例的优势较为明显。例如,待压缩的目标块有50个,其中每个目标块的大小为8K比特(bit),即目标块的总的大小为400Kbit,以及,有一个参考块,该参考块的大小为8Kbit。本发明实施例中如下介绍的是针对其中的每个目标块进行编码的方法,按照本发明实施例中的方法对这50个目标块均进行编码后,例如压缩率为50%,那么得到的压缩结果的大小就是200Kbit的编码序列加上8Kbit参考块的,比起400Kbit来说小了许多,节省了存储空间。
贯穿本说明书,以前述为例,目标块指代大小为8Kbit的数据块,参考块指代大小为8Kbit的参考块,目标块和参考块的大小一般相同,实际中参考块和目标块的大小可以自行定义,此处仅为实例性的;目标数据为目标块中的某一个数据,参考数据为参考块中的某一个数据,子目标块由目标块中连续n位目标数据构成,n为正整数。
下面结合说明书附图对本发明实施例作进一步详细描述。
请参见图1,本发明实施例提供一种编码方法,该方法的流程描述如下。
步骤101:获取第一子目标块,第一子目标块属于目标块;
步骤102:对第一子目标块进行哈希运算得到第一键值,根据第一键值查询第一哈希表,第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在第一哈希表中查到与第一键值对应的第一哈希值,根据第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将第一子目标块的首个目标数据与第一参考数据进行匹配,将目标块中的第二目标数据与参考块中的第二参考数据进行匹配,第二目标数据为位于第一子目标块的首个目标数据之后的其他目标数据,第二参考数据为参考块中位于第一参考数据之后的其他参考数据;
步骤103:根据首个目标数据及第二目标数据的匹配结果生成第一编码序列;其中,第一编码序列中包括匹配长度和偏移量,匹配长度用于指示本次匹配成功的目标数据的长度,偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
本发明实施例中,第一子目标块可以包括待压缩的任意一个目标块中的连续n位数据,n为正整数。例如,可以预先规定,每次参与哈希运算的为第一数量个连续的数据,则第一子目标块就包括第一数量个连续的数据,即第一子目标块可以看作是第一数量个连续的数据构成的数据组合,或者称为数据段。即,第一数量为n。
在实际应用中,可以认为这里的第一子目标块是一个目标块中的一部分连续的数据,即一个目标块中的子目标块,即,实际的一个目标块中可以包括有较多的数据(包括的数据的数据量大于n)。
例如,共有8个目标块,其中每个目标块的大小为8Kbit,n为4,即第一子目标块包括其中一个目标块中的4位连续的数据。
因此,本发明实施例中的第一子目标块只是一个称谓,不代表实际情况。比如,在实际情况中,第一子目标块可能就是一个完整的目标块,或者,第一子目标块也可能是一个完整的目标块中的子目标块。
在需要对第一子目标块进行编码时,可以根据哈希运算算法将第一子目标块中包括的数据进行哈希运算。这里的哈希运算算法可以是预先规定的哈希运算算法,该哈希运算算法与第一哈希表所对应的哈希运算算法为同一算法。
哈希表例如为Key(键)-Value(值)形式,比如,将第一子目标块中的数据进行哈希运算,得到的是Key,第一哈希表中,Key与Value是一一对应的关系,则根据得到的Key,就可以在第一哈希表中查询对应的Value。其中,如果仅有一个参考块的情况下,Value可以用于指示该Value对应的第一参考数据的地址与参考块的首地址之间的距离。
因为哈希值表示两个数据的地址之间的距离,所以,一个哈希值可以认为对应于一个数据组合,比如对应一个子目标块或一个参考数据块,一个参考数据块包括n位参考数据,或者,一个哈希值也可以认为对应一个数据,比如对应一个子目标块中的首个数据或对应一个参考数据块中的首个数据。
例如,第一哈希表中Key与Value是一一对应的关系。查找第一哈希表的过程可以是:根据第一子目标块中的数据进行哈希运算,得到第一Key,则在第一哈希表中查找与第一Key相同的Key,如果在第一哈希表中找到了第一Key,则第一哈希表中的第一Key对应第一Value,所述第一Value就可以认为是第一子目标块对应的第一Key对应的第一哈希值。
例如,目标块中的第一子目标块包括的数据为BCFG,BCFG为连续的四个数据,本例中第一子目标块中的每一个数据为一个字符,实际中第一子目标块中的每一个数据可以为字符、数字或其他可能的数据种类,对该第一子目标块进行哈希运算,可以得到一个键值(Key),例如称为第一键值,针对该第一键值,可以在第一哈希表中查询对应的哈希值(例如称为第一哈希值)。例如对第一子目标块进行哈希运算得到第一Key,则在第一哈希表中查找与之相同的Key,只要在第一哈希表中找到与第一Key相同的Key(例如称为第二Key),则第一哈希表中的第二Key就对应一个Value(第一哈希值),对于查询到对应的第一哈希值的第二Key,可以确定与第一哈希值匹配的第一参考数据,第一参考数据位于参考块中,从而可以将第一子目标块的首个目标数据与第一参考数据进行匹配,将目标块中的第二目标数据与参考块中的第二参考数据进行匹配,即,在确定第一参考数据后,可以将第一子目标块及目标块中位于所述第一子目标块之后的目标数据与所述第一参考数据及参考块中位于所述第一参考数据之后的其他参考数据进行后向匹配(或者也可以称为向后匹配),直到无法匹配为止,得到该第一键值对应的匹配结果。
例如,第一子目标块包括的数据为BCFG,BCFG为连续的四个数据,参考块为AEBCFGHIJKLMN,比如确定的第一参考数据为参考块中的数据B,那么,可以将第一子目标块从数据B开始,与参考块中的数据B以及数据B之后的其他数据进行匹配,本例中,显然第一子目标块中的BCFG均能够匹配成功,因为本发明实施例提供的方案是后向匹配,则,第一子目标块匹配成功后,对于目标块中位于第一子目标块之后的其他目标数据可以继续进行匹配,例如目标块为BCFGHIJKPQA,其中第一子目标块为BCFG,则第一子目标块匹配成功后,对于从数据H开始的其他目标数据可以继续进行匹配,直到无法匹配为止。显然在本例中,最终匹配得到的匹配结果为BCFGHIJK,也即本申请文件中的第一匹配结果。
再例如,第一子目标块包括的数据为BCFG,BCFG为连续的四个数据,参考块为AEBCFQHIJKLMN,比如确定的第一参考数据为参考块中的数据B,那么,可以将第一子目标块从数据B开始,与参考块中的数据B以及数据B之后的其他数据进行匹配,本例中,显然第一子目标块中的BCFG中的BCF能够匹配成功,而从数据G开始就无法匹配,那么目标块中位于第一子目标块之后的其他目标数据自然也无法进行匹配,因此在本例中,最终匹配得到的匹配结果为BCF,也即本申请文件中的第一匹配结果。
这里的第一参考数据,可以是参与运算得到第一哈希表中的第一哈希值的参考数据块中的第一个数据,即该参考数据块中的首地址对应的数据,或者,这里的第一参考数据也可以是指参与运算得到第一哈希表中的第一哈希值的该参考数据块。
当然,每次参与哈希运算的一个子目标块中包括的数据量也即进行哈希运算的数据的位数,本发明不作限制,可根据具体需求来设定。例如,如果子目标块越大,则每次参与哈希运算的数据越多,则系统的工作量较小,匹配过程所需的时间较短,子目标块越小,如果每次参与哈希运算的数据越少,则匹配过程较为细致,匹配结果可以更为准确。
本发明实施例中,如果是根据与第一哈希表进行匹配之后得到的匹配结果生成第一编码序列,那么第一编码序列中包括的偏移量可以用于指示与目标块中本次匹配成功的目标数据相匹配的参考数据在参考块中所在的位置。
可选的,在根据第一键值查询第一哈希表之前,还包括:
按照第一步长,从参考块中获取参考数据块;每个参考数据块包括n位参考数据,第一子目标块包括n位目标数据,n为正整数;
构建第一哈希表,第一哈希表的键值为参考数据块通过哈希运算获取的。
即,可以根据已知的参考块中的参考数据预先构建第一哈希表,其中每次参与哈希运算的参考数据块包括n位参考数据。本发明实施例中,构建第一哈希表时,每次参与哈希运算的参考数据的数据量,与将目标块进行匹配时每次参与运算的模板数据的数据量(即一个子目标块所包括的数据的数据量)需相等,否则可能会出现得到的运算结果的长度不同而无法进行匹配的情况。
例如,请参见图2,为构建第一哈希表的过程。第一哈希表为HashTable(Key)=Value,在该实施例中,哈希运算算法例如为通过黄金分割素数进行运算的规则,即在该实施例中,一个Key表示对一个参考数据块通过黄金分割素数2654435761U计算得到的哈希值,这里使用黄金分割素数是具体实现时的一种选择,也可考虑使用其它素数,即也可以考虑使用其他的哈希运算算法,本发明实施例不作限制。Value表示一个参考数据块的首地址与参考块的首地址之间的距离,相当于表示该参考数据块在参考块中所在的位置。n的值可根据需要设定,本发明不作限制,例如可以设定为4。
其中,图2中,Value=p-head,p指代计算得到该Value对应的Key值的参考数据块在参考块中所在的位置(例如为计算得到该Value对应的Key值的参考数据块的首地址),head是参考块的第一个数据的位置(也即参考块的首地址),这两个地址之间的差就是该计算得到该Value对应的Key值的参考数据块的第一个数据和参考块的第一个数据之间距离,该距离即为Value的值。
图2中,Key=(*((unsignedint*)p)*2654435761U)>>19。unsignedint为C语言中的一种数据类型,p表示指向计算得到该Value对应的Key值的参考数据块的首地址的指针,这个运算过程表示通过黄金分割素数进行的运算。
一般来说,哈希表越大,则压缩率会有一定程度提高,但性能势必会有所下降,所以恰到大小的哈希表非常重要。关于Value,Delta分块压缩领域一般的分块大小为4Kbit或8Kbit,所以可以采用2Byte(字节)表示Value(允许的最大分块为64Kbit),这样在保证够用的情况下既符合字节对齐又不存在字节冗余存在。另一方面,考虑到后续的编码序列中的Off(偏移量)可以用15bit表示当前数据与参考数据的距离,所以这里的2Byte的Value设计也足够使用。关于Key,考虑到一般服务器的CPU(中央处理器)的L1cache(一级缓存)的容量最小为32Kbit,而本发明实施例中的编码方案包括两个哈希表,因此每个哈希表的大小可设计为16Kbit,这样可保证速度性能较佳,因此可以设计第一哈希表的键数为8Kbit个,取Key为小于8Kbit的值。
可选的,在该实施例中,在进行哈希值计算填充第一哈希表的过程中,为提高构造和查找速度,可以采用抽样技术,这样可进一步提速,例如在抽样时可每次移位第一步长个数据p。
例如,待参与构建第一哈希表的参考块包括的数据为WILMBCFGAB,假设规定每次参与哈希运算的数据为4个,即假设n为4,那么进行哈希值计算填充第一哈希表的过程中,可以分别对参考块中包括的WILM、ILMB、LMBC、MBCF、BCFG、CFGA和FGAB等参考数据块进行哈希运算。而如果采用抽样的方式来选取参考数据块,例如规定每隔2个数据选取一个参考数据块,即step为2,那么参考块中参与哈希运算的参考数据块就包括:WILM、MBCF和FGAB。可见,通过抽样选取参考数据块的方式,使得参考块中待参与构建第一哈希表的参考数据块的数量减少,减轻系统的工作量。
继续以图2为例,图2中的第一行表示参考块中包括的数据,第二行和第三行分别表示Key和Value的计算过程,最后一行表示得到的第一哈希表,在第一哈希表中,例如Key为0时对应的Value为Value0,Key为1时对应的Value为Value1,等等。例如第一数量为n,参考块的首地址为head,即图2中数据a所在的地址。图2中采用了抽样的方式来选取参考数据块,第一步长用step表示,那么,例如对于数据x来说,其对应的地址就可以是head+n*step。这样,通过在第一行中抽样选取参考数据块来进行计算,得到了第一哈希表。其中,p是指计算得到一个Value对应的Key值的参考数据块在参考块中所在的位置(例如为计算得到该Value对应的Key值的参考数据块的首地址)。
本发明实施例提供第一哈希表,将大量的子目标块同参考块的字符匹配过程替换为先通过第一哈希表查找,找到子目标块在参考块中的潜在匹配位置后再将该子目标块及目标块中位于该子目标块之后的目标数据与潜在匹配位置处的参考数据及参考块中位于该参考数据之后的其他参考数据进行后向匹配,减少了较多的匹配过程,系统性能得到了数量级的优化。
且本发明实施例中,在第一哈希表的构建过程中可采用抽样技术,系统性能根据抽样步长得到数倍提升,而抽样所带来的遗漏匹配损失通过匹配过程中的向后匹配过程可进行补偿。
可选的,第一哈希表的使用过程中,可以对第一哈希表进行更新。比如,根据参考数据块1计算得到Key1,参考数据块1对应的Value为Value1,将Key1和Value1添加到了第一哈希表中。处理过程中,又根据另外一个参考数据块,例如为参考数据块2计算得到了Key1,但参考数据块2对应的Value为Value2,此时,可以选择用Value2更新第一哈希表中的Value1。当然也可以选择不更新。
其中,如果用Value2更新为Value1,则表明在后续查找第一哈希表进行匹配的过程中,会找到离参考块的首地址更近的匹配数据,如果不用Value2更新Value1,则表明在后续查找第一哈希表进行匹配的过程中,会找到离端点较远的匹配数据。本发明实施例中,将第一子目标块及目标块中位于第一子目标块之后的目标数据与第一参考数据及参考块中位于第一参考数据之后的其他参考数据进行后向匹配,可以尽量弥补在构建第一哈希表过程中因采用抽样技术而带来的损失。
可选的,生成第一编码序列前还包括:
将目标块中位于第一子目标块之前的目标数据与参考块中位于第一参考数据之前的其他参考数据进行匹配。
即,除了如前提到的后向匹配之外,还可以将第一子目标块及目标块中位于第一子目标块之前的目标数据与第一参考数据及参考块中位于第一参考数据之前的其他参考数据进行前向匹配(也可以称为向前匹配),直到无法匹配为止。那么在这种情况下,在生成第一编码序列时,就是根据根据后向匹配的结果及前向匹配的结果生成第一编码序列。
本发明实施例中,除了进行后向匹配之外,还可以进行前向匹配,可以使得匹配数据更多,以减少后续的匹配次数。
例如,目标块中包括的数据为ABCDEFGHIJKLMNOPQRST,设定n为4。例如,对HIJK做哈希运算,得到Key1,在第一哈希表中找到了Key1,第一哈希表中与Key1对应的Value为Value1,根据Value1,在参考块中找到对应的参考数据1,从参考块中的参考数据1开始,将HIJK,以及目标块中位于K之后的其他目标数据与参考块中的参考数据进行连续匹配,即向后匹配。例如,向后匹配的过程中匹配成功的目标数据为HIJKL,即目标数据M未匹配成功。另外,在参考块中找到对应的参考数据1后,还可以从参考块中的参考数据1开始,将HIJK,以及目标块中位于H之前的其他目标数据与参考块中的参考数据进行连续匹配,即向前匹配。例如,向前匹配的过程中匹配成功的目标数据为FG(不算HIJK),即目标数据E未匹配成功。那么,根据向后匹配的结果以及向前匹配的结果,可以得到最终的匹配结果,例如为FGHIJKL,那么可以根据FGHIJKL生成编码序列,也即本申请文件中的第二匹配结果。
其中,前向匹配和后向匹配的执行顺序可以任意
可选的,第一编码序列中还包括未匹配成功的目标数据,未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
或者可以理解为,未匹配成功的目标数据是:向前匹配成功的最后一个目标数据以及与第一编码序列相邻的上一个编码序列对应的最后一个目标数据之间的目标数据。
例如,第一编码序列中还包括Lit位,可以用于存储未匹配成功的数据。
例如,沿用上例,目标块中包括的目标数据为ABCDEFGHIJKLMNOPQRST,设定n为4。例如通过对HIJK进行哈希运算,通过前向匹配以及后向匹配,得到的最终匹配结果为FGHIJKL。那么,根据FGHIJKL生成编码序列1,编码序列1中可以包括:匹配长度为7,偏移量为参考数据1与参考块的首地址之间的距离。例如上一个相邻的编码序列所对应的目标块中的最后一个数据为目标块中的D,即,ABCD与FGHIJK之间的目标数据E未匹配成功,那么,在编码序列1中还可以包括Lit位,用于存储未匹配成功的目标数据,编码序列1中的未匹配成功的目标数据为E,以使得解码过程中根据上一相邻的编码序列能够获取该目标块中的ABCD,而根据本编码序列能够获取该目标块中的EFGHIJK。
可选的,除了构建第一哈希表之外,还可以构建第二哈希表,第二哈希表是与目标块对应的哈希表。构建第二哈希表的方式可以参考构建第一哈希表的方式,构建第二哈希表时,使用的哈希运算算法可以与第一哈希表的哈希运算算法相同,及,构建第二哈希表时,每次参与哈希运算的目标数据的数据量也可以是n。
在得到一个子目标块后,除了可以将其与第一哈希表进行匹配之外,还可以将其与第二哈希表进行匹配。那么可能会得到四种匹配结果:1、在第一哈希表中和第二哈希表中都查到了与对该子目标块进行哈希运算得到的键值对应的哈希值;2、在第一哈希表中未查到与对该子目标块进行哈希运算得到的键值对应的哈希值,在第二哈希表中查到了与对该子目标块进行哈希运算得到的键值对应的哈希值;3、在第一哈希表中和第二哈希表中都未查到与对该子目标块进行哈希运算得到的键值对应的哈希值。4、在第一哈希表中查到了与对该子目标块进行哈希运算得到的键值对应的哈希值,在第二哈希表中未查到与对该子目标块进行哈希运算得到的键值对应的哈希值。下面分别介绍这几种情况;
第一种情况:
可选的,
在对第一子目标块进行哈希运算得到第一键值之后,还包括:
根据第一键值查询第二哈希表;
根据第一键值查询第二哈希表;若在第二哈希表中查到与第一键值对应的第二哈希值,第二哈希表中的键值对应的哈希值指示目标块中目标数据的地址,根据第二哈希值获取第一目标数据,将第一子目标块的首个目标数据与第一目标数据进行匹配,将目标块中的第二目标数据与目标块中的第三目标数据进行匹配,第二目标数据为位于第一子目标块的首个目标数据之后的其他目标数据,第三目标数据为目标块中位于第一目标数据之后的其他目标数据,并将目标块中位于第一子目标块之前的目标数据与目标块中位于第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;
将第一子目标块的首个目标数据与第一参考数据进行匹配,将目标块中的第二目标数据与参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;生成第一编码序列,包括:
从第一匹配结果和第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成第一编码序列;第一编码序列中还包括指示位,用于当第一匹配结果中匹配的目标数据量大于第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于目标块,或用于当第二匹配结果中匹配的目标数据量大于第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于参考块。
第二哈希表与第一哈希表一样,也可以采用Key-Value形式,比如,将第一子目标块中的数据进行哈希运算,得到的是Key,第二哈希表中,Key与Value是一一对应的关系,则根据得到的Key,就可以在第二哈希表中查询对应的Value。其中,Value例如可以用于指示该Value对应的子目标块中的数据的首地址与某个特定的目标块的首地址之间的距离,这个特定的目标块,可以是所有目标块中的第一个目标块,当然也可以是其他的目标块。
第二哈希表中可以既包括Key也包括Value,Key与Value是一一对应的关系。查找第二哈希表的过程可以是:根据第一子目标块中的目标数据进行哈希运算,得到Key(例如称为第一Key),则在第二哈希表中查找与其相同的Key,如果在第二哈希表中找到了与其相同的Key(例如称为第二Key),则第二哈希表中的第二Key对应一个Value(例如称为第一Value),则第一Value就可以认为是第一Key对应的哈希值。
在该实施例中,根据得到的运算结果分别在第一哈希表和第二哈希表中查询对应的哈希值之后,在第一哈希表和第二哈希表中都查询到了对应的哈希值,则可以分别在第一哈希表和第二哈希表中进行匹配。
即,在第一哈希表中查询到与该第一键值对应的第一哈希值,根据第一哈希值确定参考块中的第一参考数据,相当于确定了一个潜在的位置,则将第一子目标块及目标块中位于第一子目标块之后的目标数据与第一参考数据及参考块中位于第一参考数据之后的其他参考数据进行后向匹配,以弥补在构建第一哈希表时因抽样过程带来的遗漏损失,直到无法匹配时,将得到的匹配结果称为第一匹配结果。或者,除了可以后向匹配外,还可以将第一子目标块及目标块中位于第一子目标块之前的目标数据与第一参考数据及参考块中位于第一参考数据之前的其他参考数据进行前向匹配,直到前后都不再匹配,此时得到的匹配结果可以认为是当前匹配点的最大匹配结果,也可以将该匹配结果称为第一匹配结果。
同样的,在第二哈希表中查询到与该第一键值对应的第二哈希值,根据第二哈希值确定目标块中对应的第三目标数据,则将第一子目标块及目标块中位于第一子目标块之后的目标数据与第三目标数据及目标块中位于第三目标数据之后的其他目标数据进行后向匹配,直到无法匹配时,将得到的匹配结果称为第二匹配结果。或者,除了可以后向匹配外,还可以将第一子目标块及目标块中位于第一子目标块之前的目标数据与第三目标数据及目标块中位于第三目标数据之前的其他目标数据进行前向匹配,直到前后都不再匹配,此时得到的匹配结果可以认为是当前匹配点的最大匹配结果,可以将该匹配结果称为第二匹配结果。在第二哈希表中进行匹配的过程,与如前举例介绍的在第一哈希表中进行匹配的过程类似,此处不再多举例。
在得到两个匹配结果后,再从这两个匹配结果中选择字节数量多的(即数据量大的)匹配结果,将选择的匹配结果作为该第一键值的最终匹配结果,并根据选择的匹配结果生成第一编码序列。在这种情况下,第一编码序列中还可以包括指示位,用于指示第一编码序列对应的目标数据相匹配的数据位于参考块中还是位于目标块中,即用于指示选择的匹配结果是根据第一哈希表得到的匹配结果还是根据第二哈希表得到的匹配结果。
其中,如果该指示位指示第一编码序列对应的目标数据相匹配的数据位于参考块中,那么第一编码序列中的偏移量用于指示参考块中本次匹配成功的首个参考数据的地址(可能是第一参考数据,也可能是位于第一参考数据之前的数据)与参考块的首地址之间的距离,如果该指示位指示第一编码序列对应的目标数据相匹配的数据位于目标块中,那么第一编码序列中的偏移量用于指示目标块中本次匹配成功的首个目标数据的地址(可能是第一目标数据,也可能是位于第一目标数据之前的数据)与特定的目标块的首地址之间的距离。
在这种情况下,同一个哈希值在第一哈希表和第二哈希表中可能都会出现,所以在根据运算结果进行查表及匹配时可能会得到两个匹配结果,那么可以选择数据量较大的匹配结果进行编码,这样做可以提高匹配准确度,及提高压缩率。
可选的,所述方法还包括:
更新第二哈希表,使得第二哈希表中第一键值对应的哈希值指示第一子目标块的首个目标数据的地址。
对于不同的数据,在采用同一哈希运算算法进行哈希运算后,可能会得到相同的运算结果,即得到相同的Key,或者,如果目标块中有重复的数据段,那么在采用同一哈希运算算法进行哈希运算后,一般会得到相同的运算结果,即得到相同的Key。
例如目标块1中有两个子目标块,分别为子目标块1和子目标块2,子目标块1包括的目标数据为ABCD,子目标块2包括的目标数据也是ABCD,即这两个子目标块是目标块1中的重复数据块。先对子目标块1进行了哈希运算,得到了Key1,Key1对应的Value为Value1,Key1和Value1存储在第二哈希表中。后来又对子目标块2进行哈希运算,得到的Key也是Key1,但子目标块1与子目标块2在目标块中的位置是不同的,即子目标块1和子目标块2对应的Value是不同的,例如子目标块2对应的Value为Value2。那么,可以选择用Value2更新第二哈希表中的Value1。
即,在查询第二哈希表之后,可以根据本次获取的第一键值对应的哈希值来更新第二哈希表中存储的的第一键值对应的哈希值,这里的更新指用新的哈希值替换第二哈希表中的旧的哈希值,这样可以保证第二哈希表中的哈希值得到及时更新,提高下一次的匹配成功率。
根据如上描述可知,可以更新第二哈希表,也可以不更新第二哈希表。例如,若不更新第二哈希表,则同一个哈希值在第一哈希表和第二哈希表中可能最多出现一次,时间性能较好,也就是说可以缩短数据压缩所需要的时间。
理论和实验都证实,无论更新第二哈希表或不更新第二哈希表,最终的压缩率和性能等差别不大,因此,是否要更新第二哈希表,可以根据实际情况确定。
第二种情况:
可选的,若在第一哈希表中未查到与第一键值对应的哈希值,生成第一编码序列前还包括:
根据第一键值查询第二哈希表;
若在第二哈希表中查到与第一键值对应的哈希值,第二哈希表中键值对应的哈希值指示目标数据的地址;根据第二哈希表中第一键值对应的哈希值获取第一目标数据,将第一子目标块的首个目标数据与第一目标数据进行匹配,将目标块中的第二目标数据与目标块中的第三目标数据进行匹配,第二目标数据为位于第一子目标块的首个目标数据之后的其他目标数据,第三目标数据为目标块中位于第一目标数据之后的其他目标数据;
第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于目标块。
即,根据得到的第一键值分别在第一哈希表和第二哈希表中查询对应的哈希值之后,在第二哈希表中查询到了对应的哈希值,而在第一哈希表中未查询到对应的哈希值,则在第二哈希表中进行匹配。
例如,在第二哈希表中查询到与该运算结果对应的哈希值(例如称为第二哈希值),根据第二哈希值确定目标块中对应的第一目标数据,相当于确定了一个潜在的位置,则将第一子目标块及目标块中位于第一子目标块之后的目标数据与第一目标数据及目标块中位于第一目标数据之后的其他目标数据进行后向匹配,可以根据得到的匹配结果生成第一编码序列。或者,除了进行后向匹配外,还可以将第一子目标块及目标块中位于第一子目标块之前的目标数据与第一目标数据及目标块中位于第一目标数据之前的其他目标数据进行前向匹配,直到前后都不再匹配,此时得到的匹配结果可以认为是当前匹配点的最大匹配结果,可以根据该匹配结果生成第一编码序列。
可选的,所述方法还包括:
更新第二哈希表,使得第二哈希表中第一键值对应的哈希值指示第一子目标块的首个目标数据的地址。
对该实施例的介绍可参考第一种情况中的描述,即,可以更新第二哈希表,也可以不更新第二哈希表。例如,若不更新第二哈希表,则同一个哈希值在第一哈希表和第二哈希表中可能最多出现一次,时间性能较好,也就是说可以缩短数据压缩所需要的时间。
理论和实验都证实,无论更新第二哈希表或不更新第二哈希表,最终的压缩率和性能等差别不大,因此,究竟是否要更新第二哈希表,可以根据实际情况确定。
第三种情况:
可选的,
在根据第一键值查询第一哈希表之后,还包括:
若在第一哈希表中未查到与第一键值对应的哈希值,则根据第一键值查询第二哈希表;
根据得到的匹配结果生成第一编码序列,包括:
若在第二哈希表中未查到与第一键值对应的哈希值,则更新第二哈希表,使得第二哈希表中第一键值对应的哈希值指示第一子目标块的首个目标数据的地址。
即,根据得到的第一键值分别在第一哈希表和第二哈希表中查询对应的哈希值之后,在第一哈希表和第二哈希表中都未查询到对应的哈希值,则无法进行匹配。
在这种情况下,可以将该第一键值对应的哈希值插入第二哈希表中的相应位置,即根据该第一键值对应的哈希值更新第二哈希表,这样,在下次再出现该第一键值时,就可以在第二哈希表中查找到对应的哈希值。当然,也可以选择不更新第二哈希表,可根据实际情况确定是否更新。
第四种情况:
可选的,
在对第一子目标块进行哈希运算得到第一键值之后,还包括:
根据第一键值查询第二哈希表;
若在第二哈希表中未查到与第一键值对应的哈希值,则更新第二哈希表,使得第二哈希表中第一键值对应的哈希值指示第一子目标块的首个目标数据的地址。
即,根据得到的第一键值分别在第一哈希表和第二哈希表中查询对应的哈希值之后,在第一哈希表中查询到了对应的哈希值,而在第二哈希表中未查询到对应的哈希值,则在第一哈希表中进行匹配,并根据通过第一哈希表匹配得到的匹配结果生成第一编码序列,其中,匹配过程以及生成第一编码序列等过程可参考如前的描述。
在这种情况下,可以将该第一键值对应的哈希值插入第二哈希表中的相应位置,即根据该第一键值对应的哈希值更新第二哈希表,这样,在下次再出现该第一键值时,就可以在第二哈希表中查找到对应的哈希值。当然,也可以选择不更新第二哈希表,可根据实际情况确定是否更新。
实际使用中,例如有一个8Kbit的参考块,以及一个8Kbit的待编码的目标块,首先可以根据参考块生成第一哈希表,具体的生成过程参考本实施例前述部分,然后开始对该目标块进行编码,例如目标块为ABCDEFGHIJKABCD,以step为1,n为4为例;首先对目标块中的子目标块ABCD进行哈希运算,获得ABCD对应的键值后,在第一哈希表中查询,如果在第一哈希表中查询到了相同的键值,则可以根据本实施例前述部分输出编码序列,如果在第一哈希表中未查询到相同的键值,则可以将ABCD对应的键值存入第二哈希表中,同时第二哈希表中该键值对应的哈希值为数据A对应的地址。随后,当获取了子目标块BCDE后,对其进行哈希运算获取对应的键值并在第一哈希表和第二哈希表中查询,根据查询的结果输出编码序列,具体的处理过程参考本实施例前述的查询两个哈希表的四种情况的内容部分;那么,当处理到目标块中第十二位数据时,再次出现了子目标块ABCD,这个子目标块对应的键值在第一哈希表中仍然无法找到,但是由于子目标块ABCD对应的键值以及哈希值已经存入了第二哈希表,因此当子目标块ABCD再次出现并寻求匹配时,在第二哈希表中将可以查询到其对应的哈希值,通过第二哈希表的运用,使得目标块中后面进行处理的子目标块,可以和目标块中前面已经处理过的子目标块进行匹配,不再仅仅只能和参考块中的参考数据进行匹配,进一步提升了编码的效率以及匹配的成功率。
本发明实施例中,在得到一个匹配结果后,即可根据该匹配结果生成一个编码序列,并可以输出该编码序列,以完成编码过程。
请参见图3,为本发明实施例中提供的编码序列的一种可能的示意图。图3中,Head表示序列头,是整个编码序列的开始节点,LLen表示字符长度,是编码序列中可能存在的字段,是对Head中的字符长度存满的情况的补充。Lit表示字符,是编码序列中可能存在的字段,用于存储目标块中未匹配成功的字符,即未匹配的目标数据。Off表示偏移量,是编码序列中必然存在的字段,Off中可以包括如前所述的指示位和偏移量。MLen表示匹配长度,是编码序列中可能存在的字段,是对Head中匹配长度存满的情况的补充。
其中,Head例如可以为固定长度,例如该长度可以是1Byte。在Head中,高h1bit可用于存放字符长度,例如Head中高h1个bit的存放方式如下,例如h1为16:
0:无;
1~14:用于存放字符长度;
15:15+Llen用于存放字符长度。
其中,字符长度是指上一次匹配结束到本次匹配开始之间未得到匹配的目标数据的长度。15+Llen表示,当字符长度达到15时,就新开辟一个空间用于存放多出来的字符长度,那么超过15的这部分字符长度,即多出来的字符长度用Llen表示。
在Head中,低h2bit可用于存放匹配长度,例如Head中低h2个bit的存放方式如下,例如h2为16:
0:无;
1~14:用于存放匹配长度;
15:15+Llen用于存放匹配长度。
其中,匹配长度是指本次连续匹配的字节的长度,即本次匹配成功的数据长度。15+Llen表示,当匹配长度达到15时,就新开辟一个空间用于存放多出来的匹配长度,那么超过15的这部分匹配长度,即多出来的匹配长度用Llen表示。
这里的h1和h2的取值只是举例,具体可以根据需要来分配。
由于Head中用于存放字符长度及匹配长度的空间都可变,即可以根据实际的长度来增加新的空间,那么,以字符长度举例,如果字符长度较短,则占用的Head的存储空间较少,能够提高数据压缩率,如果字符长度较长,则Head的空间也可变,能够满足各种不同的需求。
LLen用于存放字符长度,例如LLen的长度可变,例如可变范围为[0,n]Byte。例如,当Head中存放的字符长度达到(2^h1-1)时,分配1Byte作为LLen,用于存放字符长度,当该分配的1Byte的存放值达到255时,再次分配1Byte作为LLen,用于存放字符长度,直到分配的作为LLen的Byte的存放值小于255。
Lit的长度例如可变,可变范围例如为[0,n]Byte。Lit用于存储目标块的原数据,即目标块中未匹配成功的目标数据。例如,目标块中的字符QW未匹配成功,则可以将QW存储在Lit中。Lit的长度例如可以为Head的高h1bit和LLen的bit数量之和。
Off的长度例如为固定长度,该长度例如为2Byte。Off的高1bit可用于存放匹配块的类型,即用于表示与一个目标块匹配成功的数据段究竟是参考块中的数据段还是目标块中的数据段,例如:
0:目标块;
1:参考块。
Off的低15bit可用于存放偏移量,例如:
若匹配成功的数据块为目标块中的数据块,例如,是将第一子目标块进行匹配,而与第一子目标块匹配的数据块位于目标块中,则偏移量用于表示与本次匹配成功的目标数据相匹配的目标数据在目标块中所在的位置;
若匹配的数据段为参考块中的数据段,则偏移量用于表示与本次匹配成功的目标数据相匹配的参考数据在参考块里所在的位置。
通过Off的指示,可以明确匹配成功的数据究竟是目标数据还是参考数据,从而能够准确地进行压缩以及恢复原数据,有效地支持了如前所述的通过两个哈希表进行匹配的方案,性能较好。
MLen的长度例如可变,可变的范围例如为[0,n]Byte。例如,当Head中存放的匹配长度达到(2^h2-1)时,可分配1Byte作为MLen,存放字符长度,当该分配的1Byte的存放值达到255时,再次分配1Byte作为MLen,用于存放字符长度,直到分配的作为MLen的Byte的存放值小于255。
本发明实施例中提供的这种编码序列应用于编码(例如可以是Delta编码)等领域,具有压缩率高和性能好等优点。
如前介绍的都是编码过程,下面介绍一下对第一编码序列进行解码的方式,以完善整个流程。
例如,要对第一编码序列进行解码,可以根据第一编码序列的Off中的指示位获知匹配成功的数据是位于参考块中还是目标块中,例如Off中的指示位的值为1,比如指示位为1时表明指示的是参考块,则可以确定与第一编码序列匹配成功的数据位于参考块中。根据Off中的偏移量,可以获知与第一编码序列匹配成功的第一个参考数据在参考块中的位置,例如参考块包括的参考数据为ABCDEFGHIJKLMNOPQRST,Off中的偏移量指示的参考数据是其中的参考数据I。根据第一编码序列的Head获知匹配成功的数据的位数为6,以及未匹配成功的数据的位数为2,那么,可以根据参考块获知,匹配成功的数据为IJKLMN,以及,可以根据第一编码序列的Lit得到未匹配成功的数据,例如为WK,则,可以得到第一编码序列对应的目标数据,为WKIJKLMN。
下面介绍一个较为完整的例子,用于更好地理解本发明各个实施例提供的技术方案。
请参见图4,为本发明实施例提供的编码方法的流程图。
步骤1、获取第一子目标块。例如,共有10个大小均为8Kbit的目标块,要对其均进行编码,这里介绍的是对其中的一个目标块中的一个子目标块进行编码的过程,对其他目标块的处理过程都可以类似。第一子目标块例如可以是这10个目标块中的任意一个子目标块,例如第一子目标块中包括n位目标数据。
步骤2、对第一子目标块进行哈希运算得到键值1,根据键值1,分别查询第一哈希表和第二哈希表。若在第一哈希表和第二哈希表中都查询到与键值1对应的哈希值1,则执行步骤3,若在第一哈希表中查询到与键值1对应的哈希值1,在第二哈希表中未查询到与键值1对应的哈希值1,则执行步骤7,若在第一哈希表中未查询到与键值1对应的哈希值1,在第二哈希表中查询到与键值1对应的哈希值1,则执行步骤8,若在第一哈希表和第二哈希表中都未查询到与键值1对应的哈希值1,则执行步骤9。
步骤3、将第一子目标块分别根据第一哈希表中查询到的第一哈希值和第二哈希表中查询到的第二哈希值进行匹配,得到两个匹配结果。在进行匹配时,可以只进行后向匹配,或者也可以均进行前向匹配及后向匹配。另外,还可以根据第一键值对应的哈希值更新第二哈希表中的第二哈希值。匹配过程可参考如前的描述。
步骤4、从两个匹配结果中选择数据量大的匹配结果,例如选择的是匹配结果1。
步骤5、根据确定的匹配结果生成并输出编码序列1。编码序列1所包含的内容以及格式等可参考图1流程中的相关描述。确定的匹配结果可能是匹配结果1,也可能是后续即将介绍的匹配结果2。执行步骤6。
步骤6、判断是否还有待匹配的子目标块。其中,若还有待匹配的子目标块,则执行步骤1,若没有待匹配的子目标块,则结束流程。
步骤7、将第一子目标块根据第一哈希表中查询到的第一哈希值进行匹配,得到匹配结果,例如为匹配结果1。执行步骤5。这个匹配结果,可以是后向匹配得到的匹配结果,或者也可以是前向匹配加后向匹配得到的匹配结果。另外,还可以根据第一键值对应的哈希值更新第二哈希表中的第二哈希值。
步骤8、将第一子目标块根据第二哈希表中查询到的第二哈希值进行匹配,得到匹配结果,例如为匹配结果2。执行步骤5。这个匹配结果,可以是后向匹配得到的匹配结果,或者也可以是前向匹配加后向匹配得到的匹配结果。另外,还可以根据第一键值对应的哈希值更新第二哈希表中的第二哈希值。
步骤9、根据第一键值对应的哈希值更新第二哈希表中的第二哈希值。
其中,图4流程中所涉及的匹配过程、生成编码序列的过程、编码序列中所包括的信息等内容,以及其他未详细介绍的内容,均可参考图1流程中的相关介绍。
下面结合附图介绍本发明实施例中的设备。
请参见图5,基于同一发明构思及上述各实施例,本发明实施例提供一种编码装置,该编码装置可以包括获取模块501和处理模块502,该编码装置可以用于实现如图1流程及如图2流程中所述的方法。
例如,获取模块501可以用于获取第一子目标块,对于图1流程及图2流程中的其他各个步骤,均可以由处理模块502执行。因各个步骤在如前的实施例中均已进行了介绍,因此此处不多赘述,对于获取模块501和处理模块502所完成的功能、以及相应的执行过程等,均可参考如前实施例的描述。
请参见图6,基于同一发明构思及上述各实施例,本发明实施例提供一种编码装置,该编码装置可以包括存储器601和处理器602,该编码装置与图5中的编码装置可以是同一设备。
处理器602例如可以是CPU(中央处理器)或ASIC(ApplicationSpecificIntegratedCircuit,特定应用集成电路),可以是一个或多个用于控制程序执行的集成电路,可以是使用FPGA(FieldProgrammableGateArray,现场可编程门阵列)开发的硬件电路,可以是基带芯片。存储器601的数量可以是一个或多个。存储器601可以包括ROM(ReadOnlyMemory,只读存储器)、RAM(RandomAccessMemory,随机存取存储器)和磁盘存储器。
存储器601可以通过总线与处理器602相连接(图6以此为例),或者也可以通过专门的连接线与处理器602连接。
通过对处理器602进行设计编程,将前述所示的方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述实施例中的所示的方法。如何对处理器602进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
例如,存储器601可以用于存储处理器602执行任务所需的指令,处理器602通过执行存储器601中存储的指令,可以实现图5中的获取模块501和处理模块502,即,对于图1流程及图2流程中的其他各个步骤,均可以由处理器602执行。因各个步骤在如前的实施例中均已进行了介绍,因此此处不多赘述,对于处理器602所完成的功能、以及相应的执行过程等,均可参考如前实施例的描述。
本发明实施例中,在得到目标块中的一个子目标块时(例如称为第一子目标块),先将其进行哈希运算,然后根据运算结果在第一哈希表中查询对应的哈希值,再根据查询到的哈希值在参考块中找到相应的位置,即找到第一参考数据,从而可以将第一子目标块在该位置处进行向后匹配。这样,通过预先确定出一个大概的位置,缩小了需要匹配的范围,极大地减少了系统的工作量,节省了数据压缩的时间,提高了数据压缩的效率,也提高了系统性能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (21)
1.一种编码方法,其特征在于,包括:
获取第一子目标块,所述第一子目标块属于目标块;
对所述第一子目标块进行哈希运算得到第一键值,根据所述第一键值查询第一哈希表,所述第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在所述第一哈希表中查到与所述第一键值对应的第一哈希值,根据所述第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第二参考数据为所述参考块中位于所述第一参考数据之后的其他参考数据;
根据所述首个目标数据及所述第二目标数据的匹配结果生成第一编码序列;其中,所述第一编码序列中包括匹配长度和偏移量,所述匹配长度用于指示本次匹配成功的目标数据的长度,所述偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
2.如权利要求1所述的方法,其特征在于,所述根据所述第一键值查询第一哈希表之前,还包括:
按照第一步长,从所述参考块中获取参考数据块;每个参考数据块包括n位参考数据,所述第一子目标块包括n位目标数据,所述n为正整数;
构建所述第一哈希表,所述第一哈希表的键值为所述参考数据块通过所述哈希运算获取的。
3.如权利要求1或2所述的方法,其特征在于,所述生成第一编码序列前还包括:将所述目标块中位于所述第一子目标块之前的目标数据与所述参考块中位于所述第一参考数据之前的其他参考数据进行匹配。
4.如权利要求3所述的方法,其特征在于,所述第一编码序列中还包括未匹配成功的目标数据,所述未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
5.如权利要求1-4任一所述的方法,其特征在于,
所述对所述第一子目标块进行所述哈希运算得到第一键值后,还包括:
根据所述第一键值查询第二哈希表;若在所述第二哈希表中查到与所述第一键值对应的第二哈希值,所述第二哈希表中的键值对应的哈希值指示所述目标块中目标数据的地址,根据所述第二哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据,并将所述目标块中位于所述第一子目标块之前的目标数据与所述目标块中位于所述第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;
所述将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;
所述生成第一编码序列,包括:从所述第一匹配结果和所述第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成所述第一编码序列;所述第一编码序列中还包括指示位,用于当所述第一匹配结果中匹配的目标数据量大于所述第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述目标块,或用于当所述第二匹配结果中匹配的目标数据量大于所述第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述参考块。
6.如权利要求1-4任一所述的方法,其特征在于,若在所述第一哈希表中未查到与所述第一键值对应的哈希值,所述生成第一编码序列前还包括:
根据所述第一键值查询第二哈希表;
若在所述第二哈希表中查到与所述第一键值对应的哈希值,所述第二哈希表中键值对应的哈希值指示目标数据的地址;根据所述第二哈希表中所述第一键值对应的哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据;
所述第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于所述目标块。
7.如权利要求5或6所述的方法,其特征在于,还包括:
更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
8.一种编码装置,其特征在于,包括:
获取模块,用于获取第一子目标块,所述第一子目标块属于目标块;
处理模块,用于:对所述第一子目标块进行哈希运算得到第一键值,根据所述第一键值查询第一哈希表,所述第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在所述第一哈希表中查到与所述第一键值对应的第一哈希值,根据所述第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第二参考数据为所述参考块中位于所述第一参考数据之后的其他参考数据;
根据所述首个目标数据及所述第二目标数据的匹配结果生成第一编码序列;其中,所述第一编码序列中包括匹配长度和偏移量,所述匹配长度用于指示本次匹配成功的目标数据的长度,所述偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
9.如权利要求8所述的装置,其特征在于,所述处理模块还用于:
在所述根据所述第一键值查询第一哈希表之前,按照第一步长,从所述参考块中获取参考数据块;每个参考数据块包括n位参考数据,所述第一子目标块包括n位目标数据,n为正整数;
构建所述第一哈希表,所述第一哈希表的键值为所述参考数据块通过所述哈希运算获取的。
10.如权利要求8或9所述的装置,其特征在于,所述处理模块还用于:
在所述生成第一编码序列前,将所述目标块中位于所述第一子目标块之前的目标数据与所述参考块中位于所述第一参考数据之前的其他参考数据进行匹配。
11.如权利要求10所述的装置,其特征在于,所述第一编码序列中还包括未匹配成功的目标数据,所述未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
12.如权利要求8-11任一所述的装置,其特征在于,所述处理模块还用于:
所述对所述第一子目标块进行所述哈希运算得到第一键值之后,根据所述第一键值查询第二哈希表;若在所述第二哈希表中查到与所述第一键值对应的第二哈希值,所述第二哈希表中的键值对应的哈希值指示所述目标块中目标数据的地址,根据所述第二哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据,并将所述目标块中位于所述第一子目标块之前的目标数据与所述目标块中位于所述第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;
所述将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;
从所述第一匹配结果和所述第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成所述第一编码序列;所述第一编码序列中还包括指示位,用于当所述第一匹配结果中匹配的目标数据量大于所述第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述目标块,或用于当所述第二匹配结果中匹配的目标数据量大于所述第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述参考块。
13.如权利要求8-11任一所述的装置,其特征在于,所述处理模块还用于:
若在所述第一哈希表中未查到与所述第一键值对应的哈希值,则在所述生成第一编码序列之前,根据所述第一键值查询第二哈希表;
若在所述第二哈希表中查到与所述第一键值对应的哈希值,所述第二哈希表中键值对应的哈希值指示目标数据的地址;根据所述第二哈希表中所述第一键值对应的哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据;
所述第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于所述目标块。
14.如权利要求12或13所述的装置,其特征在于,所述处理模块还用于:
更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
15.一种编码装置,其特征在于,包括:
存储器,用于存储指令;
处理器,用于通过执行所述指令:
获取第一子目标块,所述第一子目标块属于目标块;
对所述第一子目标块进行哈希运算得到第一键值,根据所述第一键值查询第一哈希表,所述第一哈希表的键值对应的哈希值指示参考块中参考数据的地址;若在所述第一哈希表中查到与所述第一键值对应的第一哈希值,根据所述第一哈希值获取该第一哈希值指示的地址对应的第一参考数据,将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第二参考数据为所述参考块中位于所述第一参考数据之后的其他参考数据;
根据所述首个目标数据及所述第二目标数据的匹配结果生成第一编码序列;其中,所述第一编码序列中包括匹配长度和偏移量,所述匹配长度用于指示本次匹配成功的目标数据的长度,所述偏移量用于指示与本次匹配成功的目标数据相匹配的数据所在的位置。
16.如权利要求15所述的装置,其特征在于,所述处理器还用于:
在所述根据所述第一键值查询第一哈希表之前,按照第一步长,从所述参考块中获取参考数据块;每个参考数据块包括n位参考数据,所述第一子目标块包括n位目标数据,n为正整数;
构建所述第一哈希表,所述第一哈希表的键值为所述参考数据块通过所述哈希运算获取的。
17.如权利要求15或16所述的装置,其特征在于,所述处理器还用于:
在所述生成第一编码序列之前,将所述目标块中位于所述第一子目标块之前的目标数据与所述参考块中位于所述第一参考数据之前的其他参考数据进行匹配。
18.如权利要求17所述的装置,其特征在于,所述第一编码序列中还包括未匹配成功的目标数据,所述未匹配成功的目标数据为上一个编码序列对应的匹配成功的最后一个目标数据,与本次匹配成功的第一个目标数据之间的目标数据。
19.如权利要求15-18任一所述的装置,其特征在于,所述处理器还用于:
在所述对所述第一子目标块进行所述哈希运算得到第一键值之后,根据所述第一键值查询第二哈希表;若在所述第二哈希表中查到与所述第一键值对应的第二哈希值,所述第二哈希表中的键值对应的哈希值指示所述目标块中目标数据的地址,根据所述第二哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据,并将所述目标块中位于所述第一子目标块之前的目标数据与所述目标块中位于所述第一目标数据之前的其他目标数据进行匹配,获取第一匹配结果;
所述将所述第一子目标块的首个目标数据与所述第一参考数据进行匹配,将所述目标块中的第二目标数据与所述参考块中的第二参考数据进行匹配的匹配结果为第二匹配结果;
从所述第一匹配结果和所述第二匹配结果中选择匹配的目标数据的数据量大的匹配结果;根据选择的匹配结果生成所述第一编码序列;所述第一编码序列中还包括指示位,用于当所述第一匹配结果中匹配的目标数据量大于所述第二匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述目标块,或用于当所述第二匹配结果中匹配的目标数据量大于所述第一匹配结果的情况下,指示与本次匹配成功的目标数据相匹配的数据位于所述参考块。
20.如权利要求15-18任一所述的装置,其特征在于,所述处理器还用于:
若在所述第一哈希表中未查到与所述第一键值对应的哈希值,则在所述生成第一编码序列之前,根据所述第一键值查询第二哈希表;
若在所述第二哈希表中查到与所述第一键值对应的哈希值,所述第二哈希表中键值对应的哈希值指示目标数据的地址;根据所述第二哈希表中所述第一键值对应的哈希值获取第一目标数据,将所述第一子目标块的首个目标数据与所述第一目标数据进行匹配,将所述目标块中的第二目标数据与所述目标块中的第三目标数据进行匹配,所述第二目标数据为位于所述第一子目标块的首个目标数据之后的其他目标数据,所述第三目标数据为所述目标块中位于所述第一目标数据之后的其他目标数据;
所述第一编码序列中还包括指示位,用于指示与本次匹配成功的目标数据相匹配的数据位于所述目标块。
21.如权利要求19或20所述的装置,其特征在于,所述处理器还用于:
更新所述第二哈希表,使得所述第二哈希表中所述第一键值对应的哈希值指示所述第一子目标块的首个目标数据的地址。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510733615.XA CN105426413B (zh) | 2015-10-31 | 2015-10-31 | 一种编码方法及装置 |
EP16858867.1A EP3361393A4 (en) | 2015-10-31 | 2016-09-21 | Encoding method and device |
PCT/CN2016/099593 WO2017071431A1 (zh) | 2015-10-31 | 2016-09-21 | 一种编码方法及装置 |
US15/924,007 US10305512B2 (en) | 2015-10-31 | 2018-03-16 | Encoding method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510733615.XA CN105426413B (zh) | 2015-10-31 | 2015-10-31 | 一种编码方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426413A true CN105426413A (zh) | 2016-03-23 |
CN105426413B CN105426413B (zh) | 2018-05-04 |
Family
ID=55504625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510733615.XA Active CN105426413B (zh) | 2015-10-31 | 2015-10-31 | 一种编码方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10305512B2 (zh) |
EP (1) | EP3361393A4 (zh) |
CN (1) | CN105426413B (zh) |
WO (1) | WO2017071431A1 (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930104A (zh) * | 2016-05-17 | 2016-09-07 | 百度在线网络技术(北京)有限公司 | 数据存储方法和装置 |
CN106484852A (zh) * | 2016-09-30 | 2017-03-08 | 华为技术有限公司 | 数据压缩方法、设备与计算设备 |
WO2017071431A1 (zh) * | 2015-10-31 | 2017-05-04 | 华为技术有限公司 | 一种编码方法及装置 |
CN107690071A (zh) * | 2016-08-03 | 2018-02-13 | 华为技术有限公司 | 图像数据的压缩方法和装置 |
CN107783990A (zh) * | 2016-08-26 | 2018-03-09 | 华为技术有限公司 | 一种数据压缩方法及终端 |
CN110866141A (zh) * | 2018-08-28 | 2020-03-06 | 杭州网易云音乐科技有限公司 | 音频文件的处理方法、介质、装置和计算设备 |
CN111259203A (zh) * | 2020-01-08 | 2020-06-09 | 上海兆芯集成电路有限公司 | 数据压缩器以及数据压缩方法 |
CN113542769A (zh) * | 2021-09-17 | 2021-10-22 | 苏州浪潮智能科技有限公司 | 一种视频图像编码方法、系统、设备以及介质 |
CN113765854A (zh) * | 2020-06-04 | 2021-12-07 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN113921011A (zh) * | 2021-10-14 | 2022-01-11 | 安徽听见科技有限公司 | 音频处理方法、装置及设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11126594B2 (en) * | 2018-02-09 | 2021-09-21 | Exagrid Systems, Inc. | Delta compression |
CN112749145A (zh) * | 2019-10-29 | 2021-05-04 | 伊姆西Ip控股有限责任公司 | 存储和访问数据的方法、设备和计算机程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7110540B2 (en) * | 2002-04-25 | 2006-09-19 | Intel Corporation | Multi-pass hierarchical pattern matching |
CN102156727A (zh) * | 2011-04-01 | 2011-08-17 | 华中科技大学 | 一种采用双指纹哈希校验的重复数据删除方法 |
CN102870116A (zh) * | 2012-06-30 | 2013-01-09 | 华为技术有限公司 | 内容匹配方法和装置 |
CN103379160A (zh) * | 2012-04-25 | 2013-10-30 | 上海咏云信息技术有限公司 | 一种超大文件的差异同步方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5532694A (en) * | 1989-01-13 | 1996-07-02 | Stac Electronics, Inc. | Data compression apparatus and method using matching string searching and Huffman encoding |
US5874908A (en) * | 1997-09-19 | 1999-02-23 | International Business Machines Corporation | Method and apparatus for encoding Lempel-Ziv 1 variants |
US7840774B2 (en) * | 2005-09-09 | 2010-11-23 | International Business Machines Corporation | Compressibility checking avoidance |
US7538695B2 (en) * | 2007-06-29 | 2009-05-26 | Rmi Corporation | System and method for deflate processing within a compression engine |
US7809701B2 (en) * | 2007-10-15 | 2010-10-05 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and system for performing exact match searches using multiple hash tables |
US8527482B2 (en) * | 2008-06-06 | 2013-09-03 | Chrysalis Storage, Llc | Method for reducing redundancy between two or more datasets |
US8325069B2 (en) * | 2009-12-22 | 2012-12-04 | Intel Corporation | System, method, and apparatus for a scalable processor architecture for a variety of string processing applications |
US8694703B2 (en) * | 2010-06-09 | 2014-04-08 | Brocade Communications Systems, Inc. | Hardware-accelerated lossless data compression |
US9363339B2 (en) * | 2011-07-12 | 2016-06-07 | Hughes Network Systems, Llc | Staged data compression, including block level long range compression, for data streams in a communications system |
US8954392B2 (en) * | 2012-12-28 | 2015-02-10 | Futurewei Technologies, Inc. | Efficient de-duping using deep packet inspection |
KR102358276B1 (ko) * | 2014-09-30 | 2022-02-04 | 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 | 비디오 코딩을 위한 해시 기반 인코더 결정 |
US9419648B1 (en) * | 2015-09-18 | 2016-08-16 | Intel Corporation | Supporting data compression using match scoring |
US9584155B1 (en) * | 2015-09-24 | 2017-02-28 | Intel Corporation | Look-ahead hash chain matching for data compression |
US9473168B1 (en) * | 2015-09-25 | 2016-10-18 | Intel Corporation | Systems, methods, and apparatuses for compression using hardware and software |
CN105426413B (zh) * | 2015-10-31 | 2018-05-04 | 华为技术有限公司 | 一种编码方法及装置 |
-
2015
- 2015-10-31 CN CN201510733615.XA patent/CN105426413B/zh active Active
-
2016
- 2016-09-21 EP EP16858867.1A patent/EP3361393A4/en not_active Ceased
- 2016-09-21 WO PCT/CN2016/099593 patent/WO2017071431A1/zh active Application Filing
-
2018
- 2018-03-16 US US15/924,007 patent/US10305512B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7110540B2 (en) * | 2002-04-25 | 2006-09-19 | Intel Corporation | Multi-pass hierarchical pattern matching |
CN102156727A (zh) * | 2011-04-01 | 2011-08-17 | 华中科技大学 | 一种采用双指纹哈希校验的重复数据删除方法 |
CN103379160A (zh) * | 2012-04-25 | 2013-10-30 | 上海咏云信息技术有限公司 | 一种超大文件的差异同步方法 |
CN102870116A (zh) * | 2012-06-30 | 2013-01-09 | 华为技术有限公司 | 内容匹配方法和装置 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10305512B2 (en) | 2015-10-31 | 2019-05-28 | Huawei Technologies, Co., Ltd. | Encoding method and apparatus |
WO2017071431A1 (zh) * | 2015-10-31 | 2017-05-04 | 华为技术有限公司 | 一种编码方法及装置 |
CN105930104A (zh) * | 2016-05-17 | 2016-09-07 | 百度在线网络技术(北京)有限公司 | 数据存储方法和装置 |
CN105930104B (zh) * | 2016-05-17 | 2019-01-18 | 百度在线网络技术(北京)有限公司 | 数据存储方法和装置 |
CN107690071A (zh) * | 2016-08-03 | 2018-02-13 | 华为技术有限公司 | 图像数据的压缩方法和装置 |
CN107690071B (zh) * | 2016-08-03 | 2020-07-07 | 华为技术有限公司 | 图像数据的压缩方法和装置 |
CN107783990B (zh) * | 2016-08-26 | 2021-11-19 | 华为技术有限公司 | 一种数据压缩方法及终端 |
CN107783990A (zh) * | 2016-08-26 | 2018-03-09 | 华为技术有限公司 | 一种数据压缩方法及终端 |
CN106484852B (zh) * | 2016-09-30 | 2019-10-18 | 华为技术有限公司 | 数据压缩方法、设备与计算设备 |
CN106484852A (zh) * | 2016-09-30 | 2017-03-08 | 华为技术有限公司 | 数据压缩方法、设备与计算设备 |
CN110866141A (zh) * | 2018-08-28 | 2020-03-06 | 杭州网易云音乐科技有限公司 | 音频文件的处理方法、介质、装置和计算设备 |
CN111259203A (zh) * | 2020-01-08 | 2020-06-09 | 上海兆芯集成电路有限公司 | 数据压缩器以及数据压缩方法 |
CN111259203B (zh) * | 2020-01-08 | 2023-08-25 | 上海兆芯集成电路股份有限公司 | 数据压缩器以及数据压缩方法 |
CN113765854A (zh) * | 2020-06-04 | 2021-12-07 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN113542769A (zh) * | 2021-09-17 | 2021-10-22 | 苏州浪潮智能科技有限公司 | 一种视频图像编码方法、系统、设备以及介质 |
CN113542769B (zh) * | 2021-09-17 | 2021-12-10 | 苏州浪潮智能科技有限公司 | 一种视频图像编码方法、系统、设备以及介质 |
WO2023040166A1 (zh) * | 2021-09-17 | 2023-03-23 | 苏州浪潮智能科技有限公司 | 一种视频图像编码方法、系统、设备以及介质 |
CN113921011A (zh) * | 2021-10-14 | 2022-01-11 | 安徽听见科技有限公司 | 音频处理方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3361393A4 (en) | 2018-11-14 |
WO2017071431A1 (zh) | 2017-05-04 |
CN105426413B (zh) | 2018-05-04 |
US10305512B2 (en) | 2019-05-28 |
EP3361393A1 (en) | 2018-08-15 |
US20180205393A1 (en) | 2018-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426413A (zh) | 一种编码方法及装置 | |
US10210044B2 (en) | Storage controller, data processing chip, and data processing method | |
JP6512733B2 (ja) | データ圧縮方法と、該方法を行う装置 | |
US8208532B2 (en) | Method and apparatus for data compression and decompression | |
US8362931B2 (en) | Compression and decompression of mass spectrometry data | |
CN102457283A (zh) | 一种数据压缩、解压缩方法及设备 | |
CN103384884A (zh) | 一种文件压缩方法、文件解压缩方法、装置及服务器 | |
CN104834539B (zh) | 一种数据增量更新方法 | |
CN103248367B (zh) | 码流数据的编码、解码方法和装置 | |
CN105264490A (zh) | 用于加速压缩和解压缩操作的设备以及方法 | |
CA2770348A1 (en) | Compression of bitmaps and values | |
CN105811996A (zh) | 一种基于准循环ldpc的数据处理方法及系统 | |
CN105528183A (zh) | 一种存储数据的方法及存储设备 | |
US20020154770A1 (en) | Method and apparatus for chaotic opportunistic lossless compression of data | |
CN105528178A (zh) | 数据存储方法及固态硬盘 | |
CN106484852B (zh) | 数据压缩方法、设备与计算设备 | |
CN110598057B (zh) | 一种面向遥测数据的数据搜索方法及装置 | |
CN112559462A (zh) | 一种数据压缩方法、装置、计算机设备和存储介质 | |
JP2011090526A (ja) | 圧縮プログラム、方法及び装置、並びに解凍プログラム、方法及び装置 | |
Talasila et al. | Generalized deduplication: Lossless compression by clustering similar data | |
CN202931290U (zh) | 一种基于gzip的压缩硬件系统 | |
CN111752954B (zh) | 一种大规模特征数据存储的方法及装置 | |
KR20120056944A (ko) | Ngs 데이터의 고속 압축장치 및 그 방법 | |
CN114258521A (zh) | 使用编码及解码表的半分类压缩 | |
US10263638B2 (en) | Lossless compression method for graph traversal |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |