delta 压缩

基本原理:    

      delta 压缩涉及 delta文件(也可以称为different file)。比如现在有个文件A,经过修改得到文件A‘,那么delta文件内容就是 A与A’不同的东西。 delta文件内容具体形式与具体算法相关,简单的,可以是A到A'的所有操作,就像mysql里面的二进制文件;或者是自己编码过的文件,像linux 下的diff。总之不管怎样的形式,都应该可以 A+deltaA = A‘,A’ –deltaA = A(也可以是A‘+deltaA = A,A-deltaA' = A’, delta文件记录的变化是A到A‘的变化,还是A’到A的变化)。基本原理挺简单的,主要问题是怎样从A和A‘中生成deltaA

image

 

 

Delta Storage for Arbitrary Non-Text Files

http://www.kuaipan.cn/file/id_10724099546726244.html

       这篇文件是很早很早前的一篇论文,比我的年纪都大。里面的delta文件是new file 到 old file 的变化,也就是说 new file + delta文件 重构 old file。 delta文件内容是edit command。如下:

image

      他的基本思想是:把oldfile的内容分成两部分,一部分是newfile中的,通过copy可得到;另部分是s中没有的,需要add。因此主要问题是怎样找到相同的部分。这个问题和字符串的LCS(最长公共子串序列)问题差不多。这篇文章是通过hash的方法,首先对newfile进行预处理,对newfile每个连续的具体长度(自己定)的prefix string,进行rabin hash,得到如下

image(图可能看不懂,可以看原文)

然后,顺序处理oldfile,找到oldfile 与newfile 公共的部分。

个人觉得这种方法最大缺点是内存要很多。

A LINEAR TIME, CONSTANT SPACE DIFFERENCING ALGORITHM

http://www.kuaipan.cn/file/id_10724099546726216.html

       这个论文的方法利用了oldfile和newfile的相同块的出现顺序基本一这个性质进行了优化,因而达到了线性时间,常数内存。但是如果oldfile和newfile的相同数据块出现在顺序不一样,那么这种方法的压缩效果就不好了。Delta Storage for Arbitrary Non-Text Files提高的方法,在这篇文章中,称为greedy method,它的压缩效果最好,但时间,和空间是缺点。

 

上面的两种方法都需要oldfile和newfile 在同一台host,才能进行delta压缩,下面介绍的是oldfile和newfile在不同host,也可以进行delta压缩。

The rsync algorithm

https://rsync.samba.org/tech_report/tech_report.html

具体算法在https://rsync.samba.org/tech_report/node2.html,蛮简单的。

你可能感兴趣的:(压缩)