二进制差量更新算法比较
Introduction
本文对目前比较流行的基于二进制差量更新算法的几个实现进行了一个比较。
差量更新算法的核心思想是尽可能多的利用old文件中已有的内容,尽可能少的加入新的内容来构建new文件。通常的做法是对old文件和new文件做子字符串匹配或使用hash技术,提取公共部分,将new文件中剩余的部分打包成patch包,在Patch阶段中,用copying和insertion两个基本操作即可将old文件和patch包合成new文件。比较时主要基于以下标准:
Approach
Evaluation
Rdiff:做出的diff太大。
Bsdiff:它需要max(17n,9n+m)+O(1) bytes的内存,n是old文件的size,m是新文件的size。换句话说,它不能处理特别大的文件。
Courgetee:google的项目,初衷是减少Chrome的网络流量。基于bsdiff针对可执行文件类型做了些优化,所以它也不能处理太大的文件。
OpenVcdiff:它用了delta encoding算法(RFC3284)。它的实现是将old文件全部加载到内存中处理,所以它也不能处理太大文件。
zdelta:不支持windows平台,并且处理大文件时性能比较低。
xdelta3:采用delta encoding算法,支持特大文件,性能好并且平台独立。但是它遵循GPL v2 license,对商业应用不友好。
Rtpatch Server:rtpatch的增强版,提供了windows平台的多线程build功能。属于一款应用较广泛的商业软件。
接着从build diff的size和CPU以及内存消耗方面比较了一下rtpatchserver和xdelta3。
Conclusion
通过比较可以发现,若是商业应用的话满足所有标准的只有RtpatchServer。若是内部使用的话则xdelta3的表现明显好于其他。