一種數(shù)據(jù)增量更新方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計算機、智能設(shè)備、消費電子產(chǎn)品等數(shù)據(jù)更新領(lǐng)域,尤其涉及一種數(shù)據(jù)增量更新方法?!?br>背景技術(shù):
】[0002]隨著智能手機、穿戴設(shè)備等消費電子產(chǎn)品提供的應(yīng)用服務(wù)不斷增多,系統(tǒng)更新、應(yīng)用軟件升級、安全漏洞修復(fù)等數(shù)據(jù)更新業(yè)務(wù)應(yīng)用范圍越來越廣。其中,代碼或數(shù)據(jù)的變化是軟件新舊版本存在差異的主要原因,并且,新舊版本軟件之間的差異信息往往遠小于軟件本身的大小。因此,使用數(shù)據(jù)增量方式進行更新是非常高效的,通過增量更新找到新舊文件之間的差異,并將該差異信息表述成增量文件,增量文件含有指令和數(shù)據(jù),進行更新的設(shè)備使用增量文件可以將舊文件轉(zhuǎn)化為新文件。[0003]圖1顯示了現(xiàn)有技術(shù)中數(shù)據(jù)增量更新的基本流程:在服務(wù)器端存儲著舊版本文件(軟件或者數(shù)據(jù))和新版文件,當某個新版本要被發(fā)布前,服務(wù)器比較新文件和舊文件,并將二者的差異信息表述為增量包的形式,增量包被壓縮后得到增量壓縮包,再通過通信網(wǎng)絡(luò)傳遞給需要更新軟件的設(shè)備,設(shè)備收到增量壓縮包并解壓,按照增量包中的指令和數(shù)據(jù)將舊文件轉(zhuǎn)化為新文件。[0004]圖1所示的數(shù)據(jù)更新流程在實際應(yīng)用中,會存在受限的網(wǎng)絡(luò)帶寬、按流量計算的費用、以及消費電子設(shè)備較小的內(nèi)存和有限的電量等實際限制,而較小的增量壓縮包能夠減少流量費用和下載時間,應(yīng)用增量包時較小的內(nèi)存耗費和較少的CPU時鐘周期能夠減少生成新文件的時間、節(jié)省設(shè)備電量、降低對正在運行的其他應(yīng)用程序的影響,最終提升用戶體驗??梢钥闯觯M電子設(shè)備數(shù)據(jù)增量更新方法的主要評價標準是:增量包、增量壓縮包的大小和應(yīng)用增量包的時間。因此,減小增量包和增量壓縮包的大小,以及加快應(yīng)用增量包的速度是數(shù)據(jù)更新方法中需要重點解決的問題。[0005]在現(xiàn)有技術(shù)中,數(shù)據(jù)增量更新方法主要包括:T.Andrew在文獻《EfficientAlgorithmsforSortingandSynchronization》(AustralianNationalUniversity,1999)提出的RDIFF方法,C.Percival在文獻《Naivedifferencesofexecutablecode》(UniversityofOxford,2003)提出的BSDIFF方法,以及D.Korn等作者在文獻《TheVCDIFFGenericDifferencingandCompressionDataFormat》(RFC3284(ProposedStandard),June.2002)提出的VCDIFF方法。[0006]RDIFF方法主要將舊文件和新文件分成相同大小的連續(xù)多個數(shù)據(jù)塊,計算每個數(shù)據(jù)塊的哈希值,依據(jù)哈希值在新舊文件之間尋找相同的數(shù)據(jù)塊,增量包中包括對舊文件某個數(shù)據(jù)塊的引用,或者是一個完整的新數(shù)據(jù)塊。該方法結(jié)構(gòu)簡單,計算速度快并且適用于解決RDC(RemoteDifferentialCompression)問題,缺點是無法全面采集新舊文件之間所有的相似信息,應(yīng)用該方法的軟件有Rsync和rdiff-backup等。[0007]BSDIFF方法是在新文件和舊文件之間尋找完全相同的數(shù)據(jù)段,接著逐字節(jié)延伸該數(shù)據(jù)段的前綴和后綴,嘗試尋找近似但不完全相同的數(shù)據(jù)段,即近似數(shù)據(jù)段。BSDIFF方法中使用了N.S.Larsson和K.Sadakane提出的后綴數(shù)組排序算法,增量包中指令有ADD、INSERT、SEEK,ADD操作的參數(shù)是近似數(shù)據(jù)段長度和修正量,INSERT操作的參數(shù)是插入段長度和插入內(nèi)容,SEEK操作的參數(shù)是舊文件讀取指針的跳躍跨度。ADD操作的修正量參數(shù)是增量包的主要成分,新舊文件的相似程度與修正量中"〇"的比例成正比,較高的"〇"的比例使得增量壓縮包小于新文件的大小。BSDIFF方法中的增量包較小,但是構(gòu)造增量包和應(yīng)用增量包的計算量較大,因此費時較多。目前BSDIFF方法是應(yīng)用最廣泛的增量更新算法,Bsdiff工具應(yīng)用了BSDIFF方法。[0008]V⑶IFF方法是基于LZ77(Lempel-Ziv77)壓縮算法進行改進,實現(xiàn)增量更新。LZ77壓縮算法主要是基于一個數(shù)據(jù)流中后面的數(shù)據(jù)段與前面的數(shù)據(jù)段相似或者相關(guān)進行數(shù)據(jù)壓縮,借鑒LZ77壓縮算法,VCDIFF方法將舊文件和新文件鏈接成一個數(shù)據(jù)流,應(yīng)用LZ77壓縮算法進行壓縮,截取壓縮流中表達新文件的部分作為增量包。VCDIFF方法的性能介于在RDIFF方法和BSDIFF方法之間,犧牲了部分壓縮率,加快了執(zhí)行的速度。Xdelta是應(yīng)用V⑶IFF方法的軟件之一,并且該軟件還在V⑶IFF基礎(chǔ)上進行了改進,優(yōu)化了其中的指令集,進一步減小了增量壓縮包的大小。[0009]為此,需要提供一種數(shù)據(jù)增量更新方法,與現(xiàn)有技術(shù)相比能夠在減少增量包大小、提高增量包壓縮率和加快客戶端設(shè)備的運行速度等方面都有顯著的性能提高?!?br/>發(fā)明內(nèi)容】[0010]本發(fā)明主要解決的技術(shù)問題是針對現(xiàn)有技術(shù)中數(shù)據(jù)增量更新方法普遍存在增量包較大、壓縮率不高、運行時間較長以及這些特性不能同時較好兼顧的不足,提供一種轉(zhuǎn)化為尋找最短代價路徑的方式構(gòu)造增量包的數(shù)據(jù)增量更新方法。[0011]為解決上述技術(shù)問題,本發(fā)明采用的一個技術(shù)方案是:提供.一種數(shù)據(jù)增量更新方法,該方法包括以下步驟:第一步,構(gòu)造相似信息集合Segment,將新文件數(shù)組New包含的字符與舊文件數(shù)組Old包含的字符進行對比運算,輸出相同的多個字符片段segment(s,t,1),其中,s是該字符片段在該舊文件數(shù)組Old中的位置,t是該字符片段在該新文件數(shù)組New中的位置,1是該字符片段的字節(jié)數(shù)量,得到該相似信息集合Segment為:[0012]Segment={segment(s,t,I)|old[s+i]=new[t+i],i=0,I,2,...,1-1};[0013]第二步,構(gòu)造水平線段圖,將該相似信息集合Segment中的該多個字符片段segment(s,t,1)對應(yīng)轉(zhuǎn)換為該水平線段圖中的多個水平線段Segi(t,s-t),該水平線段Segi(t,s-t)的左端點坐標為(t,s-t),長度為1,i表示該水平線段Segi(t,s-t)在該水平線段圖中的序號;第三步,構(gòu)造路徑圖,將該水平線段圖中的該多個水平線段Segi(t,s-t)對應(yīng)為該路徑圖中的多個節(jié)點Vi,在該多個節(jié)點\之間構(gòu)建節(jié)點邊,并計算每一個該節(jié)點邊的邊代價;第四步,構(gòu)造最小代價路徑,從起始節(jié)點segment(0,0,0)經(jīng)過該路徑圖中的該多個節(jié)點Vi到達終止節(jié)點segment(newSize,0,0)有多條路徑,計算每一條路徑包括的多個該節(jié)點邊的該邊代價之和,找到和值最小的路徑即為最小代價路徑,newSize表示該新文件數(shù)組New中的字節(jié)數(shù);第五步,構(gòu)造增量包,根據(jù)該舊文件數(shù)組Old和該新文件數(shù)組New,采用指令集和數(shù)據(jù)集,從起始節(jié)點沿該最小代價路徑,依次確定相鄰節(jié)點間的指令編碼,由該指令編碼組成該增量包;第六步,應(yīng)用增量包,根據(jù)該舊文件數(shù)組Old,按照該增量包中的該指令編碼字節(jié)逐字節(jié)生成新文件。[0014]在本發(fā)明數(shù)據(jù)增量更新方法另一實施例中,該將新文件數(shù)組New包含的字節(jié)與舊文件數(shù)組Old包含的字節(jié)進行對比運算的方法包括:[0015]首先,對該舊文件數(shù)組Old進行后綴排序,得到該舊文件數(shù)組Old的后綴數(shù)組I;然后,利用該后綴數(shù)組I,在該舊文件數(shù)組Old中尋找與該新文件數(shù)組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]在本發(fā)明數(shù)據(jù)增量更新方法另一實施例中,該構(gòu)造相似信息集合Segment包括進一步對該相似信息集合Segment進行消減,該消減方法包括:第一,若存在segment(s',t',1')eS當前第1頁1 2 3 4