重复数据删除简介

#简介
重复数据删除,顾名思义,就是将多份重复的数据只存储一份,减少存储开销,同时也可以减少网络传输带宽。

重复数据删除有两种处理方式,一种是同步方式,即存入数据之前就判断是否是重复数据,如果重复则存储指向源数据的指针即可,如果新数据则存入到系统中;另一种是异步方式,即离线处理,开启后台进程扫描磁盘,查看是否有重复的数据。

##文件级别
判断整个文件是否重复。

###文件判重
首先在系统中维护一个hash表,存储所有unique文件的hash值。当读取到一个文件后,使用MD5或者sha-1计算给定文件的hash值,然后去hash表中查看是否已经存在。 如果存在,表明此文件已经存在,因此只需要存储指向源文件的指针即可,如果不存在,需要将此文件存储到系统中,并添加此hash值到hash表中,同时记录文件的地址。

###优缺点
实现简单,粒度大,但是当文件有小范围的修改时,会导致系统重新存储整个文件,造成数据空间的浪费。如何能够当文件有小范围的修改依然能够删除冗余数据,只存储冗余的一部分呢?这就需要细粒度的重复数据删除了(即数据块级别)

##数据块级别
将文件划分为数据块,针对每一个数据块计算hash值,并存储到系统块hash表中。新到来一个文件,将其划分为数据块,然后计算hash并与系统hash表对比,如果相同,则认为此块已经存在,不同则将此块加入到系统中。

###固定块大小
将文件按照固定长度划分为块,进行hash的方式。这种方式实现简单,但是判断冗余的效率不高。例如文件中加入一个字节后,会导致此字节后面的数据块的hash全部失效(不能进行重复数据删除),而我们想要的效果应该是加入某些字节后,只让受影响的数据块不可用,而受影响的块之后的数据块依然可以进行重复数据删除。

举例:
abcdefghijkl按照块长度为4进行划分,可划分为三组( 即三个数据块):abcd, efgh, ijkl。
如果中间加入了一个字符1,变成ab1cdefghijkl,那么再进行固定划分的方式,可划分为4组:a1bc, defg, hijk, l。
可以看出没有一个数据块与原来的三个数据块相同,也就没有起到冗余数据删除的效果。

我们想要达到的应该是进行如下的划分: a1bcd, efgh, ijkl。 这样就会有两个块可以进行重复数据删除的,受影响的只是第一个块而已。

###可变块大小
根据上面的描述,需要合理的进行块的划分,而且肯定不是固定块大小的划分。

首先说一下: Rabin fingerprint
给定一个n bit的 m 0 , m 1 , . . . , m n − 1 m_0, m_1,..., m_{n-1} m0,m1,...,mn1数据 m m m,可将其看作是基于有限域GF(2)的一个多项式,而且它的最高次项的指数为 n − 1 n-1 n1
f ( x ) = m 0 + m 1 x + m 2 x 2 + . . . + m n − 1 x

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值