谈谈文件增量同步算法: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 ...
随机推荐
- WPF中timer的使用
Timer控件/ System.Timers.Timer 不能用于WPF中.在WPF中,定时器为 DispatcherTimer. 使用方法如下: private DispatcherTimer ti ...
- BestCoder Round #75 1003 - King's Order
国王演讲后士气大增,但此时战争还没有结束,国王时不时要下发命令. 由于国王的口吃并没有治愈,所以传令中可能出现:“让第三军-军-军,到前线去” 这样的命令.由于大洋国在军队中安插了间谍 , 战事紧急, ...
- git工作区和暂存区
工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区, ...
- thoughtworks家庭作业C++版本
商品类: #ifndef ITEM_H_ #define ITEM_H_ class SalesTax; //This represents the Items which don't have an ...
- HTML5中的服务器‘推送’技术 -Server-Sent Events
转帖:http://www.developersky.net/thread-63-1-1.html 一直以来,HTTP协议都是严格遵循Request-Response模型的.客户端发送一个Reques ...
- python练习_购物车(2)
用python写了一个购物车程序,主要是练习,代码如下 主入口文件:main.py #!/usr/bin/env python # -*- coding:utf-8 -*- #先调用用户登录函数,在进 ...
- python----slots属性安全类
问题:__slots__可以用于构造安全的类.如果一个类使用了__slots__那么它的属性就不在自由了. 下面举例说明: 1.自由属性. class person(object): def __in ...
- Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.
Scenario : 这个问题是我的存储过程中用到临时表时发生的. 应该是sql server 服务器的排序规则 (SQL_Latin1_General_CP1_CI_AS ) 与数据库的排序规则(C ...
- linux第七章《档案与目录管理》重点回顾
- top k 算法
对于一个非有序的数组A[p..r],求数组中第k小的元素. 如何考虑 排序(部分排序)就不用说了..o(nlgn),当然如果在实际情况中要一直取值,当然要排序后,一次搞定,以后都是O(1) 我们这里提 ...