一种数据增量更新方法【
技术领域:
】[0001]本发明涉及计算机、智能设备、消费电子产品等数据更新领域,尤其涉及一种数据增量更新方法。【
背景技术:
】[0002]随着智能手机、穿戴设备等消费电子产品提供的应用服务不断增多,系统更新、应用软件升级、安全漏洞修复等数据更新业务应用范围越来越广。其中,代码或数据的变化是软件新旧版本存在差异的主要原因,并且,新旧版本软件之间的差异信息往往远小于软件本身的大小。因此,使用数据增量方式进行更新是非常高效的,通过增量更新找到新旧文件之间的差异,并将该差异信息表述成增量文件,增量文件含有指令和数据,进行更新的设备使用增量文件可以将旧文件转化为新文件。[0003]图1显示了现有技术中数据增量更新的基本流程:在服务器端存储着旧版本文件(软件或者数据)和新版文件,当某个新版本要被发布前,服务器比较新文件和旧文件,并将二者的差异信息表述为增量包的形式,增量包被压缩后得到增量压缩包,再通过通信网络传递给需要更新软件的设备,设备收到增量压缩包并解压,按照增量包中的指令和数据将旧文件转化为新文件。[0004]图1所示的数据更新流程在实际应用中,会存在受限的网络带宽、按流量计算的费用、以及消费电子设备较小的内存和有限的电量等实际限制,而较小的增量压缩包能够减少流量费用和下载时间,应用增量包时较小的内存耗费和较少的CPU时钟周期能够减少生成新文件的时间、节省设备电量、降低对正在运行的其他应用程序的影响,最终提升用户体验。可以看出,消费电子设备数据增量更新方法的主要评价标准是:增量包、增量压缩包的大小和应用增量包的时间。因此,减小增量包和增量压缩包的大小,以及加快应用增量包的速度是数据更新方法中需要重点解决的问题。[0005]在现有技术中,数据增量更新方法主要包括:T.Andrew在文献《EfficientAlgorithmsforSortingandSynchronization》(AustralianNationalUniversity,1999)提出的RDIFF方法,C.Percival在文献《Naivedifferencesofexecutablecode》(UniversityofOxford,2003)提出的BSDIFF方法,以及D.Korn等作者在文献《TheVCDIFFGenericDifferencingandCompressionDataFormat》(RFC3284(ProposedStandard),June.2002)提出的VCDIFF方法。[0006]RDIFF方法主要将旧文件和新文件分成相同大小的连续多个数据块,计算每个数据块的哈希值,依据哈希值在新旧文件之间寻找相同的数据块,增量包中包括对旧文件某个数据块的引用,或者是一个完整的新数据块。该方法结构简单,计算速度快并且适用于解决RDC(RemoteDifferentialCompression)问题,缺点是无法全面采集新旧文件之间所有的相似信息,应用该方法的软件有Rsync和rdiff-backup等。[0007]BSDIFF方法是在新文件和旧文件之间寻找完全相同的数据段,接着逐字节延伸该数据段的前缀和后缀,尝试寻找近似但不完全相同的数据段,即近似数据段。BSDIFF方法中使用了N.S.Larsson和K.Sadakane提出的后缀数组排序算法,增量包中指令有ADD、INSERT、SEEK,ADD操作的参数是近似数据段长度和修正量,INSERT操作的参数是插入段长度和插入内容,SEEK操作的参数是旧文件读取指针的跳跃跨度。ADD操作的修正量参数是增量包的主要成分,新旧文件的相似程度与修正量中"〇"的比例成正比,较高的"〇"的比例使得增量压缩包小于新文件的大小。BSDIFF方法中的增量包较小,但是构造增量包和应用增量包的计算量较大,因此费时较多。目前BSDIFF方法是应用最广泛的增量更新算法,Bsdiff工具应用了BSDIFF方法。[0008]V⑶IFF方法是基于LZ77(Lempel-Ziv77)压缩算法进行改进,实现增量更新。LZ77压缩算法主要是基于一个数据流中后面的数据段与前面的数据段相似或者相关进行数据压缩,借鉴LZ77压缩算法,VCDIFF方法将旧文件和新文件链接成一个数据流,应用LZ77压缩算法进行压缩,截取压缩流中表达新文件的部分作为增量包。VCDIFF方法的性能介于在RDIFF方法和BSDIFF方法之间,牺牲了部分压缩率,加快了执行的速度。Xdelta是应用V⑶IFF方法的软件之一,并且该软件还在V⑶IFF基础上进行了改进,优化了其中的指令集,进一步减小了增量压缩包的大小。[0009]为此,需要提供一种数据增量更新方法,与现有技术相比能够在减少增量包大小、提高增量包压缩率和加快客户端设备的运行速度等方面都有显著的性能提高。【
发明内容】[0010]本发明主要解决的技术问题是针对现有技术中数据增量更新方法普遍存在增量包较大、压缩率不高、运行时间较长以及这些特性不能同时较好兼顾的不足,提供一种转化为寻找最短代价路径的方式构造增量包的数据增量更新方法。[0011]为解决上述技术问题,本发明采用的一个技术方案是:提供.一种数据增量更新方法,该方法包括以下步骤:第一步,构造相似信息集合Segment,将新文件数组New包含的字符与旧文件数组Old包含的字符进行对比运算,输出相同的多个字符片段segment(s,t,1),其中,s是该字符片段在该旧文件数组Old中的位置,t是该字符片段在该新文件数组New中的位置,1是该字符片段的字节数量,得到该相似信息集合Segment为:[0012]Segment={segment(s,t,I)|old[s+i]=new[t+i],i=0,I,2,...,1-1};[0013]第二步,构造水平线段图,将该相似信息集合Segment中的该多个字符片段segment(s,t,1)对应转换为该水平线段图中的多个水平线段Segi(t,s-t),该水平线段Segi(t,s-t)的左端点坐标为(t,s-t),长度为1,i表示该水平线段Segi(t,s-t)在该水平线段图中的序号;第三步,构造路径图,将该水平线段图中的该多个水平线段Segi(t,s-t)对应为该路径图中的多个节点Vi,在该多个节点\之间构建节点边,并计算每一个该节点边的边代价;第四步,构造最小代价路径,从起始节点segment(0,0,0)经过该路径图中的该多个节点Vi到达终止节点segment(newSize,0,0)有多条路径,计算每一条路径包括的多个该节点边的该边代价之和,找到和值最小的路径即为最小代价路径,newSize表示该新文件数组New中的字节数;第五步,构造增量包,根据该旧文件数组Old和该新文件数组New,采用指令集和数据集,从起始节点沿该最小代价路径,依次确定相邻节点间的指令编码,由该指令编码组成该增量包;第六步,应用增量包,根据该旧文件数组Old,按照该增量包中的该指令编码字节逐字节生成新文件。[0014]在本发明数据增量更新方法另一实施例中,该将新文件数组New包含的字节与旧文件数组Old包含的字节进行对比运算的方法包括:[0015]首先,对该旧文件数组Old进行后缀排序,得到该旧文件数组Old的后缀数组I;然后,利用该后缀数组I,在该旧文件数组Old中寻找与该新文件数组New中{new[t],new[t+l],···,new[newSize_l]}前缀匹配长度最大的片段{old[s],old[s+l],···,old[s+1-1]},并输出:[0016]new[t]=old[s],new[t+l]=old[s+l],...,new[t+l-l]=old[s+l-l]〇[0017]在本发明数据增量更新方法另一实施例中,该构造相似信息集合Segment包括进一步对该相似信息集合Segment进行消减,该消减方法包括:第一,若存在segment(s',t',1')eS当前第1页1 2 3 4