Q先生
作者Q先生·2020-06-10 15:40
研发总监·某公司

重复数据删除技术详解(一)

字数 2150阅读 10771评论 1赞 4

在之前的文章“备份系统中的常见功能特性”中简单介绍了下重复数据删除的概念,本文就重复数据删除(也叫数据去重)技术进行深入讲解。

概述

重复数据删除(后文简称“重删”)是灾备系统中非常重要的一项能力,它通过删除数据集中的重复数据达到缩减数据量的效果,以此满足日益增长的数据存储需求。重复数据删除技术在灾备系统中应用十分广泛,当然这项技术本身也不仅仅用于灾备系统,同样应用于存储系统、数据传输和同步、论文查重等场景。其带来的主要优势包括:

  • 降低数据存储量,节省空间。
  • 降低网络数据传输量,节省带宽。
  • 提升存储效率。
  • 减小备份窗口。

重删基本原理

重删的基本原理是通过某种算法计算出数据集中的某部分数据的hash值,以此hash值作为此部分数据的唯一标识(因此也称作指纹)。当某两部分数据的hash值(指纹)相同时,我们就认为这两部分数据是一致的。注意:需要尽量确保hash值的唯一性,避免hash值碰撞(即2个不同数据的hash值一致)。一些厂商为了避免此种情况,可能会采用2种hash算法来确保数据的唯一性。

某些场景下,为了提升效率,还会同时使用强hash和弱hash。弱hash的计算速度快,但碰撞率高,用于快速找到不同的数据块;强hash的计算速度慢,但碰撞率低(约等于0)。当2个数据块的弱hash值相同时,会再进行一次强hash值的校验,以此确定数据块内容是否一致。

因为需要对数据进行指纹计算和存储,所以使用重删技术都会需要用到指纹库。除了指纹库之外,其实还需要记录原数据与实际存储数据之间的映射关系,此种关系一般称为索引信息,有的也叫做元数据信息,元数据信息本文中就不做过多介绍了。

那么如何衡量重复数据删除技术的好坏呢?主要通过两个指标:重复数据删除率性能。其中,重复数据删除率(后面简称“重删率”)很大一部分情况下依赖于数据自身的特征。一般来讲,有固定格式、变化频率低的数据重删率高。此外,数据量越大,重删率越高;数据切片越小,重删率越高。

源端重删 & 目标端重删

从重删动作发生的位置来区分,可以分为源端重删和目标端重删。所谓源端,就是指数据的发送方;目标端指数据的接收方。就备份系统来讲,一般会存在代理服务和存储服务两种角色。代理服务部署在生产环境上,用于备份系统采集数据,存储服务用于存储备份数据。

当重删的动作发生在代理服务中时,就可以认为是源端重删。由于重删的计算需要消耗不少计算资源,因此源端重删会对生产业务带来一定影响。但同时它减少了数据传输量,适用于数据传输通道窄或大数据量的场景。

当重删的动作发生在存储服务中时,就可以认为是目标端重删。目标端重删与源端重删一样,最终都只是存储重删后的数据。与源端重删不同的是,它释放了生产环境的计算压力,但生产数据会全部通过传输通道发送到存储服务,存储服务需要进行大量的重删计算。它更适用于数据通道宽或小数据量的场景。

在线重删 & 离线重删

从重删发生的时间来区分,可以分为在线重删和离线重删。在线重删是指在数据进行存储的过程中进行重删。由于重删需要进行运算,消耗计算资源和时间,因此一旦出现计算瓶颈,会导致存储的性能出现下降。离线重删是指将要存储的数据先存储下来,等到存储相对空闲的时候进行重删。离线重删相比在线重删需要更多的存储资源。

对于备份系统来讲,上文提到的“源端重删”一定是在线重删,“目标端重删”则可区分在线或者离线。

全局重删 & 局部重删

从重删的范围来区分,可以分为全局重删和局部重删。

全局重删即针对全范围的数据进行重删,全局重删生成的指纹库也是针对全局数据的。我们看一下下图,全局数据共16个数据块,其中互不相同的数据块有5个,经过计算可以得出重删率:(16-5)/16 = 68.75%。

局部重删即针对部分范围的数据进行重删,局部重删生成的指纹库也仅针对这部分范围的数据。我们看一下局部重删的重删率。如下图,前8个数据块中互不相同的数据块有2个,重删率为(8-2)/8=75%。而后8个数据块中互不相同的数据块有3个,重删率为(8-3)/8=62.5%。

那么如何选择全局重删还是局部重删呢?理论上来讲,指纹库越庞大,指纹匹配的可能性就越高,重删率也就越高。但指纹库不会无限大,且指纹大了之后,指纹的查找性能就会下降,由此会导致备份性能的整体下降。因此,一般对于有固定特征的数据、相似性较高的数据建议选择局部重删;对于非结构化数据建议使用全局重删。

文件级重删 & 块级重删

从重删的粒度来区分,可以分为文件级重删和块级重删。

文件级重删是指针对单个文件进行hash计算,通过删除相同的文件来达到重删效果。对于批量文件,使用文件级重删,第二次备份的时候实际存储的就只有第一次备份以来变化和新增的文件,如下图所示。在实际应用中,存在大量相同文件的场景比较少,因此使用文件级重删的重删效果并不太理想(针对首次备份)。更多的是使用块级重删。

块级重删是指将数据流或者文件根据某种方式进行分块,以数据块为单位进行hash计算,以此找到相同的数据块进行删除。根据不同的场景,分块的方式又分为定长分块和变长分块。通常对于文件备份来讲,变长重删可以更好的匹配相同的数据块,获得更高的重删率;对于卷备份来讲,定长重删的效果就更好一些。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论1 条评论

LaozhaoLaozhao其它cs
2020-06-11 11:14
整理了源端重删和目标端重删;在线和离线重删的基本原理;和不错啊
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广