一种并行的数据差分方法技术

技术编号:15938827 阅读:48 留言:0更新日期:2017-08-04 21:43
本发明专利技术提供一种并行的数据差分方法,步骤包括:(1)文件预处理:将源文件和目标文件初始化,生成源文件的后缀数组,创建补丁文件并初始化;(2)目标文件切分:根据线程数目切分目标文件,为切分后的每一部分目标文件增加一个线程进行独立处理;(3)线程处理过程:在每一线程中,初始化切分后的目标文件,创建patch文件,通过上述后缀数组比较源文件与目标文件生成差分数据,将该差分数据写入该patch文件;(4)主进程合并处理:将上述各线程的已写入差分数据的patch文件一起写入上述补丁文件。本方法采用多线程并行技术,来提高生成补丁的速度。

A parallel data differencing method

The invention provides a parallel data difference method comprises the following steps: (1) file pretreatment: source file and the target file initialization, suffix array to generate source files, create a patch file and initialize; (2) the target file segmentation: according to the number of threads cut the target file for each part of the target document segmentation after adding a thread to be processed independently; (3) threading process: in each thread, segmentation of the target file initialization, create a patch file, the suffix array comparison files to generate differential data, the differential data is written to the patch file; (4) the main process combined treatment: the thread has been written into the differential data patch file to the patch file. This method uses multithreading parallel technology to improve the speed of patch generation.

