2012-08-22 53 views
1

我有一系列的大型二進制文件,每一個都是通過修改前一個文件生成的。它們存儲在服務器上(服務器只是一個啞文件存儲,我們不能在其上運行程序)。串流,就地二進制修補

爲了節省空間我想將它們存儲爲差異。我們下載文件時出現問題:它們太大以至於客戶端上沒有足夠的磁盤空間來存儲原始文件和差異文件。

是否有一個差異算法,它允許我們將原始文件下載到磁盤,然後應用補丁,因爲它是從服務器流式傳輸的? AIUI,xdelta和rdiff都不能修改原始文件,只能創建一個新的副本(這將花費太多的磁盤空間)。

回答

0

簡而言之,可悲的是沒有。雖然...

到位修補問題是混合插入和參考舊數據。插入需要現有數據要移動到左右才能讓插入足夠的地方,即向後複製文件的末尾(並且在一般情況下它會很慢,並且在最壞的情況下采取文件本身的大小 )。對舊數據的引用需要非常謹慎,以減少最壞情況...

由於所有的限制條件使得客戶端在補丁過程中佔用空間方面具有真正的優勢,補丁可能會遠遠大於xdelta或rdiff會做的。修補過程也會慢得多。與智能服務器

一種可能性是:

  • 構成所有的補丁成一個元補丁
  • 流修補上飛(從而使電線上的重排)原始文件