一種增量同步的方法、裝置及系統(tǒng)的制作方法
【專利摘要】本申請公開了一種增量同步的方法、裝置及系統(tǒng),用以解決現(xiàn)有技術中的增量同步方法應用于分布式存儲場景中會使服務器壓力過大的問題。該方法客戶端在檢測到自身存在新增的文件時,將該文件分割成若干個文件塊,確定各文件塊的弱校驗值和強校驗值,將確定的弱校驗值和強校驗值記錄在相應的文件塊對應的文件塊結構表中,將各文件塊的文件塊結構表作為該文件的文件結構列表發(fā)送給服務器保存,并將各文件塊發(fā)送給服務器存儲。通過上述方法,在后續(xù)的增量同步過程中,如果服務器中保存的該文件是舊文件,則服務器無需計算各文件塊的弱校驗值和強校驗值,直接從各文件塊結構表中提取相應各文件塊的弱校驗值和強校驗值即可,因此減輕了服務器的負擔。
【專利說明】一種增量同步的方法、裝置及系統(tǒng)
【技術領域】
[0001]本申請涉及通信【技術領域】,尤其涉及一種增量同步的方法、裝置及系統(tǒng)。
【背景技術】
[0002]目前,在許多應用場景中,都需要對不同設備中的文件進行同步。例如,當設備A中的某個文件進行了版本更新時,就需要同步設備B中相應的文件,使設備B中相應的文件也進行更新。
[0003]在現(xiàn)有技術中,一般采用rsync算法進行文件的同步,由于rsync算法能夠有效的計算出一個文件比另·一個文件更新的部分,因此在文件同步時,只要傳輸計算出的更新的部分即可完成同步,該過程即為增量同步。
[0004]假設設備A中保存了文件a,設備B中保存了文件b,文件a較文件b更新,則需要將設備B中的文件b升級為文件a,此時采用rsync算法進行增量同步的過程如圖1所示。圖1為現(xiàn)有技術中采用rsync算法進行增量同步的過程,具體包括以下步驟:
[0005]SlOl:設備B將·保存的文件b分割成連續(xù)、不重疊的文件塊,除最后一個文件塊之夕卜,其余文件塊的長度為固定長度S,并且最后一個文件塊的長度不大于固定長度S。
[0006]分割的各文件塊如表I所示:
[0007]
【權利要求】
1.一種增量同步的方法,其特征在于,包括: 客戶端在檢測到自身存在新增的文件時,將所述文件分割成連續(xù)、不重疊的文件塊,除最后一個文件塊之外,其余文件塊的長度為固定長度,并且最后一個文件塊的長度不大于所述固定長度; 所述客戶端分別針對分割的每個文件塊,確定該文件塊的弱校驗值和強校驗值,并生成該文件塊對應的文件塊結構表,生成的文件塊結構表中記錄了該文件塊的弱校驗值和強校驗值; 所述客戶端將各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器保存,并將各文件塊發(fā)送給服務器進行存儲。
2.如權利要求1所述的方法,其特征在于,所述客戶端將各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器保存之前,所述方法還包括: 為分割的每個文件塊分配文件塊標識; 針對每個文件塊,根據(jù)分割的各文件塊在所述文件中的排序順序,確定與該文件塊相鄰且排在該文件塊之前的前繼文件塊的文件塊標識,確定與文件塊相鄰且排在該文件塊之后的后繼文件塊的文件塊標識,將該文件塊的文件塊標識、確定的前繼文件塊的文件塊標識、后繼文件塊的文件塊標識記錄在該文件塊對應的文件塊結構表中。
3.如權利要求1或2所述的方法,其特征在于,所述客戶端將各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器保存,具體包括: 按照每個文件塊在所述文件中的排序順序,將每個文件塊對應的文件塊結構表進行排序; 將排序后的各文件塊結構表作為 所述文件的文件結構列表發(fā)送給服務器保存。
4.如權利要求3所述的方法,其特征在于,將排序后的各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器保存之前,所述方法還包括: 將每個文件塊結構表中的上傳標記設置為上傳; 將各文件塊發(fā)送給服務器進行存儲,具體包括: 將每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲。
5.如權利要求4所述的方法,其特征在于,將每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲之前,所述方法還包括: 所述客戶端接收所述服務器返回的調(diào)整后的文件結構列表,其中,所述服務器調(diào)整文件結構列表具體包括:針對接收到的所述文件結構列表中的每個文件塊結構表,根據(jù)該文件塊結構表中記錄的強校驗值,判斷所述服務器自身是否已經(jīng)保存了相同強校驗值的文件塊,當判斷結果為是時,將該文件塊結構表中的上傳標記調(diào)整為不上傳; 將每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲,具體包括: 根據(jù)所述服務器返回的調(diào)整后的文件結構列表中每個文件塊結構表的文件塊上傳標記,將上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲。
6.如權利要求4所述的方法,其特征在于,將每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲之前,所述方法還包括: 確定所述文件的文件校驗值并發(fā)送給所述服務器;接收所述服務器返回的調(diào)整后的文件結構列表,其中,所述服務器調(diào)整文件結構列表具體包括:根據(jù)所述文件的文件校驗值,判斷所述服務器自身是否已經(jīng)保存了相同文件校驗值的文件,若是,則提取保存的具有所述文件校驗值的文件的文件結構列表,將提取的文件結構列表中的每個文件塊結構表中包含的上傳標記調(diào)整為不上傳,并作為調(diào)整后的文件結構列表,否則,針對所述客戶端發(fā)送的文件結構列表中的每個文件塊結構表,根據(jù)該文件塊結構表中包含的強校驗值,判斷所述服務器自身是否已經(jīng)保存了相同強校驗值的文件塊,當判斷結果為是時,將該文件塊結構表中包含的上傳標記調(diào)整為不上傳; 將每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲,具體包括: 根據(jù)所述服務器返回的調(diào)整后的文件結構列表中每個文件塊結構表的上傳標記,將上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲。
7.如權利要求3所述的方法,其特征在于,將各文件塊發(fā)送給服務器進行存儲之后,所述方法還包括: 所述客戶端在檢 測到自身保存的所述文件被更新時,將自身保存的更新后的文件作為更新文件,獲取服務器中保存的所述更新文件對應的原文件的文件結構列表,提取所述原文件的文件結構列表中的每個文件塊結構表; 將所述更新文件的第一個字節(jié)確定為起點,確定從所述起點開始的固定長度的文件塊為待匹配塊,確定所述待匹配塊的弱校驗值和強校驗值; 判斷提取的每個文件塊結構表中是否存在至少一個與所述待匹配塊匹配的文件塊結構表,其中,與所述待匹配塊匹配的文件塊結構表為:記錄的弱校驗值與所述待匹配塊的弱校驗值匹配,且,記錄的強校驗值與所述待匹配塊的強校驗值匹配的文件塊結構表; 若是,則生成所述待匹配塊的文件塊結構表,將生成的文件塊結構表中的上傳標記設置為不上傳,并插入到所述更新文件的文件結構列表中的末尾,將所述更新文件中所述待匹配塊的下一個字節(jié)重新確定為起點; 否則,確定當前所述更新文件的文件結構列表中排在末尾的文件塊結構表對應的文件塊的最后一個字節(jié),判斷從確定的最后一個字節(jié)的下一個字節(jié)到所述起點的長度是否達到所述固定長度,若達到,則生成確定的最后一個字節(jié)的下一個字節(jié)到所述起點的文件塊的文件塊結構表,將生成的文件塊結構表中的上傳標記設置為上傳,并插入到所述更新文件的文件結構列表中的末尾,將所述更新文件中所述起點的下一個字節(jié)重新確定為起點,若未達到,則將所述更新文件中所述起點的下一個字節(jié)重新確定為起點; 將從重新確定的起點開始的固定長度的文件塊重新確定為待匹配塊,繼續(xù)判斷提取的每個文件塊結構表中是否存在至少一個與重新確定的待匹配塊匹配的文件塊結構表,直至將所述更新文件中所有文件塊的文件塊結構表插入到所述更新文件的文件結構列表中為止; 將所述更新文件的文件結構列表發(fā)送給所述服務器保存,以更新所述服務器中保存的所述原文件的文件結構列表,并將所述更新文件的文件結構列表中每個上傳標記為上傳的文件塊結構表對應的文件塊發(fā)送給服務器進行存儲,完成所述更新文件的同步。
8.如權利要求7所述的方法,其特征在于,當將所述更新文件的第一個字節(jié)確定為起點,確定從所述起點開始的固定長度的文件塊為待匹配塊時,以及,當將所述更新文件中所述待匹配塊的下一個字節(jié)重新確定為起點,將從重新確定的起點開始的固定長度的文件塊重新確定為待匹配塊時,確定待匹配塊的弱校驗值具體包括:采用公式
9.如權利要求7所述的方法,其特征在于,生成所述待匹配塊的文件塊結構表,具體包括: 為所述待匹配塊分配文件塊標識; 根據(jù)當前所述更新文件的文件結構列表中排在末尾的文件塊結構表,確定排在末尾的文件塊結構表對應的文件塊的文件塊標識,作為所述待匹配塊的前繼文件塊的文件塊標識; 將確定所述待匹配塊時所基于的起點作為所述待匹配塊的起始位置; 生成包含所述待匹配塊的文件塊標識、前繼文件塊的文件塊標識、起始位置、長度、弱校驗值和強校驗值的文件塊結構表; 將生成的所述待匹配塊的文件塊結構表插入到所述更新文件的文件結構列表中的末尾之后,所述方法還包括: 將當前所述更新文件的文件結構列表中所述待匹配塊的文件塊結構表的前一個文件塊結構表中的后繼文件塊的文件塊標識修改為所述待匹配塊的文件塊標識。
10.如權利要求9所述的方法,其特征在于,針對確定的待匹配塊,當判斷存在至少一個與所述待匹配塊匹配的文件塊結構表時,在將生成的待匹配塊的文件塊結構表插入到所述更新文件的文件結構列表中的末尾之后,將所述更新文件中所述待匹配塊的下一個字節(jié)重新確定為起點之前,所述方法還包括: 根據(jù)當前所述更新文件的文件結構列表中所述待匹配塊的文件塊結構表的前一個文件塊結構表,確定所述前一個文件塊結構表對應的文件塊; 如果所述待匹配塊與所述前一個文件塊結構表對應的文件塊之間存在一個長度小于所述固定長度的文件塊,則確定該長度小于所述固定長度的文件塊的弱校驗值和強校驗值; 判斷提取的每個文件塊結構表中是否存在至少一個與該長度小于所述固定長度的文件塊匹配的文件塊結構表,若是,則生成該長度小于所述固定長度的文件塊的文件塊結構表,將生成的文件塊結構表中的上傳標記設置為不上傳,并插入到所述更新文件的文件結構列表中所述前一個文件塊結構表和所述待匹配塊的文件塊結構表之間,否則,生成該長度小于所述固定長度的文件塊的文件塊結構表,將生成的文件塊結構表中的上傳標記設置為上傳,并插入到所述更新文件的文件結構列表中所述前一個文件塊結構表和所述待匹配塊的文件塊結構表之間。
11.如權利要求10所述的方法,其特征在于,生成該長度小于所述固定長度的文件塊的文件塊結構表,具體包括: 為該長度小于所述固定長度的文件塊分配文件塊標識; 確定所述前一個文件塊結構表對應的文件塊的文件塊標識,作為該長度小于所述固定長度的文件塊的前繼文件塊的文件塊標識; 確定所述待匹配塊的文件塊標識,作為該長度小于所述固定長度的文件塊的后繼文件塊的文件塊標識;` 將所述前一個文件塊結構表對應的文件塊的最后一個字節(jié)的下一個字節(jié)作為該長度小于所述固定長度的文件塊的起始位置; 生成包含該長度小于所述固定長度的文件塊的文件塊標識、前繼文件塊的文件塊標識、后繼文件塊的文件塊標識、起始位置、長度、弱校驗值和強校驗值的文件塊結構表; 將生成的該長度小于所述固定長度的文件塊的文件塊結構表插入到所述更新文件的文件結構列表中所述前一個文件塊結構表和所述待匹配塊的文件塊結構表之間后,所述方法還包括: 將所述前一個文件塊結構表中的后繼文件塊的文件塊標識修改為該長度小于所述固定長度的文件塊的文件塊標識,將所述待匹配塊的文件塊結構表中的前繼文件塊的文件塊標識修改為該長度小于所述固定長度的文件塊的文件塊標識。
12.如權利要求9所述的方法,其特征在于,當判斷提取的每個文件塊結構表中存在至少一個與所述待匹配塊匹配的文件塊結構表時,生成所述待匹配塊的文件塊結構表,具體包括: 按照該至少一個與所述待匹配塊匹配的文件塊結構表在所述原文件的文件結構列表中的排序順序,在至少一個與所述待匹配塊匹配的文件塊結構表中,依次查找未建立匹配關系的文件塊結構表,建立查找到的第一個文件塊結構表與所述待匹配塊的匹配關系; 當與所述待匹配塊具有匹配關系的文件塊結構表中包含的前繼文件塊的文件塊標識,與生成的所述待匹配塊的文件塊結構表中的前繼文件塊的文件塊標識相同時,將生成的所述待匹配塊的文件塊結構表的操作狀態(tài)設置為完成狀態(tài); 當與所述待匹配塊具有匹配關系的文件塊結構表中包含的前繼文件塊的文件塊標識,與生成的所述待匹配塊的文件塊結構表中的前繼文件塊的文件塊標識不同時,將生成的所述待匹配塊的文件塊結構表的操作狀態(tài)設置為移動狀態(tài); 當在該至少一個與所述待匹配塊匹配的文件塊結構表中未查找到未建立匹配關系的文件塊結構表時,將生成的所述待匹配塊的文件塊結構表的操作狀態(tài)設置為插入狀態(tài);當判斷提取的每個文件塊結構表中不存在至少一個與所述待匹配塊匹配的文件塊結構表時,生成確定的最后一個字節(jié)的下一個字節(jié)到所述起點的文件塊的文件塊結構表,具體包括: 將生成的文件塊結構表的操作狀態(tài)設置為插入狀態(tài)。
13.如權利要求12所述的方法,其特征在于,將所述更新文件的文件結構列表發(fā)送給所述服務器保存之前,所述方法還包括: 在提取的所述原文件的文件結構列表中的每個文件塊結構表中,確定未建立匹配關系的文件塊結構表; 將未建立匹配關系的 文件塊結構表中的操作狀態(tài)設置為刪除狀態(tài); 將所述更新文件的文件結構列表發(fā)送給所述服務器保存,以更新所述服務器中保存的所述原文件的文件結構列表 ,具體包括: 將所述更新文件的文件結構列表以及所述原文件的文件結構列表中操作狀態(tài)為刪除狀態(tài)的文件塊結構表發(fā)送給所述服務器,使服務器根據(jù)接收到的各文件塊結構表的操作狀態(tài)更新所述原文件的文件結 構列表,其中,所述服務器針對操作狀態(tài)為完成狀態(tài)的文件塊結構表,對所述原文件的相應文件塊結構表不做任何操作,針對操作狀態(tài)為插入狀態(tài)的文件塊結構表,將該操作狀態(tài)為插入狀態(tài)的文件塊結構表插入到所述原文件的文件結構列表中,針對操作狀態(tài)為移動狀態(tài)的文件塊結構表,調(diào)整所述原文件的相應文件塊結構表在所述原文件的文件結構列表中的位置,針對操作狀態(tài)為刪除狀態(tài)的文件塊結構表,刪除所述原文件的文件結構列表中相應的文件塊結構表。
14.如權利要求3所述的方法,其特征在于,將各文件塊發(fā)送給服務器進行存儲之后,所述方法還包括: 客戶端在檢測到服務器中保存的所述文件被更新時,將自身保存的所述文件作為原文件,獲取服務器中保存的所述原文件對應的更新文件的文件結構列表,并提取所述客戶端自身保存的所述原文件的文件結構列表; 將提取的所述原文件的文件結構列表中的每個文件塊結構表作為每個待匹配表,針對每個待匹配表,在所述更新文件的文件結構列表中查找與該待匹配表匹配的文件塊結構表,其中,與該待匹配表匹配的文件塊結構表為:記錄的弱校驗值與該待匹配表記錄的弱校驗值匹配,且,記錄的強校驗值與該待匹配表記錄的強校驗值匹配的文件塊結構表; 將查找到的與該待匹配表匹配的文件塊結構表標記為已匹配,并將與該待匹配表對應的所述原文件的文件塊寫入到新建存儲區(qū)域中; 將所述更新文件的文件結構列表中未標記為已匹配的文件塊結構表返回所述服務器,并接收所述服務器發(fā)送的各未標記為已匹配的文件塊結構表對應的文件塊,根據(jù)所述新建存儲區(qū)域中寫入的文件塊和接收到的服務器發(fā)送的文件塊更新所述原文件。
15.如權利要求14所述的方法,其特征在于,在所述更新文件的文件結構列表中查找到與該待匹配表匹配的文件塊結構表,具體包括: 在所述更新文件的文件結構列表中查找到記錄的弱校驗值與該待匹配表記錄的弱校驗值匹配,且,記錄的強校驗值與該待匹配表記錄的強校驗值匹配,且,未標記為已匹配的文件塊結構表。
16.如權利要求14所述的方法,其特征在于,將所述更新文件的文件結構列表中未標記為已匹配的文件塊結構表返回所述服務器之前,所述方法還包括: 確定所述原文件中除了寫入到所述新建存儲區(qū)域中的文件塊之外的各文件塊,將確定的各文件塊按照所述各文件塊在所述原文件中的排序順序進行前后拼接,得到拼接文件;將所述拼接文件的第一個字節(jié)確定為起點,確定從所述起點開始的固定長度的文件塊為待匹配塊,確定所述待匹配塊的弱校驗值和強校驗值; 判斷所述更新文件的文件結構列表中是否存在至少一個與所述待匹配塊匹配的文件塊結構表,其中,與所述待匹配塊匹配的文件塊結構表為:記錄的弱校驗值與所述待匹配塊的弱校驗值匹配,且,記錄的強校驗值與所述待匹配塊的強校驗值匹配的文件塊結構表;若是,則將所述待匹配塊寫入到新建存儲區(qū)域中,并將與該待匹配塊匹配的文件塊結構表標記為已匹配,將所述拼接文件中所述待匹配塊的下一個字節(jié)重新確定為起點; 否則,將所述拼接文件中所述起點的下一個字節(jié)重新確定為起點;· 將從重新確定的起點開始的固定長度的文件塊重新確定為待匹配塊,并繼續(xù)判斷所述更新文件的文件結構列表中是否存在至少一個與重新確定的待匹配塊匹配的文件塊結構表,直至得到所述拼接文件的最后一個字節(jié)所在的待匹配塊的判斷結果并執(zhí)行相應操作為止。
17.如權利要求16所述的方法,其特征在于,針對當前確定的待匹配塊,當判斷存在至少一個與當前確定的待匹配塊匹配的文件塊結構表時,將所述拼接文件中當前確定的待匹配塊的下一個字節(jié)重新確定為起點之前,所述方法還包括: 確定所述拼接文件中上一個被寫入到所述新建存儲區(qū)域中的待匹配塊; 如果所述拼接文件中所述當前確定的待匹配塊與上一個被寫入到所述新建存儲區(qū)域中的待匹配塊之間存在一個長度小于所述固定長度的文件塊,則確定該長度小于所述固定長度的文件塊的弱校驗值和強校驗值; 當所述更新文件的文件結構列表中存在至少一個與該長度小于所述固定長度的文件塊匹配的文件塊結構表時,將該長度小于所述固定長度的文件塊寫入到新建存儲區(qū)域中,并將與該長度小于所述固定長度的文件塊匹配的文件塊結構表標記為已匹配。
18.如權利要求16所述的方法,其特征在于,確定所述更新文件的文件結構列表中存在至少一個與所述待匹配塊匹配的文件結構表,具體包括: 確定所述更新文件的文件結構列表中存在至少一個記錄的弱校驗值與該待匹配塊的弱校驗值匹配,且,記錄的強校驗值與該待匹配塊的強校驗值匹配,且,未標記為已匹配的文件塊結構表。
19.如權利要求17所述的方法,其特征在于,將與該待匹配表對應的所述原文件的文件塊寫入到新建存儲區(qū)域中,具體包括: 根據(jù)與該待匹配表匹配的文件塊結構表在所述更新文件的文件結構列表中的位置,將與該待匹配表對應的所述原文件的文件塊寫入到新建存儲區(qū)域中的相應位置上; 將所述待匹配塊寫入到新建存儲區(qū)域中,具體包括: 根據(jù)與所述待匹配塊匹配的文件塊結構表在所述更新文件的文件結構列表中的位置,將所述待匹配塊寫入到新建存儲區(qū)域中的相應位置上; 將該長度小于所述固定長度的文件塊寫入到新建存儲區(qū)域中,具體包括: 根據(jù)與該長度小于所述固定長度的文件塊匹配的文件塊結構表在所述更新文件的文件結構列表中的位置,將該長度小于所述固定長度的文件塊寫入到新建存儲區(qū)域中的相應位置上; 根據(jù)所述新建存儲區(qū)域中寫入的文件塊和接收到的服務器發(fā)送的文件塊更新所述原文件,具體包括: 針對接收到的服務器發(fā)送的文件塊,根據(jù)服務器發(fā)送的文件塊對應的文件塊結構表在所述更新文件的文件結構列表中的位置,將服務器發(fā)送的文件塊寫入到所述新建存儲區(qū)域中的相應位置上; 將所述新建存儲區(qū)域中各文件塊構成的文件作為更新文件保存,刪除所述原文件,并保存獲取到的所述更新文件的文件結構列表。
20.一種增量同步的裝置,其特征在于,包括: 分割模塊,用于在檢測到自身存在新增的文件時,將所述文件分割成連續(xù)、不重疊的文件塊,除最后一個文件塊之外,其余文件塊的長度為固定長度,并且最后一個文件塊的長度不大于所述固定長度; 第一生成模塊,用于分 別針對分割的每個文件塊,確定該文件塊的弱校驗值和強校驗值,并生成該文件塊對應的文件塊結構表,生成的文件塊結構表中記錄了該文件塊的弱校驗值和強校驗值; 發(fā)送模塊,用于將各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器保存,并將各文件塊發(fā)送給服務器進行存儲。
21.一種增量同步的系統(tǒng),其特征在于,包括: 客戶端,用于在檢測到自身存在新增的文件時,將所述文件分割成連續(xù)、不重疊的文件塊,除最后一個文件塊之外,其余文件塊的長度為固定長度,并且最后一個文件塊的長度不大于所述固定長度;分別針對分割的每個文件塊,確定該文件塊的弱校驗值和強校驗值,并生成該文件塊對應的文件塊結構表,生成的文件塊結構表中記錄了該文件塊的弱校驗值和強校驗值;將各文件塊結構表作為所述文件的文件結構列表發(fā)送給服務器,并將各文件塊發(fā)送給服務器; 服務器,用于保存接收到的所述文件結構列表,存儲接收到的各文件塊。
【文檔編號】H04L29/08GK103428242SQ201210157295
【公開日】2013年12月4日 申請日期:2012年5月18日 優(yōu)先權日:2012年5月18日
【發(fā)明者】王含章, 翁磊, 曹高挺 申請人:阿里巴巴集團控股有限公司