s.p*_*tra 2 compression performance storage duplicates netapp
重复数据删除和数据压缩之间的确切区别是什么.
据我所知,重复数据删除意味着当我们拥有完全相同的数据副本时,无论是相同的块(块级重复数据删除)还是相同的文件(文件级重复数据删除),那么在存储中只保留一个副本,并且对于该副本,引用计数的数量是每次不同用户使用块或文件时递增.
但压缩如何在内部工作.
请帮我解决这个问题.提前致谢.
Bee*_*ope 10
简短的回答是,重复数据删除可以被视为一种高度专业化的压缩形式,针对特定的上下文.接下来会有很长的答案.
在对比这些技术之前,让我们先谈谈典型压缩的工作原理.
压缩本身是多种多样的.你有一些有损压缩算法,比如JPEG和MP3,它们使用我们如何看到或听到的模型丢弃一些可能对图像或声音不那么重要的信息,但仍会降低质量.根据您的问题,这些技术大多超出了问题的范围.
您可能最关心的是我们称之为通用无损算法,如zip,LZMA,LZ4等,它们以可逆方式压缩任意文件.通常这些压缩文件使用下面非详尽列表中的至少几种技术:
匹配发现.找到(重复字节的字符串)中的冗余并用较短的序列替换重复.例如,此类算法可能包含以下字符串:
developers developers developers developers
然后用以下内容替换它:
developers (0,11)(0,22)
其中(0,11)表示"重复使用从0位开始的11个字符".这被称为"匹配发现"或LZ77式压缩,很简单.
熵编码.您可以从以下字符串开始:
AABCABBCABACBAAACBCCAABAAACBAA
这看起来很随机,对吗?然而,你可能会注意到,有些字母比其他字母显得更多 - A的出现量是B和C的2倍,而其他字母则根本不出现!
使用该信息,可以选择表示与更少的信息,例如,该串中的字符的编码,A可以使用二进制编码0,而B和C被指派10和11分别.如果你最初每个字符使用8位,这是一个很大的节省.
大多数数据具有复杂的关系,不一定通过上述简单的技术很好地压缩,而是需要某种类型的模型.例如,您可能有各种模型基于相邻像素预测图像中像素的值.您可能有一个模型根据该点的句子预测句子中最可能的下一个单词.例如,如果我说:Who let the dogs ___,您可能能够以高精度填写空白.
这些都不是相互排斥的 - 它们通常以互补的方式使用,并且还有上面没有提到的其他技术.
现在,在我们讨论重复数据删除之前,确切地说,值得注意的是压缩算法的典型特征.这些不是绝对的规则,而是许多压缩算法的共同特征,除非它们是专门为避免它们而设计的:
输入字节和输出字节之间没有简单的关系.
输入和输出以复杂的方式相关(不同于Base-64编码,其中每3个连续的输入字节按顺序对应于4个连续的输出字节).其含义如下:
您通常不能简单地获取压缩数据并解压缩它的任意部分,例如"解压缩此文件的最后500个字节".您可能需要从头开始读取整个压缩文件,或者至少从流中的一些众所周知的点开始.
未压缩输入的修改可能对压缩输出产生任意大的影响.例如,更改输入中的单字节可能会更改输出中的每个后续字节.这通常意味着难以递增地更新大的压缩流(即,基于对输入的修改).
因此,鉴于上面对压缩的定义和讨论,重复数据删除通常意味着什么?
今天,您通常会在存储设备或架构的竞争中处理重复数据删除.例如,当存在大量重复数据时,这是一种节省磁盘空间的方式(例如,想象一下,在SAN上有100个VM映像 - 操作系统和其他常见数据库之间可能存在大量重复每个VM上的文件).
重复数据删除是一种仅存储此冗余数据的方法.本质上,它大规模地实现了上面的技术(1),没有上面讨论的一些限制.因此,它只是一种压缩形式,可以在大型块上运行,在整个驱动器上运行,也可以在整个存储主机上运行,甚至可以在一组联网机器上运行.
现在你不能只是"gzip"整个驱动器,因为重复数据删除应该透明,功能和性能.文件系统提供的API(例如,POSIX或Win32等)允许用户写入文件的任意部分.如果用户修改1GB文件中的1个字节,如果这需要一分钟或更长时间来解压缩然后压缩整个文件,他们会感到惊讶.
因此,重复数据删除的工作方式是仍然可以随机访问文件; 例如,通过具有索引使得可以定位任何字节的位置).这通常意味着重复数据删除仅适用于大型匹配(块)大小,否则跟踪块的成本变得过高.某些系统仅检测符合其他标准的重复,例如在文件中具有相同的对齐.
重复数据删除通常是透明的(文件系统的用户不知道它),也可能是异步发生的:即,当写入新数据时,它最初被视为唯一的,只有在以后检查它是否重复,并且可能与现有数据合并.
简而言之,重复数据删除可以被认为是一种类型的压缩的特定应用,调整到它将用于的域:消除典型压缩算法的一些限制以换取可接受的性能,但是仅以去除大的重复区域为代价,并且通常避开其他压缩机会,例如(2)熵编码或(3)建模.