首页 > 代码库 > 重复数据删除(dedup)技术介绍 1
重复数据删除(dedup)技术介绍 1
重复数据删除(de-duplication)是存储领域,尤其是数据备份领域的一个非常重要的概念。其目的是删除重复的数据块,从而减少对存储空间的使用。
这种想法的出发点是非常自然的。通常情况下,每次备份的数据总是会有一部分跟上一次备份的数据重合。
比如,每次备份都要包含一个100MB的文件,那么这个文件就会重复出现在所有的备份数据中。
经过多次备份操作之后,重复的数据块就会占用可观的存储空间,而实际上,这些重复的数据块保留一份就足够了。
dedup就是为了解决这种问题而产生的。
dedup和数据压缩是不同的两个概念。
它们都能减少对存储空间的占用,这是它们的共同点。
数据压缩需要大量的CPU和IO资源,并且解压之后才能使用。另外,数据压缩没有办法解决重复数据块的问题。
dedup同样需要较多的CPU资源,但是大幅度降低了对IO资源的占用。
既然要消除重复的数据块,那么dedup面对的第一个问题就是怎样划分数据块。
最简单的也最容易想到的办法,就是以固定的长度进行划分,比如每个数据块都是1MB大小。
这种方法的好处是易于实现,效率高。
缺点也是非常明显的,那就是对于增加/删除的数据效果不明显。
比如一个10MB的文件,第一次备份的时候划分成了10个数据块。
随后在文件的开头增加了一个字符,文件长度变成了10MB+1Byte。那么下一次备份发生的时候,这个文件会被分成11个数据段,前10个数据段都是1MB大小,最后一个数据段包含1个Byte。
但是现在这11个数据段都会被认为是新的数据段,从而没有达到dedup所期望的效果。
解决这个问题的办法有很多,最容易想到的办法就是根据不同的offset,在新的备份数据中顺序查找是否与已有的数据块重复。
这样做虽然会解决数据去重的问题,但是也会带来很大的CPU消耗。一个通用的附加解决方案是scroll checksum,用于降低计算数据块的checksum所打来的CPU开销。
当然针对这个问题也有很多更好的解决方案,但是这个方法因为简洁易于实现,所以被大量采用。比如著名的rsync工具,就是这么实现的。
本文出自 “点点滴滴” 博客,请务必保留此出处http://nilei.blog.51cto.com/9133015/1551697
重复数据删除(dedup)技术介绍 1