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
通过数据块索引来分配编码,假设使用基于分页的磁盘的哈希表来实现块索引,并且指纹被散列到磁盘的页上。
编码由两部分组成:前缀和后缀。
- 前缀:页码。
- 后缀:每个后缀在该页中保持唯一性的前提下用最少的比特表示。
通过前缀与后缀的配合为每个指纹保存唯一的编号。
(编码与字节边界对齐以允许更快的处理。)

指纹被散列到索引页面,每个指纹将该页作为编码的前缀。
如图例子:完整的编码是\(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的更多相关文章
- 论文阅读 Prefetch-aware fingerprint cache management for data deduplication systems
论文链接 https://link.springer.com/article/10.1007/s11704-017-7119-0 这篇论文试图解决的问题是在cache 环节之前,prefetch-ca ...
- Data Deduplication Workflow Part 1
Data deduplication provides a new approach to store data and eliminate duplicate data in chunk level ...
- salt-stack "No Top file or external nodes data matches found"解决
salt-stack在配置分组时提示如下信息: No Top file or external nodes data matches found 后来在官网上找到如下提示,意思是需要重启master服 ...
- 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 ...
- 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 ...
- 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 ...
- 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. 找不到指定的模块. 错误提示 ...
- Eclipse的DDMS File Explorer无法进入data目录解决方案
进入data目录需要root权限.所以,你的手机要有root才可以.然后做以下步骤就可以了 1.cmd进入platform-tools目录 2.adb shell 3.su(这里要看手机有没有请求ro ...
- 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配置文件,请打 ...
随机推荐
- 分享知识-快乐自己:揭秘HDFS
揭秘HDFS: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBas ...
- algorithm 简单用法
algorithm 简单用法 #include <iostream> #include <vector> #include <algorithm> using na ...
- OPcache
1.介绍 OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销 2.配置 2.1 opcac ...
- codeforces 629D D. Babaei and Birthday Cake (线段树+dp)
D. Babaei and Birthday Cake time limit per test 2 seconds memory limit per test 256 megabytes input ...
- stl_iterator.h
stl_iterator.h // Filename: stl_iterator.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...
- 【遍历二叉树】03二叉树的后序遍历【Binary Tree Postorder Traversal】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的后序遍历的 ...
- POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)
You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial ...
- poj 1845 Sumdiv(约数和,乘法逆元)
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A= ...
- Python的几种版本的不同实现
Python自身作为一门编程语言,它有多种实现.这里的实现指的是符合Python语言规范的Python解释程序以及标准库等.这些实现虽然实现的是同一种语言,但是彼此之间,特别是与CPython之间还是 ...
- DNSmasq
是一款轻便的主要用于个人电脑的DNS:占用的端口是53(和DNS服务的bind的端口一致):我之所以关注它,就是因为在安装DCOS的时候是不允许占用53端口:但是其实默认安装的CentOS几乎都有这个 ...