【技术实现步骤摘要】
一种并行的数据差分方法
本专利技术涉及计算机信息
,具体涉及一种并行的数据差分方法。
技术介绍
随着互联网时代的到来,数据总量增长迅速,数据压缩在数据传输和存储中起到重要作用。数据差分也是一种压缩技术,其利用源文件和目标文件的差异实现对目标文件的压缩和解压。数据差分是指通过比较源数据和目标数据的差异,并产生差分数据补丁。同时利用差分数据补丁和源数据可以还原目标数据,从而帮助减少磁盘或宽带等资源消耗。数据差分技术主要应用在软件更新、数据传输和数据备份等具有对比性质的数据处理中。例如,在软件更新中,可以通过产生两个版本的差分文件来更新软件,减少了宽带资源消耗。形式上,一个数据差分算法如图1和图2所示,需要输入源数据和目标数据,通过源数据和目标数据的对比,产生差分数据,用于记录两个数据间的差异;并且通过差分数据和源数据可以无损还原目标数据。目前常用的差分算法有Diff算法、Rsync算法、Xdelta算法和Bsdiff算法等。Diff是一个文件比较工具,用来输出两个文件之间的差异。它通常是用来显示一个版本的文件和以前版本的文件之间的变化。该方法能很好地处理文本文件,因为文本文件的变化往往是局部的:从一个版本到下一个版本的变化可能是只有几行,但是大部分行将保持不变。然而这种方法不适合用在可执行文件上,因为当可执行文件改变时,通常会导致大范围的改变。Rsync是类Unix系统下的数据镜像备份公户RemoteSync,该算法不需要两个文件在同一台机器上,会先找出目标文件和源文件中相同的部分,只将那些认为不相同的数据同步过去。由于在第一次同步时Rsync会复制全部内容,在下一次只传输修改过的文件,所以Rsync算法速度比较快。Xdelta是专门用来处理二进制文件的工具,它包括对应的补丁合成工具,我们通常将它们结合起来实现生成补丁。数据差分算法Bsdiff是一个基于对bzip2压缩并且开源的构建二进制补丁的工具,Bspatch是其相对应的补丁合成工具。作者ColinPercival在文章(ColinPercival,Naivedifferencesofexecutablecode,http://www.daemonology.net/bsdiff/,2003.)中简单介绍了工具的思想,并在其博士毕业论文(ColinPercival,MatchingwithMismatchesandAssortedApplications[J].UniversityofOxford,2006.)有详细的论证和描述。Bsdiff算法流程如图3所示,将算法的思想简单介绍如下:(1)源文件和目标文件处理:包括初始化、生成后缀数组和初始化补丁文件:输入源文件和目标文件,生成源文件的后缀数组索引,逆序扫描目标文件,以二分查找的思想在后缀数组索引中找到一系列与源文件相匹配序列;这些匹配序列必须满足条件:假设已找到的匹配是new[x...x+k]=old[y...y+k],那么要找到的匹配对new[x'...x'+k']=old[y'...y'+k']应该满足new[x'+i]≠old[x'+i+(y-x)],其中i∈{z|z≥8,z∈N*},k为序列长度。该算法对目标文件的扫描策略是:从前往后依次扫描目标文件,如果在源文件和目标文件中找到连续的对应字符相等的序列,即最长公共前缀,或者是找到满足上述条件的序列。则在扫描的过程中直接跳过该序列的长度k,即扫描位置scan变为scan+ks。因此,源文件和目标文件相似性越大,扫描目标文件所需的时间开销越少。(2)比较文件,找到近似匹配对,生成差分数据:每一个后缀向前延伸(每一个前缀向后延伸)使源文件和目标文件中对应位置相同的字符达到该近似匹配区域的50%以上,这样就生成了两两不相交的近似匹配对。这种近似匹配将大致对应可执行代码中从源代码的未修改区域衍生出来的块,而目标文件中不是近似匹配对的部分,大致会对应源代码中修改过的行。因为在这个过程中用到了延伸匹配,所以我们忽略任何一个比8个字节匹配的“更好的”的匹配。经过这一步的处理,我们会将上一步得到的序列分为3部分,其中包括2个近似匹配对和1个非近似匹配部分,它们的相对顺序是:近似匹配对、非近似匹配对、近似匹配对。(3)生成差分文件:只对上一步骤中生成的前两部分内容进行处理,即第一个近似匹配对和非近似匹配对,对于找到的第二个近似匹配对会在下一个找到的区域中进行处理。差分文件包括三部分:第一部分是包含ADD和INSERT指令的控制文件块(以下简称ctrl块),其中ADD指令由偏移量字段和长度字段组成,INSERT指令只有一个长度字段;第二部分是由近似匹配对组成的“difference”文件块(以下简称diff块),该部分是由目标文件和源文件的对应元素做减法运算生成,即patch[i]=new[i]-old[i];第三部分是由目标文件中近似匹配对以外的所有字节组成的“extra”文件块(以下简称extra块)。生成差分文件后,用bzip2进行压缩,压缩后的文件即是最终的二进制差分数据。该算法最早是应用在Unix系统中,现在已经广泛地应用到App的增量更新,并且Chrome浏览器也应用该算法来减小补丁包的大小。以目前手机APP应用商店的软件更新为例,手机APP应用商店在对软件进行更新时,都是应用Bsdiff算法先对前后版本的APP软件进行数据差分,然后将生成的更新补丁发送到各个手机终端进行软件更新,以减少带宽资源消耗并加速手机端APP更新过程。Bsdiff算法比Xdelta算法产生的二进制补丁小50-80%。该算法的时间复杂度是O((n+m)lgn),其中n表示源文件大小,m表示目标文件大小;恢复目标文件时的时间复杂度是O(n+m),虽然系统处理速度很快,但Bsdiff算法非常耗费内存,Bsdiff算法最多需要max(17*n,9*n+m)+O(1)字节的内存,其中n为源文件的大小,m为目标文件的大小。在由差分文件和源文件生成目标文件时,也需要n+m+O(1)字节。
技术实现思路
针对Bsdiff算法的问题,本专利技术提供一种并行的数据差分方法,采用多线程并行技术,来提高生成补丁的速度。为解决上述技术问题,本专利技术采用如下技术方案:一种并行的数据差分方法,步骤包括:(1)文件预处理:将源文件和目标文件初始化,生成源文件的后缀数组,创建补丁文件并初始化;(2)目标文件切分:根据线程数目切分目标文件,为切分后的每一部分目标文件增加一个线程进行独立处理;(3)线程处理过程:在每一线程中,初始化切分后的目标文件,创建patch文件,通过上述后缀数组比较源文件与目标文件生成差分数据,将该差分数据写入该patch文件;(4)主进程合并处理:将上述各线程的已写入差分数据的patch文件一起写入上述补丁文件。进一步地,将源文件和目标文件初始化是指,为源文件和目标文件分配内存空间,将源文件和目标文件读入内存中,记录该两个文件大小。进一步地,初始化的补丁文件所含信息包括版本标识符、目标文件大小及patch块个数。进一步地,后缀数组由序号和位置构成,其中序号表示后缀数组的排序,位置表示读取源文件的内存起始位置。进一步地,目标文件切分时,可根据文件大小平均切分,或者根据目标文件与源本文档来自技高网
...
一种并行的数据差分方法

【技术保护点】
一种并行的数据差分方法,步骤包括:(1)文件预处理:将源文件和目标文件初始化,生成源文件的后缀数组,创建补丁文件并初始化;(2)目标文件切分:根据线程数目切分目标文件,为切分后的每一部分目标文件增加一个线程进行独立处理;(3)线程处理过程:在每一线程中,初始化切分后的目标文件,创建patch文件,通过上述后缀数组比较源文件与目标文件生成差分数据,将该差分数据写入该patch文件;(4)主进程合并处理:将上述各线程的已写入差分数据的patch文件一起写入上述补丁文件。

【技术特征摘要】
1.一种并行的数据差分方法,步骤包括:(1)文件预处理:将源文件和目标文件初始化,生成源文件的后缀数组,创建补丁文件并初始化;(2)目标文件切分:根据线程数目切分目标文件,为切分后的每一部分目标文件增加一个线程进行独立处理;(3)线程处理过程:在每一线程中,初始化切分后的目标文件,创建patch文件,通过上述后缀数组比较源文件与目标文件生成差分数据,将该差分数据写入该patch文件;(4)主进程合并处理:将上述各线程的已写入差分数据的patch文件一起写入上述补丁文件。2.根据权利要求1所述的方法,其特征在于,将源文件和目标文件初始化是指,为源文件和目标文件分配内存空间,将源文件和目标文件读入内存中,记录该两个文件大小。3.根据权利要求1所述的方法,其特征在于,初始化的补丁文件所含信息包...

【专利技术属性】
技术研发人员:刘燕兵卢毓海王歧张春燕谭建龙郭莉
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1