本技术实施例涉及数据存储和传输中的数据相似性领域,更具体地,涉及一种数据压缩方法和一种电子设备,该方法改进了电子设备在数据存储和数据传输中的差量压缩。
背景技术:
1、随着计算机技术的发展,需要存储或传输的数据量急剧增加。无损压缩作为一种在不丢失信息的情况下减小数据大小的过程,被广泛用于最大限度地减少存储和传输的数据量。
2、通过相似性检测,可以对相似数据进行去重或差量压缩,并进一步提高数据存储和传输的效率。已知的相似性检测方法计算成本非常高昂并且十分耗时。
技术实现思路
1、本技术实施例提供了一种数据相似性检测的方法,改进了电子设备在数据存储和数据传输中的差量压缩。
2、根据第一方面,本技术实施例提供了一种用于数据相似性检测的方法,包括:将输入块划分为多个输入分块,其中,所述多个输入分块中的每个输入分块包括x个字节;根据预设规则,从所述多个输入分块中的每个输入分块的所述x个字节中选择一个或多个字节集合,其中,所述一个或多个字节集合包括从所述x个字节中选择的按原始顺序不连续的y个字节;基于所述一个或多个字节集合,针对所述多个输入分块中的每个输入分块计算一个或多个输入哈希值;根据所述一个或多个分块的计算出的哈希值,将所述输入块与其它块进行匹配,以确定它们的相似性。然后,以这种方式找到的一个或多个最佳相似性候选块被用作字典,以对输入块进行差量压缩。
3、根据上述技术方案,将输入块划分为多个输入分块,并从每个输入分块中选择少量的字节(字节集合)进行哈希计算。与使用分块中的所有字节进行哈希计算相比,选择字节集合可以降低哈希计算中涉及的计算成本。计算出的哈希值可以用于将输入块与其它块进行匹配,以确定它们的相似性。然后,以这种方式找到的一个或多个最佳相似性候选块作为字典,对输入块进行差量压缩。
4、在一种可选的实现方式中,当对于每个输入分块,所述字节集合的数量为多个时,从每个分块中选择若干个字节集合,并为每个分块计算相应的哈希值数量。每个选择的字节集合的第一个字节从分块的开始偏移,等于0、1、2、4……2m,其中,m是不同字节集合唯一的自然数。
5、根据上述技术方案,如果在一个输入分块中选择多个字节集合,或者为一个输入分块计算多个输入哈希值,则选择的字节集合可能会移位0、1、2、4……2m个字节,这可能有助于检测由于插入和删除2m个字节而移位的相似特征,这由于现代sw中普遍存在的8比特、16比特、32比特和64比特数据类型而相当频繁,因此改进了块之间的相似性检测,并因此提高了差量压缩比。
6、在一种可选的实现方式中,所述预设规则包括:所述不连续的y个字节之间的间隔由修正后的斐波那契序列、对数函数或指数函数确定。修正后的斐波那契序列是没有第一个1的斐波那契序列,如1、2、3、5……
7、在一种可选的实现方式中,所述预设规则包括:对于所述字节集合中的每个字节集合中的任何两个字节,从所述输入分块中的不相邻位置选择所述两个字节。
8、根据上述技术方案,以间隔选择字节,这可以降低选择的字节数量和哈希计算和相似性检测所涉及的计算成本。
9、在一种可选的实现方式中,根据所述多个输入分块的所述输入哈希值对所述输入块与其它块进行相似性检测包括:根据所述输入哈希值确定一个或多个第一块,其中,所述一个或多个第一块为处理后的块,所述一个或多个第一(处理后的)块中的每个第一块包括哈希值与所述输入哈希值中的一个输入哈希值相同的一个或多个第一分块。然后,以这种方式找到的一个或多个最佳相似性候选块作为字典,对输入块进行差量压缩。
10、根据上述技术方案,为所述输入块的所述输入分块计算的输入哈希值用于在键值存储中查找关于处理后的块的信息,所述处理后的块包括具有相同哈希值的分块。
11、输入块与一个或多个处理后的数据块的相似性检测通过将输入哈希值与针对已处理数据块的分块计算的哈希值(进一步分别称为处理后的哈希值和处理后的分块)进行,以查找一个或多个对,每个对包括输入分块和处理后的分块,它们的输入哈希值和处理后的哈希值相等,每个分块与相应的数据块标识符(也称为输入块id和处理后的块id)相关联。
12、找到的哈希值等于输入哈希值的处理后的分块按处理后的块id排序,以使哈希值等于输入块的哈希值的相应的处理后的块id按分块数量排序。
13、选择一个或多个处理后的块作为候选字典,用于输入块的差量压缩,其中,所述一个或多个处理后的块将排序后的块id与最大数量的分块匹配,并且其哈希值等于输入块的哈希值。
14、使用选择的处理后的块作为候选字典对输入块进行差量压缩。
15、在差量压缩期间,确定每个候选字典是否包括字节串,与输入块中的字节串相等,以使差量压缩有效,即将输入块中的字节串编码为字典块中相等字节串的参考,其比特数小于相应字节串中的比特数。
16、不包括用于输入块的有效差量压缩的任何字节串的字典候选被丢弃。
17、包括用于输入块的有效差量压缩的字节串的字典候选作为进一步引用的有效字典被保留。
18、存储输入块的差量压缩结果以及有效字典的处理后的块id。
19、选择要存储为处理后的哈希值的输入哈希值的子集,所述输入哈希值的子集与相应的块id相关联,用于处理后的块与未来输入块之间的未来相似性检测,使得所述子集仅包括不同的哈希值;此外,所述子集包括一个或多个最小哈希值、一个或多个最大哈希值。
20、与输入块id相关联的选择的输入哈希值被存储,以便以后在适当的数据结构中用于处理后的块与未来输入块之间的相似性检测,以便通过哈希作为键进行快速查找,以获得处理后的块id,并检索相应的处理后的块作为用于输入块的差量压缩的候选字典。
21、根据第二方面,提供了一种电子设备。所述电子设备包括:划分模块,用于将输入块划分为多个输入分块,其中,所述多个输入分块中的每个输入分块包括x个字节;选择模块,用于根据预设规则,从所述多个输入分块中的每个输入分块的所述x个字节中选择一个或多个字节集合,其中,所述一个或多个字节集合包括从所述x个字节中选择的按原始顺序不连续的y个字节;计算模块,用于基于所述一个或多个字节集合,针对所述多个输入分块中的每个输入分块计算一个或多个输入哈希值;压缩模块,用于根据所述计算模块针对所述多个输入分块计算出的所述输入哈希值,压缩所述输入块。
22、根据上述技术方案,所述划分模块用于将所述输入块划分为一个或多个分块。所述选择模块用于选择一个或多个字节集合进行计算模块的哈希计算。哈希计算结果将被压缩模块用于压缩输入块。选择少量的字节而不是整个分块进行哈希计算,降低了压缩过程中涉及的计算成本,提高了压缩效率。
23、在一种可选的实现方式中,当对于每个输入分块,所述字节集合的数量为多个时,第一字节集合与其它字节集合中的任何一个字节集合之间的offset0位置的差值为2m,其中,所述m为不同字节集合唯一的自然数,所述第一字节集合为所述多个字节集合中的一个字节集合,所述offset0位置为所述一个或多个字节集合中的每个字节集合的第一个字节的位置。
24、在一种可选的实现方式中,所述预设规则包括:所述不连续的y个字节与所述offset0位置之间的字节位置的差值满足修正后的斐波那契序列或对数函数序列。
25、在一种可选的实现方式中,所述压缩模块具体用于:根据所述输入哈希值确定一个或多个第一块,其中,所述一个或多个第一块为处理后的块,所述一个或多个第一块中的每个第一块包括哈希值与所述输入哈希值中的一个哈希值相同的一个或多个第一分块;基于所述一个或多个第一块压缩所述输入块。
26、在一种可选的实现方式中,所述压缩模块用于:基于所述输入哈希值确定所述一个或多个第一分块,其中,所述一个或多个第一分块中的每个第一分块为处理后的分块,并且哈希值与所述输入哈希值中的一个输入哈希值相同;基于所述一个或多个第一分块确定所述一个或多个第一块,其中,所述一个或多个第一块为划分成所述一个或多个第一分块的块。
27、在一种可选的实现方式中,所述一个或多个第一分块是基于键值存储确定的,其中,所述键值存储保存所述处理后的分块的哈希值与对应分块标识符和块标识符的关联。
28、在一种可选的实现方式中,所述一个或多个第一分块的数量大于第一预设阈值。
29、在一种可选的实现方式中,所述电子设备还包括确定模块,所述确定模块用于:根据所述一个或多个第一块与所述输入块之间的匹配字符串的长度,从所述一个或多个第一块确定一个或多个第二块,其中,匹配字符串的长度大于第二预设阈值。
30、在一种可选的实现方式中,压缩后的输入块的结果包括所述一个或多个第二块的所述块标识符。
31、在一种可选的实现方式中,所述电子设备还包括更新模块,所述更新模块用于使用所述输入分块的所述分块标识符、所述块标识符和对应输入哈希值更新所述键值存储。
32、根据第三方面,本技术实施例提供了一种数据压缩方法,包括:将输入块划分为多个输入分块,其中,所述多个输入分块中的每个输入分块包括x个字节;根据预设规则,从所述多个输入分块中的每个输入分块的所述x个字节中选择一个或多个字节集合,其中,所述一个或多个字节集合包括从所述x个字节中选择的按原始顺序不连续的y个字节;基于所述一个或多个字节集合,针对所述多个输入分块中的每个输入分块计算一个或多个输入哈希值;根据所述多个输入分块的所述输入哈希值压缩所述输入块。
33、根据上述技术方案,将输入块划分为多个输入分块,并从划分的输入分块中选择少量的字节(字节集合)进行哈希计算。选择字节集合而不是将分块作为一个整体来通过哈希计算来获得特征,可以降低哈希计算中涉及的计算成本。计算出的输入哈希值可以用于压缩输入块。
34、可选地,可以将输入块作为一个整体来选择一个或多个字节集合进行哈希计算,然后可以使用处理后的块的哈希值压缩输入块。
35、在一种可选的实现方式中,当对于每个输入分块,所述字节集合的数量为多个时,第一字节集合与其它字节集合中的任何一个字节集合之间的offset0位置的差值为2m,其中,所述m为不同字节集合唯一的自然数,所述第一字节集合为所述多个字节集合中的一个字节集合,所述offset0位置为所述一个或多个字节集合中的每个字节集合的第一个字节的位置。
36、根据上述技术方案,如果在一个输入分块中选择多个字节集合,或者为一个输入分块计算多个输入哈希值,则第一字节集合与其它任何字节集合中的任何一个字节集合之间的offset0位置的差值为2m,换句话说,对于不同的字节集合,选择的字节可能会移位2m个字节,这可能有助于检测由于插入和删除2m个字节而移位的相似特征,这由于现代sw中普遍存在的8比特、16比特、32比特和64比特数据类型而相当频繁,因此提高了压缩比。可选地,第一字节集合的offset0位置为0,第二字节集合的offset0位置为1,第三字节集合的offset0位置为2,等等。换句话说,第一字节集合与后面的字节集合之间的offset0位置的差值为1、2、4、8、16……。
37、在一种可选的实现方式中,所述预设规则包括:所述不连续的y个字节与所述offset0位置之间的字节位置的差值满足修正后的斐波那契序列或对数函数序列。
38、根据上述技术方案,字节集合之间的字节位置的差值满足修正后的斐波那契序列或对数函数序列或指数函数序列。以间隔选择字节,以便只选择少量的字节进行哈希计算,从而降低计算成本并提高压缩速度。
39、在一种可选的实现方式中,所述预设规则包括:对于所述字节集合中的每个字节集合中的任何两个字节,从所述输入分块中的不相邻位置选择所述两个字节。
40、根据上述技术方案,以间隔选择字节,这可以降低选择的字节数量和涉及的计算成本。
41、在一种可选的实现方式中,所述根据所述多个输入分块的所述输入哈希值压缩所述输入块包括:根据所述输入哈希值确定一个或多个第一块,其中,所述一个或多个第一块为处理后的块,所述一个或多个第一块中的每个第一块包括哈希值与所述输入哈希值中的一个哈希值相同的一个或多个第一分块;基于所述一个或多个第一块压缩所述输入块。
42、根据上述技术方案,为所述输入块的所述输入分块计算的输入哈希值用于在键值存储中查找块,所述块包括具有相同哈希值的分块。
43、例如,第一块包括对应于键值存储中匹配的记录的所有块。
44、又如,可以从对应于从键值存储中获取的记录的块中选择第一块。
45、又如,可以根据每个块具有的分块数量,向对应于从键值存储中获取的记录的块赋予优先级等级。然后,如果根据相同的哈希值从键值存储中获取不同块中的两个分块,则块中优先级较低的分块将被清除,因为块中优先级较高的分块可以压缩具有相同哈希值的输入块中的特定输入分块。然后根据剩余的分块数量对块进行重新排序。可以将重新排序后的块视为有可能对输入块执行差量压缩的第一块。该操作将提高作为候选字典块的第一块的质量。
46、在一种可选的实现方式中,所述根据所述输入哈希值确定一个或多个第一块包括:基于所述输入哈希值确定所述一个或多个第一分块,其中,所述一个或多个第一分块中的每个第一分块为处理后的分块,并且哈希值与所述输入哈希值中的一个输入哈希值相同;基于所述一个或多个第一分块确定所述一个或多个第一块,其中,所述一个或多个第一块为划分成所述一个或多个第一分块的块。
47、在一种可选的实现方式中,所述一个或多个第一分块是基于键值存储确定的,其中,所述键值存储保存所述处理后的分块的哈希值与对应分块标识符和块标识符的关联。
48、在一种可选的实现方式中,所述一个或多个第一分块的数量大于第一预设阈值。
49、通过上述技术方案,第一块中包括的分块数量大于第一预设阈值,这提高了第一块可用于压缩输入块的可能性,并提高了压缩比。
50、在一种可选的实现方式中,在所述基于所述一个或多个第一块压缩所述输入块之后,所述方法包括:根据所述一个或多个第一块与所述输入块之间的匹配字符串的长度,从所述一个或多个第一块确定一个或多个第二块,其中,匹配字符串的长度大于第二预设阈值。
51、根据上述技术方案,根据字符串匹配结果从第一块中选择第二块,只有匹配的字符串长度大于第二预设阈值的第一块才会被认为是第二块。第二块是可用于压缩输入块的块。
52、在一种可选的实现方式中,压缩后的输入块的结果包括所述一个或多个第二块的所述块标识符。
53、根据上述技术方案,压缩后的输入块包括第二块的块标识符,例如,压缩后的输入块以第二块的块标识符为前缀,这可用于输入块的压缩。
54、在一种可选的实现方式中,所述方法还包括:使用所述输入分块的所述分块标识符、所述块标识符和对应输入哈希值更新所述键值存储。
55、根据上述技术方案,在压缩输入块之后,使用输入分块的分块标识符、块标识符和对应输入哈希值更新键值存储,从而在对后续块进行压缩时,可以利用输入分块的分块标识符和块标识符用于相似性检测过程。
56、根据第四方面,本技术实施例提供了一种包括指令的计算机可读存储介质。当所述指令在计算机上运行时,使所述计算机执行第一方面或第一方面的任何可选的实现方式中的方法。
57、根据第五方面,提供了一种电子设备,包括处理器和存储器。所述处理器连接到所述存储器。所述存储器用于存储指令,所述处理器用于执行所述指令。当所述处理器执行存储在所述存储器中的所述指令时,使所述处理器执行第一方面或第一方面的任何可选的实现方式中的方法。
58、根据第六方面,提供了一种芯片系统,其中,所述芯片系统包括存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于从所述存储器中调用所述计算机程序并运行所述计算机程序,以使所述芯片系统所在的电子设备执行第一方面或第一方面的任何可选的实现方式中的方法。
59、根据第七方面,提供了一种计算机程序产品,其中,当所述计算机程序产品在电子设备上运行时,使所述电子设备执行第一方面或第一方面的任何可选的实现方式中的方法。