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

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

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

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

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

指纹被散列到索引页面,每个指纹将该页作为编码的前缀。
如图例子:完整的编码是\(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表明了指纹在内存中频繁交换的概率。

Note: File Recipe Compression in Data Deduplication Systems的更多相关文章

  1. 论文阅读 Prefetch-aware fingerprint cache management for data deduplication systems

    论文链接 https://link.springer.com/article/10.1007/s11704-017-7119-0 这篇论文试图解决的问题是在cache 环节之前,prefetch-ca ...

  2. Data Deduplication Workflow Part 1

    Data deduplication provides a new approach to store data and eliminate duplicate data in chunk level ...

  3. salt-stack "No Top file or external nodes data matches found"解决

    salt-stack在配置分组时提示如下信息: No Top file or external nodes data matches found 后来在官网上找到如下提示,意思是需要重启master服 ...

  4. Could not load file or assembly 'MySql.Data.CF,

    Could not load file or assembly 'MySql.Data.CF, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c56 ...

  5. Could not load file or assembly 'System.Data.SQLite' or one of its dependencies

    试图加载格式不正确的程 异常类型 异常消息Could not load file or assembly 'System.Data.SQLite' or one of its dependencies ...

  6. WebViewer报错Error loading document: Invalid XOD file: Zip end header data is wrong size!

    错误:Error loading document: Invalid XOD file: Zip end header data is wrong size! 解决:https://groups.go ...

  7. SQLite 解决:Could not load file or assembly 'System.Data.SQLite ... 试图加载格式不正确的程序/or one of its dependencies. 找不到指定的模块。

     Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies. 找不到指定的模块. 错误提示 ...

  8. Eclipse的DDMS File Explorer无法进入data目录解决方案

    进入data目录需要root权限.所以,你的手机要有root才可以.然后做以下步骤就可以了 1.cmd进入platform-tools目录 2.adb shell 3.su(这里要看手机有没有请求ro ...

  9. mysql的错误:The server quit without updating PID file /usr/local/mysql/data/door.pid).

    mysql错误解决: 先 参考:http://www.jb51.net/article/48625.htm 参考第四条: mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打 ...

随机推荐

  1. IntelliJ IDEA Sringboot 项目部署到外部Tomcat服务器

    <packaging>war</packaging> 添加依赖 <dependency> <groupId>org.springframework.bo ...

  2. JS正则表达式,记录自己所学所用的内容

    还没接触正则表达式感觉确实有那么点难度,但接触到后自己琢磨了几天也没发现那么难. 现在教教刚学的或者还没接触正则表达式的同学们入入门,一起学习. 正则表达式基本语法 ***************** ...

  3. hdu-5584 LCM Walk(数论)

    题目链接:LCM Walk Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others)To ...

  4. codeforces 631C C. Report

    C. Report time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  5. 【二叉查找树】05根据升序的链表构造二叉查找树【Convert Sorted List to Binary Search Tree】

    利用递归,构造二叉查找树, ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给一个 ...

  6. Execl to HTML

    /************************************************************************* * Execl to HTML * 说明: * 这 ...

  7. 关于linux 安装 python pymssql模块

    需要先安装freetds是一个开源的C程序库,它可以实现在Linux系统下访问操作微软的SQL数据库.可以用在Sybase的db-lib或者ct-lib库,在里面也包含了一个ODBC的库.允许许多应用 ...

  8. Linux下几种RTP协议实现的比较和JRTPLIB编程讲解

    流媒体指的是在网络中使用流技术传输的连续时基媒体,其特点是在播放前不需要下载整个文件,而是采用边下载边播放的方式,它是视频会议. IP电话等应用场合的技术基础.RTP是进行实时流媒体传输的标准协议和关 ...

  9. 使用Visual Studio进行单元测试-Part5

    本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 如何模拟类的静态构造函数 如何测试某方法被调用过 如何测试某方法执行的次数 并行编程测试注意事项 一.如何模拟类的静态构造 ...

  10. 使用Visual Studio进行单元测试-Part4

    本文主要介绍Visual Studio(2012+)单元测试框架的一些技巧: 如何模拟类的构造函数 优化代码,便于测试 一.如何模拟类的构造函数 1.1 被测代码 基础代码,IShape分别有Rect ...