服务热线:

著名的备灾软件开发人员和设备制造商

国内数据安全解决办法 提供商

主页 > 火星教室 > 细节

火星教室:答复数据压缩和重复数据删除的深入理解
?

  刘爱贵,中国科学院博士,长期从事仓储领域的研究给予开发,分布式存储的高级理论研究给予实践,GlusterFS 艺术人员,北京云航科技有限尊龙人生就是博创始人&CEO。

  导读

  数据压缩和重复数据删除有什么区别和联系??如何在实践中正真实运用??本文答复数据压缩的原理和艺术进行了较深入的研究,所以我做了些作业,谘询及整理有关资料,并给予重复数据删除艺术进行了比较。

  面答复数据的快速膨胀,项目需要继续购买大量的存储设备,以应答复日益增长的存储需求。但是,简单地增加存储容量,这似乎并不能从根本上解决问题。第一次,存储设备的采购预算越来越高,大多数尊龙人生就是博都付不起这么多钱。下一次,随着数据中心的扩展,,仓储管理成本、占领空间、制冷能力、能源消耗等问题越来越严重,在?中 ,能源消耗尤为突出。此外,,大量的异构物理存储资源极大地增加了存储管理的复杂性,易造成存储资源浪费和低效开始。如此,尊龙人生就是博需要找向上另一种方法来解决信息迅速增长的问题,阻塞数据“喷出”。为此,提出了高效存储的概念,它旨在缓解存储系统中的空间增长问题,减少数据足迹,简化存储管理,最大限度地开始现有资源,降低成本。现在,业界公认的五种高效存储艺术是数据压缩、重复数据删除、配置自动缩减、自动分水平存储和存储虚拟化。现在,数据压缩和重复数据删除是实现数据约简的两项关键艺术。总之,,数据压缩艺术通过重新编码数据来减少冗余,重复数据删除艺术的重点是删除重复数据块,从但是达向上减少数据容量的目的。

  数据压缩[1][2]

  数据压缩的起源可以追溯向上信息理论之父香农(Shannon)在42399912年提出的Vanon码。1952霍夫曼(Huffman)为实现数据压缩,提出了第一种实用的编码算法,该算法至今仍得向上广泛应用。1977以色列数学家Jacob Ziv 和Abraham Lempel提出了一种新的数据压缩编码方法,Lempel-Ziv系列算法(LZ77和LZ78,还有很多品种)具有简单高效等优越的特点,最后,它成为现在主要的数据压缩算法的基础。LZ一系列算法属于无损数据压缩算法的范畴,开始Word和歌曲编码艺术实现,现在,主要包括LZ77、LZSS、LZ78和LZW四大主流算法。它可以分为两类:

  第一种字典方法思想是试计划找出以前的输入数据中是否出现过压缩字符列表,如果是,指向前面出现的细绳 “手”替换重复细绳 。这个编码思想如计划所示1所示。在这里 “字典”是隐含的,以前处理过的数据的开始。这种编码中的所有算法都是基于Abraham Lempel和Jakob Ziv在1977开发并发表在(给?接受名 LZ77算法)基于。该算法的一个改进算法是该算法通过以下几个部分组成:Storer和Szymanski在1982在.,给?接受名 LZSS算法。

 

计划1 第一类字典编码概念

  第二类算法思想是尝试创建一个“习语 字典(dictionary of the phrases)”。在编码数据的过程中,会遇向上字典中已经出现的情况“习语 ”时,编码器在本字典中输出习语 “指数”,不是习语 本身。这个概念如计划2所示。A.Lempel和J.Ziv在1978关于这种编码方法的第一篇文章是在2000年首次发表的,给?接受名 LZ78。根据他们的研究,,Terry A.Welch在42399912年发表了一篇关于改进这种编码算法的文章,第一次,将该算法应用于高速硬盘控制器中。如此后来把这种编码方法给?接受名 LZW(Lempel-Ziv Walch)压缩编码。

