重复数据删除的算法

1.Hash算法Hash一般翻译为散列,或音译为哈希,就是把任意长度的输入(称为预映射)通过Hash算法变换成固定长度的输出,该输出就是Hash值。这种转换是一种压缩映射,Hash值的空间通常远小于输入的空间。Hash算法的数学表达式为CA=Hc(Content),其中Hc( )表示单向Hash函数,而Content代表任意长度字符串,CA则代表固定长度Hash值。Hash算法在信息安全领域中被广泛应用,具有如下关键特性:第一,单向性(One Way),从预映射能够简单迅速地得到Hash值,但在计算上不可能构造一个预映射,使Hash的计算结果等于某个特定的Hash值,即构造相应的Content=Hc-1(CA)不可行;第二,抗冲突性(Collision Resistant),即在统计上无法产生两个Hash值相同的预映射,计算上也难以寻找到一对任意的Content和Content',满足HC(Content)=HC(Content') ,此谓强抗冲突性;第三,映射分布均匀性和差分分布均匀性。在Hash结果中,为0的位和为1的位,其总数应该大致相等。输入中一个位发生变化,Hash结果中将有一半以上的位发生改变,这又称为雪崩效应(Avalanche Effect)。MD5和SHA-1是目前应用最广泛的Hash算法。MD5(RFC 1321)是对输入以512位分组,输出是4个32位字的级联。MD5是比较安全的一种算法。SHA-1可以产生长度为160位的Hash值,因此抗穷举(Brute Force)性更好。Hash算法可以看作是一条管道,文件内容从一端流入,文件或数据块的Hash值就从另一端流出,如图2所示。在存储领域中,Hash算法首先被应用于内容寻址存储(Content Addressable Storage,CAS),其作用是在存储系统中惟一地表征特定的数据实体,称为内容地址(Content Address,CA)或数字指纹(Fingerprint)。在CAS中,可以通过Hash实现一种独特的文件寻址与定位方法,并有效地消除文件复制。这可以说是重复数据删除技术的一个开端。不过,在重复数据删除技术中,一个文件可以计算一个Hash值,也可以分成多个数据块,计算多个Hash值。 2.全文件Hash用整个文件进行Hash计算,然后对不同文件的Hash值进行排序,将相同的文件找出。这种方法的好处是,在普通硬件条件下,计算速度非常快。美国加州大学的研究表明,SHA-1的计算速度是83MB/s,而MD5的计算速度是227MB/s。利用上述算法对很多文件进行处理,能够检测到所有相同的文件,从而可以节省大量的存储空间。这种方法的主要缺点是,即使不同文件存在很多相同的数据,也不能被检测和实现冗余消除。 3.文件分块Hash文件分块Hash类似于数据压缩技术。从本质上讲,数据压缩就是要消除信息冗余。早期的数据压缩技术就是编码优化压缩方式。对信息进行编码时,如果为出现概率较高的字符串赋予较短的编码,为出现概率较低的字符串赋予较长的编码,总的编码长度就能缩短不少。但是,统计文件中字符串出现的概率要耗费很长的计算时间,实际的操作方法是采用自适应编码方式,也就是在压缩的时候统计字符串出现的概率。如今,应用更多的数据压缩技术是字典型压缩算法。字典型压缩算法就是构造一本实际的字典,把每一个第一次出现的字符串放入字典中,并用一个数字来表示。这个数字与此字符串在字典中的位置有关,这个数字被存入压缩文件中。如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中,压缩完成后将串表丢弃。字典型压缩算法的压缩比例比编码优化压缩方式要高。另外,从压缩和解压的执行效率来看,字典型压缩算法也要优于编码优化压缩方式。字典型压缩算法的关键问题是,如何确定字符串的位置和字符串的长度。文件分块Hash与字典型压缩算法非常相似。进行文件分块Hash计算,首先要划分数据块,然后才能对数据块进行Hash计算。最简单的划分块的方法是将数据块的大小固定。块的大小在一个规定的最小尺寸和最大尺寸范围之内。而可变大小的数据块可以用一个滑动的窗口来划分,当滑动窗口的Hash值与一个基准值相匹配时,就创建一个分块。通常,基准值可以采用Rabin指纹进行计算,并可通过设定块尺寸的上下限来减少块大小变化的范围。对数据块的存储类似于全文件Hash的方式,相同的块用线性的块号进行标识。固定块尺寸可以减少对块划分算法的需求,但相同块的相似性检测将降低。分块Hash的缺点是,必须保存块的Hash索引,当没有冗余存在时,反而增加了不必要的开销。 4.Delta压缩Delta压缩算法用于计算一个新文件和一个已经存储在系统中的参考文件之间的Delta编码。当两文件间的相似性超过了预先设定的阀值时,就计算出一个Delta编码,而且只须把这个Delta编码存储在系统里即可。在存储具有相似性的文件集时,使用Delta编码进行文件压缩,可以极大地减少存储空间的占有率。Delta压缩可分成以下四个步骤。第一,采用内容无关的方法从文件中选取特征集。一种选取特征集的方法是,沿着字节边界的滑动窗口计算整个文件的Rabin指纹。滑动窗口的大小是一个预先选定的参数,产生的中间指纹数量与文件大小成正比。第二,在系统中找出一个与新文件具有高度相似性的参考文件。为了加快检测的速度,必须减少需要比较的指纹数量,具体方法是把特征集降为超级特征或超级指纹组成的更小数量的特征集合。选择固定数量的指纹作为特征子集,每个超级指纹是特征子集的一个Hash。如果一个或更多的超级指纹相匹配,意味着两个文件可能有极大的相似性。第三,对两个相似的文件计算Delta编码。美国加州大学的研究结果表明:Delta压缩的性能较差,在相同的硬件条件下,采用32位的Rabin指纹,Delta编码的处理速度为8.7MB/s。最后一步是存储压缩文件。 重复数据删除效率的高低与文件的相似性密切相关。重复数据删除技术并不要求所有资料都采用某个独特的算法或方案。从具体实现方式来看,一般采用多种算法相结合的方式,逐步实现特征匹配。这一过程通常分为几个阶段,首先是匹配相同的文件,然后是高相似性的文件,最后是有某些相似的文件。因此,重复数据删除技术可使各种不同类型的数据受益。

你可能感兴趣的:(数据重删)