Note: File Recipe Compression in Data Deduplication Systems

Zero-Chunk Suppression

检测全0数据块,将其用预先计算的自身的指纹信息代替。

Detect zero chunks and replace them with a special code word by pre-calculating the fingerprint of the chunk filled with zeros。

Chunk Index Page-oriented Approach

通过数据块索引来分配编码,假设使用基于分页的磁盘的哈希表来实现块索引,并且指纹被散列到磁盘的页上。

编码由两部分组成:前缀和后缀。

  • 前缀:页码。
  • 后缀:每个后缀在该页中保持唯一性的前提下用最少的比特表示。

通过前缀与后缀的配合为每个指纹保存唯一的编号。
(编码与字节边界对齐以允许更快的处理。)

Screen Shot 2017-05-25 at 3.42.01 P

指纹被散列到索引页面,每个指纹将该页作为编码的前缀。
如图例子:完整的编码是\(17001||9\)。

Statistical Approaches

变长编码方法

先计算出每个chunk的指纹的熵,通过变长编码为每个chunk分配唯一的编码。(类似霍夫曼编码)
\[h=-log_2 \left(\frac{usage count of h}{total chunk usage}\right) \]

特殊之处:

  • file recipe的大小是\(2^{160}\)而不是\(2^8\).因此在内存中无法创建完整霍夫曼树。
  • 数据重删需要支持随机访问

使用数据块的偏移量来进行file recipe的压缩:如果数据块的熵低于某个阈值,则将一个固定大小的编码分配给其指纹。

由于熵无法预先确定,因此需要在进行一个或多个备份后才可以确定,第一个备份的指纹必须无修改的保存(没有编码可以分配)。

编码一旦分配则不撤销,当某时间点发现某个编码访问量低于阈值,则将该编码回收,然后新到的数据块再次保存完整指纹信息(除了数据块索引中的使用计数器之外,还可以维护单独的编码使用计数器)。对于大多数数据块,熵几乎与由面向页面的方法分配的编码的长度相同。因此,不应该将一个基于熵的编码分配给多个块的一小部分。

统计字典方法

重要的假设:有可能估计一个块的整体概率。
经常收集对数据块的使用次数以用于垃圾回收,通过将该使用计数与总参考数相关联,可以计算数据块的概率。

统计字典方法使用数据块指纹引用的概率,而不使用这些的内容信息(order-0统计量)构建编码。

order-1统计量查看前一个数据块,并根据该环境信息计算指纹的概率。

order-1模型的熵为我们提供了一个理论下限。在ENG数据集中,使用order-1统计模型的熵为0.13bit。其他数据集中的统计数据类似(HOME1中为0.14bit,HOME2为0.21bit)。

如果先前的数据块指纹已知,那么下一个指纹的不确定度很低。在File recipe的实际压缩方案中可以提供更显著的压缩。

然而,存储order-1模型的信息随数据块数量二次增长,因此在实际的重复数据删除系统中不可用。

Misra-Gries

使用数据流算法Misra-Gries来近似指纹对频率的检测。因此,我们将k指纹(或编码)存储在数据块索引条目中。参数k表明了指纹在内存中频繁交换的概率。

 

posted @ 2017-06-01 22:58  tino_ryj  阅读(266)  评论(0编辑  收藏  举报