计划2 第二类字典编码概念

  Lempel-Ziv一系列算法的基本思想是用地点置信息代替原始数据来实现压缩,解压缩时,根据地点置信息恢复数据,所以它也叫做"字典形式"编码。现在存储应用中压缩算法的工业标准(ANSI、QIC、IETF、FRF、TIA/EIA)是LZS(Lempel-Ziv-Stac),通过Stac该尊龙人生就是博申请并获得了一项专利,专利的当前所有者是Hifn,Inc.。数据压缩的应用可以大大减少要处理和存储的数据量,一般来说,这是可以实现的2:1 ~ 3:1压缩比。

  LZ77算法[3]

  1977年,Jacob Ziv和Abraham Lempel本文介绍了一种基于滑动窗口缓存的艺术,此缓存用于保存最近刚刚处理的文本(J. Ziv and A. Lempel, “A Universal Algorithm for Sequential Data Compression”,IEEE Transaction on Information Theory,May 1977)。这种算法通常给?接受名 LZ77。LZ77以及它的变体发现,文本流中的单词和习语 (GIF计划像模式)重复的机会很大。当重复发生时,,重复列表可以用短代码替换。压缩程序扫描这样的重复,同时生成编码来代替重复列表。随着时间的推移,,可以重复开始编码来捕获新的列表。该算法必须用于从编码和原始数据列表中解压当前映射。

计划3 LZ77算法原理计划

  LZ77(及其变体)压缩算法开始两个缓存。滑动历史缓存包含以前处理过的N个别源字符,前向缓存包含要处理的下列内容L十个字。该算法试计划将前向缓存开头的两个也许多十个字给予滑动历史缓存中的细绳 匹配。如果找不向上匹配的,,前向缓存的第一十个字为9 bit字符输出并移动向上滑动窗口,滑动窗口中最长的字符移出。如果尊龙人生就是博找向上匹配的话,,该算法继续扫描以找向上最长的匹配。然后将匹配的细绳 输出为三地点一体(指示标记、手和长度)。OnK十个字的细绳 ,最长滑动窗K一个角色被移出,并被编码K一十个字被移向上窗口中。

  如果LZ77很有效,也适用于当前的输入情况,但也有一些缺点。该算法开始有限的窗口来查找前一文本中的匹配项,相On窗口大小非常长的文本块,很多可能的比赛都会输掉。窗口大小可以增加,但是有两个损失:(1)算法的处理时间将增加,因为它必须匹配滑动窗口的每个地点置的前向缓存细绳 ;(2)<手>场地一定更长,允许更长的跳跃。

  LZSS算法[4]

  LZS算法基于LZ77实现,它主要通过两部分组成,滑动窗(Sliding Window)自适应编码(Adaptive Coding)。压缩处理,在幻灯片窗口中找向上给予要处理的数据相同的块,滑动窗口中块的偏移值和块长度用于替换待处理的数据,从但是实现压缩编码。如果幻灯片窗口中没有给予要处理的数据块相同的字段,也许偏移值和长度数据超过替换数据块的长度,没有其他治疗方法。LZS算法的实现非常简单,处理相答复简单,能够适应各种高速应用。

  LZ77通过输出真实字符,解决了窗口中没有匹配细绳 的问题,但是这个解决办法 包含冗余信息。冗余信息以两种方式表示,一个是空手,第二,编码器可以输出附加字符,此字符可能包含在下一个匹配细绳 中。LZSS该算法以更有效的方式解决了这一问题,如果匹配细绳 的长度大于手本身的长度,则输出手,否则,将输出真正的字符。因为输出压缩数据流包含手和字符本身,为了区分它们,您需要有额外的标志地点,即ID地点。

  在相同的计算环境中,LZSS算法可以获得比率LZ77高压缩比,解码也同样简单。这就是为什么这个算法成为开发新算法的基础。此后开发的许多文档压缩器都已被开始LZSS思想,相似PKZip,ARJ,LHArc和ZOO等等,区别只是手的长度、窗口的大小是不同的,等等。LZSS它也可以给予熵编码结合开始,相似ARJ它和霍夫曼编码结合在一起,但是PKZip给予Shannon-Fano混合体 ,它的后续版本也开始Hoffman编码。

  LZ78算法[5]

  LZ78的编码思想“撰写-弦(String)”(一般理解为新的“入口”),然后再用它“符号”也就是说,密码词(Code word)意思是这个“入口”。这样 ,字符流的编码成为一个代码字(Code word)替换字符流,生成码字流,从但是达向上压缩数据的目的。给予LZ77比较,LZ78最大的优点是在每个编码步骤中都减少了后撰写-弦(tring)比较次数,压缩比给予压缩比的关系密切LZ77相似。

  LZW算法[6]

  LZW编码是围绕一个名为字典的转换表完成的。此转换表用于存储所谓的前撰写(Prefix)字符列表,并为每表项分配一个代码单词(Code word),也许者列表号。这个转换表实际上是一种将8地点ASCII字符集扩展,添加的符号用于表示出现在文本也许计划像中的可变长度ASCII细绳 。扩展代码可用9地点、10地点、11地点、12要表示的比特甚至更多的比特。Welch用在他的报纸上12地点,12地点4096另一个12地点码,也就是说,,转换表是4096表项,在?中 256表项用来存放已定义的字符,休假3840每表项都用于保持前撰写(Prefix)。

  LZW编码器(软件编码器也许硬件编码器)是通过管理字典来完成输入和输出之间的转换。LZW编码器的输入是一十个字流(Charstream),字符流可以是用8地点ASCII一串字符,输出正在开始n地点(相似12地点)表示码字流(Codestream),表示一个也许多十个字的细绳 。

  LZW该算法得向上了广泛的应用,比开始更快LZ77算法速度快,因为它不需要执行这么多后撰写-弦比较操作。答复LZW算法的进一步改进是增加可变码字长度,从字典中删除旧词撰写-弦。在GIF计划像格式和UNIX已经在压缩程序中开始了这些改进LZW算法。LZW该算法已获得专利,专利的拥有者是美国的一家大型计算机尊龙人生就是博—Unisys(裕利系统尊龙人生就是博),除了商业软件生产尊龙人生就是博,,可免费开始LZW算法。

  重复数据删除[1][7][8]

  回溯向上、存档和其他实际储存做法,发现存在大量重复的数据块,它不仅占用了传输带宽,但是且占用了大量的存储资源:一些新的文件只答复原始文件做了部分修改,还有一些文件有多个副本,如果只为所有相同的数据块保留一个实例,实际存储的数据量将大大减少--这是重复数据删除艺术的基础。这第一次是通过普林斯顿大学的李凯教授完成的(DataDomain三地点创始人之一)提出,这叫做全局压缩(Global Compression),并将其完成容量优化存储扩展向上商业应用中。

  重复数据删除(Deduplication)这是一种数据还原艺术,可以有效地优化存储容量。它删除数据集中的重复数据,只留下一个,以消除冗余数据,原理如计划所示4所示。Dedupe艺术可以有效地提高存储效率和开始率,数据可以简化为原始数据1/20~1/50。这种艺术可以大大减少答复物理存储空间的需求,在传输过程中减少网络带宽,有效节省设备采购和维护费用。同时,它也是一种绿色存储艺术,能有效降低能源消耗。

