博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】基于内容可变长度分块(CDC)
阅读量:7096 次
发布时间:2019-06-28

本文共 1396 字,大约阅读时间需要 4 分钟。

 基于内容可变长度分块

1,简介

重复数据块检测技术分为,固定分块检测技术(Fixed-Sized Partition, FSP),可变分块检测技术(Variable-Sized Partition, VSP),滑动块技术(Sliding Block)。
固定分块将数据流按固定的长度分块,实现很简单,但某一处数据的变化将导致之后的所有分块都发生变化,从而无法进行匹配。因此,固定分块技术在实际中应用较少。可变分块技术则可弥补固定分块技术的这一局限性,能更加灵活的找出重复数据。基于内容可变长度分块(Content-Defined Chunking, CDC)是可变分块(Variable-Sized Partition, VSP)的一种。

2,理论基础

CDC的理论基础是rabin fingerprint,请参照Michael O. Rabin的Fingerprinting by Random Polynomials. 

3,具体实现

文件被分为长度可变的数据块,数据块的长度在一个规定的最小值和最大值之间。可变长度的数据块用一个滑动窗口来划分,当滑动窗口的 hash 值与一个基准值相匹配时就创建一个分块,这样数据块的尺寸就可达到一个期望的分布。Rabin’s fingerprint 预先定义两个整数 D 和 r(r<D) 一个大小为 w 的固定窗口在文件上滑动,
。假如在位置 k,固定窗口内数据的 hash 值为 f。如果f mod D = r,则该位置为数据块的一个边界。重复这个过程,直至整个文件都被分块。

实现起来也不是很复杂,但需要对每一次滑动都计算依次窗口内的hash值,计算量增加。另外,如果选择的D和r不合适,会导致窗口过小(很容易匹配上)或过大(不难匹配上)

4,与固定分块技术的对比

现在有一串数据D0:(ABCDEFGHIJKLMNOP),以固定分块为(ABCD | EFGH | IJKL | MNOP ),假如中间某部分数据发生了变化,数据变为D1:(ABCDEF22GHIJKLMNOP),那么固定分块为(ABCD | EF22 | GHIJ | KLMN | OP),除了第一块,其他所有的块都无法完成匹配。
如果采用CDC,假设初始分块也是(ABCD | EFGH | IJKL | MNOP),那么意味着在D, H, L这三个窗口内,是符合fmodD=r的条件的,当数据发生改变时,由于DHL这三个窗口并未发生改变,他们依然被认定为边界,那么分块有可能变成(ABCD | EF22GH | IJKL | MNOP),这样,除了发生改变的第二个块不能完成匹配外,其他三个数据块的匹配不会收到影响。

CDC其实早已应用广泛,其最早是用在低带宽环境的数据传输与同步,如rsysnc即使用CDC技术,来检测本次备份与上次备份之间的差异,从而达到只传递差异部分的目的。

参考文献

1,低带宽环境下基于混合方法的文件复制算法*
徐旦 1+, 生拥宏 2, 鞠大鹏 2 ,吴建平 1,汪东升 2,3
2,Michael O. Rabin Fingerprinting by Random Polynomials. 
3,基于Rabin指紋方法的URL去重算法

 

转载于:https://www.cnblogs.com/hadis-yuki/p/5224225.html

你可能感兴趣的文章
霍夫变换(hough transform),从直线到圆再到一般图形
查看>>
程序员技术练级攻略--练成这样,成神仙了!
查看>>
基金净值简介
查看>>
打开myeclipse出现这个错是为什么
查看>>
mongdb使用
查看>>
Hadoop Streaming框架使用(二)
查看>>
网站升级2.0回滚机制
查看>>
centos6.9 网络配置,防火墙,复制虚拟机20180127
查看>>
h3c防火墙的设置过程
查看>>
KMP + 求最小循环节 --- HUST 1010 - The Minimum Length
查看>>
<从优秀到卓越>读书笔记
查看>>
Python3 序列解包
查看>>
C/C++ —语言判断数字或字符的函数总结
查看>>
ParentalControl-SteadyState
查看>>
设计模式 — 结构型模式 适配器模式
查看>>
Tempter of the Bone------剪枝
查看>>
Java学习笔记---IO操作
查看>>
Hadoop2
查看>>
"Chinese Pinyin"App-隐私政策
查看>>
java多态性,父类引用指向子类对象
查看>>