谈谈文件增量同步算法:RSYNC和CDC
谈谈文件增量同步算法:RSYNC和CDC
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近在研究文件的增量同步问题,着重研究了文件差异编码部分,因为这个其实是文件同步的核心。目前应用最广泛的当然是linux下的RSYNC算法,但是这个算法本身存在缺陷,就是当两个文件完全无关时,差异编码的效率非常低,几乎难以接受!
带着这个问题,我研究了CDC(Content-Defined Chunking)算法,发现CDC算法恰好解决了这个问题:当两个文件的差异非常大时,CDC的效率非常高。我尝试了对两个完全不同的安装包文件进行差 分编码,文件大小约120M左右,使用RSYNC算法大约耗时180s,而CDC算法耗时则只有4s!但CDC也有自己的问题,在文件差异不大的情况 下,RSYNC和CDC效率差不多,但是RSYNC能够发现的重复分块更多,比CDC大约多出10%左右。
对于大文件的差异编码,我觉得可以将两者结合起来,首先使用CDC算 法进行差分编码,如果相同分块较多(可以用相同分块数据大小占文件总大小的比例确定),再使用RSYNC算法提取更多的相同分块;如果相同分块较少(可能 是2个完全无关的文件),则无需再使用RSYNC进行差分编码。这样既可以避免两个完全无关的文件差分编码时效率低下的问题,又能在文件差异较小时提取尽 可能多相同分块,鱼和熊掌兼得!
谈谈文件增量同步算法:RSYNC和CDC的更多相关文章
- 烂泥:linux文件同步之rsync学习(一)
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天刚好有空就打算开始学习linux下的文件同步软件rsync,在学习rsync时,我们可以分以下几个步骤进行: 1. rsync是什么 2. rsy ...
- 数据文件实时同步(rsync + sersync2)
因近期项目需求,需要同步云端服务器的数据给**方做大数据分析. 思路: 起初只要数据同步,准备开放数据采集接口.但实时性较差,会有延迟. 故而寻觅各种解决方案,最终确定使用 rsync 进行文件同步, ...
- rsync服务架设(数据同步|文件增量备份)
近期由于业务需要,需要将两台服务器数据保持同步.方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究.以下是本文提纲,供参考: rsy ...
- [rsync+inotify]——监控客户端文件变化,rsync同步到服务器
关于rsync的配置请参考博文:http://www.cnblogs.com/snsdzjlz320/p/5630695.html 实验环境 (1) Rsync服务器:10.0.10.158 (2) ...
- C#实现文件增量备份
最近将客户的一个ASP网站部署到了公司的机房云服务器上,该ASP网站的文件总容量已有将近4GB. 虽然现在硬盘容量很大,但每天一次完整备份的话,那占用的硬盘空间会急剧上升,考虑一个更优的备份方案就是每 ...
- 同步文件的利器-rsync
即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我不想失去任何这些数据. rsync是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件 ...
- 文件同步 单向rsync 双向unison 监控inotifywait 免密登录
1.负载均衡中文件同步必不可少,我这边选择rsync来实现文件同步 rsync同步文件机制更适用于单向文件同步,可配合unison实现双向同步功能. 实现同步的两种方法 一:ssh方法 rsync - ...
- 【实时文件同步】rsync+inotify-tools的安装与配置
http://blog.csdn.net/yakson/article/details/52044403
- redhat 7.6 安装 inotify-tools 文件监控工具 搭配rsync
1.解压inotify-tools tar -zxvpf inotify-tools-3.14.tar.gz 2.cd 到解压的目录 3../configure 编译,然后失败,提示checking ...
随机推荐
- FIFO算法
package studyJava;class FIFO{ /* * 先进先出算法 * N:内存块的个数 * array:内存块 * size:页面数目 * */ private static fin ...
- shell编程001
1.shell中如何进行算术计算 A=1; B=2 (1)let C=$A+$B (2)C=$[$A+$B] (3)C=$(($A+$B)) (4)C=`expr $A + $B` (注意运算符前 ...
- mysql学习(十)多表查询
多表查询时,要给表名起别名,给字段名其别名(当两个表含有重复字段时) select p.name, c.name, pid from products p, cats c;//得到的结果为笛卡尔乘积 ...
- 关于css3的背景切割(background-clip)、背景原点(background-origin)的使用
一.背景切割 background-clip :border-box | padding-box | content-box 作用:为将背景图片做适当的裁剪,以适应需要. 默认格式 bac ...
- 【学习笔记01】:hover为DIV添加鼠标悬停时改变颜色的效果
:hover所有主流浏览器都支持(IE6.0以下支持不好,以后再学习用Javascript来实现悬停效果) 这是一个绿色底白色Icon的搜索按钮
- 初学swift笔记字典、数组(四)
import Foundation //字典 元素顺序是无序的 //1.字典元素是键值对 (key:value) //key 一定是可哈希的 string\int\bool var dic1=[&qu ...
- SQLite header and source version mismatch 解决方案
我下载了sqlite源码,并且configure, make, make install. 然后就出现SQLite header and source version mismatch 的错误. 上 ...
- 《彻底搞定C指针》文档整理
一.变量存储 #include <stdio.h> int main(void) { ; printf(“%d\n”, i); printf(“%d\n”, &i); //十进制打 ...
- Gentoo Linux 学习笔记2
在RHEL系列的Linux操作系统中,可以通过rpm -ql package的方式来查看这个软件包共有哪一些文件所构成.在Gentoo下,也有这样的工具,equery.要使用这个工具,首先要 ...
- 给flash文件加超链接[兼容主流浏览器]
<div style="position: relative;"> <a style="width: 640px; height: 90px; posi ...