<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          libsync網(wǎng)絡(luò)數(shù)據(jù)同步開發(fā)庫

          聯(lián)合創(chuàng)作 · 2023-09-29 10:01

          libsync是一個(gè)用于網(wǎng)絡(luò)數(shù)據(jù)同步的開發(fā)庫。

          假設(shè)現(xiàn)在有兩臺(tái)計(jì)算機(jī)Alpha和Beta ,計(jì)算機(jī)Alpha能夠訪問A文件,計(jì)算機(jī)Beta能夠訪問B文件,文件A和B非常相似,計(jì)算機(jī)Alpha和Beta通過低速網(wǎng)絡(luò)互聯(lián)。基于dedupe技術(shù)的數(shù)據(jù)同步算法大致流程與Rsync相似,簡(jiǎn)單描述如下:
          1、Beta采用數(shù)據(jù)切分算法,如FSP(fixed-size partition)、CDC(content-defined chuking),將文件B分割成大小相等或不等的數(shù)據(jù)塊;
          2、Beta對(duì)于每一個(gè)數(shù)據(jù)塊,計(jì)算一個(gè)類似rsync弱校驗(yàn)值和md5強(qiáng)校驗(yàn)值,并記錄數(shù)據(jù)塊長(zhǎng)度len和在文件B中的偏移量offset;
          3、Beta將這將數(shù)據(jù)塊信息發(fā)送給Alpha;
          4、Alpha采用同樣的數(shù)據(jù)塊切分技術(shù)將文件A切成大小相等或不等的數(shù)據(jù)塊,并與Beta發(fā)過來的數(shù)據(jù)信息進(jìn)行搜索匹配,生成差異編碼信息;
          5、Alpha將差異編碼信息發(fā)送給Beta,并同時(shí)發(fā)送重構(gòu)文件A的指令;
          6、Beta根據(jù)差異編碼信息和文件B重構(gòu)文件A。
          上面算法描述中,有幾個(gè)關(guān)鍵問題需要解決,即文件切分、切分?jǐn)?shù)據(jù)塊信息描述、差異編碼、差異編碼信息描述、文件同步。

          libsync函數(shù)庫由提供三個(gè)API,原型描述如下:
          1、int file_chunk(char src_filename, char chunk_filename, int chunk_algo)
          功能:對(duì)件進(jìn)行切分生成分塊描述文件。
          參數(shù):src_filename為源文件,chunk_filename為生成的塊信息描述文件,chunk_algo為文件切分算法,目前支持FSP、CDC、SB三種。

          2、int file_delta(char src_filename, char chunk_filename, char delta_filename, int chunk_algo)
          功能:使用生成的塊描述信息對(duì)文件進(jìn)行差異編碼。
          參數(shù):src_filename為待編碼文件,chunk_filename為通過函數(shù)file_chunk生成的塊描述文件,chunk_algo為文件切分算法。

          3、int file_sync(char src_filename, char delta_filename)
          功能:使用差異編碼文件將源文件同步至目標(biāo)文件。
          參數(shù):src_filename為基本文件,delta_filename為通過函數(shù)file_delta生成的差異編碼文件。

          數(shù)據(jù)同步有PULL和PUSH兩種應(yīng)用模式,PULL是將遠(yuǎn)程數(shù)據(jù)同步到本地,而PUSH是將本地?cái)?shù)據(jù)同步到遠(yuǎn)程。對(duì)應(yīng)到同步算法,主要區(qū)別在于數(shù)據(jù)分塊和差異編碼位置不同。PULL和PUSH同步模式步驟分別如下所述。
          PULL同步模式流程:
          1、本地對(duì)文件A進(jìn)行數(shù)據(jù)切分,生成數(shù)據(jù)塊描述文件chunk;
          2、上傳chunk文件至遠(yuǎn)程服務(wù)器;
          3、遠(yuǎn)程服務(wù)器對(duì)文件B進(jìn)行差異編碼,生成差異編碼文件delta;
          4、下載delta文件至本地;
          5、本地同步文件A至文件B,相當(dāng)于下載文件B到本地文件A。

          PUSH同步模式流程:
          1、遠(yuǎn)程服務(wù)器對(duì)文件B進(jìn)行數(shù)據(jù)切分,生成數(shù)據(jù)塊描述文件chunk;
          2、下載chunk文件至本地;
          3、本地對(duì)文件A進(jìn)行差異編碼,生成差異編碼文件delta;
          4、上傳delta文件至遠(yuǎn)程服務(wù)器;
          5、遠(yuǎn)程同步文件B到A,相當(dāng)于上傳文件A到遠(yuǎn)程文件B。

          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91精品人妻少妇无码影院 | 国产一级A片免费在线观看 | 91麻豆国产福利在线观看 | 无码在线观看一区二区三区 | 欧美操逼操逼操 |