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. org.eclipse.core.resources.bak文件导致MyEclipse每次关闭时无法保存文件

    MyEclipse关闭时提示如下信息 Problems occurred while trying to save the state of the workbench. Internal Error ...

  2. Python- Anacoda环境使用Selenium+ChromeDriver报错

    我的系统是win10,python是用Anacoda安装的,通过pip安装了selenium 后使用Chromedriver发现报错,pip安装selenium如下: pip install sele ...

  3. js中的可枚举属性与不可枚举属性

    在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...

  4. php数据结构课程---1、数据结构基础介绍(程序是什么)

    php数据结构课程---1.数据结构基础介绍(程序是什么) 一.总结 一句话总结: 程序=数据结构+算法 设计好数据结构,程序就等于成功了一半. 数据结构是程序设计的基石. 1.数据的逻辑结构和物理结 ...

  5. 关于IDT报错乱码总结

    可算是把我折腾坏了.一筹莫展.最后才把这些问题搞好.有些事不知道做以前,怎么都想不到.发现了方法之后,原来也不过这样.我觉得自己记性太差.还是好好写下来吧.写下来顺便会帮我重新再梳理一遍.原先乱码是因 ...

  6. 我理解的关于Vue.nextTick()的正确使用

    什么是Vue.nextTick() 官方文档解释如下: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 我理解的官方文档的这句话的侧重点在最后那半 ...

  7. IpIImage -> CvMat 转换方法

    Ipl转为CvMat 一般为这两种方法: 1: /*cvGetMat*/ CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); 2 ...

  8. Web视频播放 之 【HTML5 Video标签】

    一.说明 HTML5中引入了video标签用于方便的在浏览器中播放视频,不在需要对flashPlayer进行依赖,更加轻量级.但在浏览器兼容.视频协议支持方面还有一些需要注意的问题. 二.浏览器兼容 ...

  9. JS上传图片-通过FileReader获取图片的base64

    下面文章,我想要的是: FileReader这个对象,可以借助FileReader来获取上传图片的base64,就可以在客户端显示该图片了.同时,还可以把该图片的base64发送到服务端,保存起来. ...

  10. mysql5.5主从同步复制配置

    在上篇文章<烂泥:学习mysql数据库主从同步复制原理>中,我们介绍了有关mysql主从复制的基本原理.在这篇文章中,我们来实际测试下mysql5.5的主从同步复制功能. 注意mysql5 ...