rsync同步海量小文件,rsync+inotify实现增量同步配置

  rsync同步海量小文件,rsync+inotify实现增量同步配置

  最近在研究文件的增量同步时,我们把重点放在了文件差分编码上,因为这其实是文件同步的核心。目前当然是linux下的RSYNC算法是应用最广泛的算法,但是这个算法有自己的缺陷,就是当两个文件完全不相关的时候,差分编码的效率很低,几乎让人无法接受!

  带着这个问题,我研究了CDC(Content-Defined Chunking)算法,发现CDC算法正好解决了这个问题:当两个文件的差异非常大时,CDC的效率非常高。我试图对两个完全不同的安装包文件进行不同的编码。文件大小120M左右,使用RSYNC算法需要180s左右,而CDC算法只需要4s!然而,疾控中心也有自己的问题。当文件差别不大时,RSYNC和CDC的效率差不多,但RSYNC能找到更多的重复块,比CDC多10%左右。

  对于大文件的差分编码,我觉得可以把两者结合起来。首先,使用CDC算法进行差分编码。如果有很多相同的块(可以通过相同块数据大小占文件总大小的比例来确定),那么使用RSYNC算法提取更多的相同块。如果相同的块较少(可能是两个完全不相关的文件),就没有必要使用RSYNC进行差分编码。这样既可以避免两个完全不相关的文件差分编码效率低的问题,又可以在文件差异较小的情况下提取尽可能多的相同块,做到鱼和熊掌兼得!

rsync同步海量小文件,rsync+inotify实现增量同步配置