重复数据删除和数据压缩之间的确切区别是什么。
据我所知,重复数据删除意味着当我们拥有完全相同的数据副本时,无论是相同的块(块级重复数据删除)还是相同的文件(文件级重复数据删除),那么在存储中只保留一个副本,并且该副本的数量为每次不同用户使用块或文件时,ref count都会递增。
但压缩如何在内部起作用。
请帮我解决这个问题。 提前谢谢。
答案 0 :(得分:8)
简短的回答是,重复数据删除可以被视为一种高度专业化的压缩形式,针对特定的上下文。接下来会有很长的答案。
在对比这些技术之前,让我们先谈谈典型压缩的工作原理。
压缩本身是多种多样的。你有一些有损压缩算法,比如JPEG和MP3,它们使用我们如何看到或听到的模型丢弃一些可能对图像或声音不那么重要的信息,但仍会降低质量。根据您的问题,这些技术大多超出了问题的范围。
您可能最关心的是我们称之为通用无损算法,例如zip,LZMA,LZ4等,它们以可逆方式压缩任意文件。通常这些压缩文件使用下面非详尽列表中的至少几种技术:
匹配查找。找到(重复字节的字符串)中的冗余并用较短的序列替换重复。例如,此类算法可能包含字符串:
developers developers developers developers
然后将其替换为:
developers (0,11)(0,22)
其中(0,11)表示"重复使用从位置0和#34;开始的11个字符。这被称为"匹配发现"或LZ77式压缩,很简单。
熵编码。您可以从以下字符串开始:
AABCABBCABACBAAACBCCAABAAACBAA
这看起来很随机,对吗?然而,你可能会注意到,有些字母比其他字母显得更多 - A出现的频率是B和C的2倍,其他字母根本不出现!
使用该信息,您可以选择代表字符串中字符数较少的字符的编码,例如,A可以使用二进制0
进行编码,而B和C则分配10
和{分别为{1}}。如果你最初每个字符使用8位,这是一个很大的节省。
大多数数据都有复杂的关系,这些关系不一定能通过上述简单的技术很好地压缩,而是需要某种类型的模型。例如,您可能有各种模型基于相邻像素预测图像中像素的值。您可能有一个模型根据该点的句子预测句子中最可能的下一个单词。例如,如果我说:11
,您可能会以高精度填写空白。
这些都不是相互排斥的 - 它们通常以互补的方式使用,并且还有其他未提及的技术。
现在,在我们讨论重复数据删除之前,确切地说,值得注意的是压缩算法的典型特征。这些不是绝对的规则,但它们是许多压缩算法的共同特征,除非它们是专门为避免它们而设计的:
输入字节和输出字节之间没有简单的关系。
输入和输出以复杂的方式相关(不像Base-64编码,其中每3个连续的输入字节按顺序对应4个连续的输出字节)。其含义如下:
您通常不能简单地获取压缩数据并解压缩它的任意部分,例如"解压缩此文件的最后500个字节"。您可能需要从头开始读取整个压缩文件,或者至少从流中的一些众所周知的点开始。
未压缩输入的修改可能会对压缩输出产生任意大的影响。例如,更改输入中的单字节可能会更改输出中的每个后续字节。这通常意味着难以逐步更新大型压缩流(即,基于对输入的修改)。
因此,鉴于上面对压缩的定义和讨论,重复数据删除通常意味着什么?
今天,您通常会在存储设备或架构的竞赛中关注重复数据删除。例如,当存在大量重复数据时,这是一种节省磁盘空间的方式(例如,想象一下,在SAN上有100个VM映像 - 操作系统和其他常见数据库之间可能存在大量重复每个VM上的文件。)
重复数据删除只是一种存储此冗余数据的方法。本质上,它大规模地实现了上面的技术(1),没有上面讨论的一些限制。因此,它只是一种压缩形式,可以在大块,整个驱动器或整个存储主机上运行,甚至可以在一组联网机器上运行。
现在你不能只是" gzip"然而,整个驱动器,因为重复数据删除应该透明,功能和性能。文件系统提供的API(例如,POSIX或Win32等)允许用户写入文件的任意部分。如果用户修改1GB文件中的1个字节,如果这需要一分钟或更长时间来解压缩然后压缩整个文件,他们会感到惊讶。
因此,重复数据删除的工作方式仍然是可以随机访问文件;例如,通过具有索引使得可以定位任何字节的位置)。这通常意味着重复数据删除仅适用于大型匹配(块)大小,否则跟踪块的成本变得过高。有些系统只检测符合其他条件的重复,例如在文件中具有相同的对齐方式。
重复数据删除通常是透明地发生(文件系统的用户不知道它),也可能是异步发生的:即,当写入新数据时,它最初被视为唯一,并且稍后才会被检查用于复制,并可能与现有数据合并。
简而言之,重复数据删除可以被认为是一种压缩的特定应用,调整到它将用于的域:删除典型压缩算法的一些限制以换取可接受的性能,但代价是只删除大重复区域,通常避开其他压缩机会,如(2)熵编码或(3)建模。
答案 1 :(得分:1)
对于NetApp压缩&重复数据删除细节,请看"NetApp Data Compression and Deduplication Deployment and Implementation Guide"。对于TL; DR类型,简短的答案是 let popup = UIAlertController(title: "My title",
message: "My message",
preferredStyle: .Alert)
popup.addTextFieldWithConfigurationHandler { (optionalTextField) -> Void in
optionalTextField.placeholder = "This is optional"
}
popup.textFields![0].delegate = self
popup.textFields![0].tag = 999
let submitAction = UIAlertAction(title: "Submit", style: .Cancel) { (action) -> Void in
let optionalTextField = popup.textFields![0]
let text = optionalTextField.text
print(text)
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
popup.addAction(cancelAction)
popup.addAction(submitAction)
self.presentViewController(popup, animated: true, completion: nil)
基于每卷在4k WAFL块级别上工作,而压缩在多达32k压缩组上工作,基于每个文件(但是只能在整个卷上启用/禁用)。从最新的CDOT版本开始,dedupe
和compression
都可以在内联和/或后处理中运行。