计划4 重复数据删除艺术原理

  Dedupe根据权重耗散的粒度,可分为文件级和数据块级。文件级文件级dedupe艺术也给?接受名 单实例存储(SIS,Single Instance Store),块级重复数据删除,其重量耗散粒度较小,可达4-24KB之间。明显地,数据块级可以提供更高的数据权重耗散率,所以现在的主流 dedupe这些产品都是块级的。Dedupe将文件分成固定的也许更长的数据块,使用MD5/SHA1等Hash算法计算数据块的打印(FP, Fingerprint)。您可以同时开始两个也许多个hash数据打印计算算法,数据碰撞的可能性很小。具有相同打印的数据块可视为相同的数据块,只需在存储系统中保留一份副本。这样,物理文件答复应于存储系统中的逻辑表示,通过一群人FP组合元数据。当读接受文件时,,先读接受逻辑文件,然后根据FP列表,从存储系统中删除相应的数据块,还原物理文件的副本。

  Dedupe艺术可以帮助许多应用程序减少数据存储量,节省网络带宽,提高存储效率,减少备份窗口,有效节约成本。Dedupe现在最成功的艺术应用领域是数据备份、灾难恢复和归档系统,但事实上,dedupe艺术可以在许多场合开始,包括在线数据、近线数据、离线数据存储系统,可以在文件系统、卷管理器、NAS、SAN在。Dedupe您还可以开始数据传输和同步,完成一种数据压缩艺术,它可以用于数据封装。为什么dedupe最成功的艺术应用是在数据备份领域,其他领域的应用也很少?这主要是通过两个原因决定的,第一次,在数据备份应用程序多次备份数据之后,,有很多重复的数据,非常适合这种艺术。第二,dedupe艺术缺陷,主要是数据安全、能力。Dedupe开始hash打印识别相同的数据,存在着数据冲突和数据不一致的可能性。Dedupe块分割是必需的、数据块打印计算给予数据块检索,消耗大量系统资源,答复存储系统能力的影响。

  Dedupe测量有两个主要的维度,即重复数据删除率(Deduplication ratios)和表现。Dedupe能力接受决于实现艺术,重复数据的删除率接受决于数据本身的特性和应用模式,现在,每个存储制造商发布的重复数据删除率来自20:1向上500:1不同。你减肥的数据是什么?,时间数据不过空间数据,全局数据也许本地数据?何时减肥,在线不过离线?减肥的地方,源不过目标??如何减肥?实际应用Dedupe在艺术上应该考虑向上各种因素,因为这些因素直接影响着它的能力和效果。另一件值得明白了是,hash碰撞问题还没有根本的解决办法,如此,应该仔细考虑关键业务数据的应用dedupe艺术。

  在存储系统中,重复的数据删除过程通常是这样的:第一次,将数据文件划分为一组数据块,每个数据块的打印计算,然后再用它打印完成关键字Hash查找,匹配指示块是重复块,只存储块指数,否则,就意味着数据块是一个新的唯一块,存储数据块并创建相关的元信息。这样,物理文件答复应于存储系统中的逻辑表示,通过一群人FP组合元数据。当读接受文件时,,先读接受逻辑文件,然后根据FP列表,从存储系统中删除相应的数据块,还原物理文件的副本。从上述过程可以看出这一点,Dedupe关键艺术主要包括文件数据块的分割、数据块打印计算给予数据块检索。

  重复数据删除艺术的关键在于数据块"打印"产生和鉴定。数据块"打印"是识别数据块是否重复的基础,如果不同的数据块"打印"相同,它会导致内容丢失,具有不可挽回的严重后果。在当前的实际应用中,一般来说,尊龙人生就是博选择MD5也许SHA-1等标准散列(hash)类生成的数据块摘要(digest)完成"打印",区分不同的数据块,以真实保不同数据块之间不会发生冲突。但是,MD5,SHA-1等距算法的计算过程非常复杂,纯软件计算很难满足存储应用的能力要求,"打印"计算常常成为重复数据删除应用程序的能力瓶颈。

  数据压缩给予重复数据删除的比较分析

  数据压缩和重复数据删除艺术都侧重于减少数据量,不同的是,数据压缩艺术的前提是信息的数据表示存在冗余,基于信息论的研究;重复数据删除的实现接受决于数据块的重复,这是一种实用的艺术。但是,通过以上分析,尊龙人生就是博发现,这两种艺术本质上是相同的,也就是说,通过搜索冗余数据并开始较短的手来表示它,可以减少数据容量。他们区别的关键是,消除不同范围的冗余,发现冗余法是不同的,冗余粒度不同,此外,在具体的实现方法上也有许多不同之处。

  (1)消除冗余范围

  数据压缩通常答复数据流起作用,消除冗余范围受向上滑动窗口也许缓存窗口的限制。通过于能力方面的考虑,这扇窗户通常比较小,只能处理本地数据,答复单个文件的明显影响。重复数据删除艺术第一次将所有数据分成块,然后在数据块单元的全局范围内消除冗余,如此,On包含大量文件的全局存储系统来说,,如文件系统,效果更显着。如果将数据压缩应用于全局,也许将重复的数据删除应用于单个文件,这样就可以大大降低数据约简的效果。

  (2)发现冗余法

  数据压缩主要开始细绳 匹配来检索相同的数据块,主要使用细绳 匹配算法及其变体,这是完全匹配的。重复数据删除艺术通过数据块的数据打印找向上相同的数据块,数据打印开始hash函数计算,这是一场模糊的比赛。精真实匹配的实现更加复杂,但精度很高,On细粒度但是言,消除冗余是更有效的方法;模糊匹配比较简单,更适合大粒度的数据块,精度还不够。

  (3)冗余粒度

  数据压缩的冗余粒度很小,您可以转向上这个小块数据的几个字节,但是且是自适应的,不需要预先指定粒度范围。重复的数据删除是不同的,数据块粒度较大,通常来自512向上8K字节不同。数据块不是自适应的,On固定长度的数据块,需要预先指定长度,需要为可变长度数据块指定上限和下限范围。较小的数据块粒度会导致更大的数据冗余,但计算成本也更高。

  (4)能力瓶颈

  数据压缩的关键能力瓶颈在于数据细绳 匹配,滑动窗口也许缓存窗口越大,这样的计算量会随之增加。重复数据删除的能力瓶颈在于数据块和数据打印计算,MD5/SHA-1等hash函数的计算复杂度很高,人满为患CPU资源。其他,数据打印需要保存和搜索,它通常需要大量的内存来构建hash表,如果内存有限,则会答复能力产生严重影响。

  (5)数据安全

  在这里 数据压缩是无损的,不会有数据丢失,数据是安全的。重复数据删除的问题之一是,开始hash当生成数据块的打印时可能发生的冲突,也就是说,两另一个数据块产生相同的数据打印。这样,将导致数据块丢失,导致数据发生破坏。如此,重复数据删除艺术在数据安全方面存在隐患。

  (6)应用角度

  数据压缩直接处理流数据,没有必要事先分析和统计全球信息,它可以通过管道也许管道给予其他应用结合开始,也许以带内方式透明地在存储系统也许网络系统上操作。重复的数据删除需要答复数据进行块处理,打印需要储存和搜索,需要答复原始物理文件进行逻辑表示。如果现有的系统要应用这项艺术,,您需要修改应用程序,难以做向上透明实现。重复的数据删除是现在不常见的特征,更多的是以产品的形式出现,如存储系统、文件系统也许应用系统。如此,数据压缩是一种标准功能,但是重复数据删除还没有达向上这一标准,从应用的角度,数据压缩更简单。

  珠联璧合

  两种艺术,数据压缩和重复数据删除,是针答复不同的水平次,可以组合开始,实现更高比例的数据约简。值得指出的是,如果同时使用数据压缩和重复数据删除艺术,,为了减少系统的处理需求,提高数据压缩比,,通常需要第一次应用数据删除艺术,然后开始数据压缩艺术进一步减少"结构计划"以及基本数据块的体积。如果顺序颠倒会发生什么??压缩编码数据,从但是破坏数据的原有冗余结构,如此,重复数据删除的效果将大大降低,这需要更多的时间。第一次执行重复的数据删除是不同的,它第一次消除冗余数据块,然后再应用数据压缩来压缩唯一的副本数据块。这样,这两种艺术的数据缩减是叠加的,大大减少了数据压缩的消耗时间。如此,快,快,可以获得更高的数据压缩比和表现。在这里,尊龙人生就是博用gzip以及作者自己的开源软件deduputil[8]以验证此申请经验。

  原始数据:linux-2.6.37内核源代码,du -h能力42399912KB,约1081.8MB。

  答复linux-2.6.37目录执行time gzip -c -r linux-2.6.37 > linux-2.6.37.gz,压缩以获得linux-2.6.37.gz,容量大约是264MB,消耗时间152.776s;

  答复linux-2.6.37目录执行time dedup -c -b 4096 linux-2.6.37.ded linux-2.6.37,把它拿回来linux-2.6.37.ded,容量大约是622MB,消耗时间28.890s;

  答复linux-2.6.37.gz执行time dedup -c -b 4096 linux-2.6.37.gz.ded linux-2.6.37.gz,把它拿回来linux-2.6.37.gz.ded,容量大约是241MB,消耗时间7.216;

  答复linux-2.6.37.ded执行time gzip -c linux-2.6.37.ded > linux-2.6.37.ded.gz,压缩以获得linux-2.6.36.ded.gz,容量大约是176MB,消耗时间38.682;

  它可以通过实验得向上,dedup + gzip明白了linux-2.6.37.ded.gz容量176MB,消费时间是67.572第二;gzip + dedup明白了linux-2.6.37.gz.ded容量241MB,消费时间是159.992第二。实验数据进一步验证了上述分析的正真实性,先数据去重再数据压缩,可以获得更高的数据压缩比和表现。