Dedupe技術(shù)目前主要應(yīng)用于數(shù)據(jù)備份,因此對(duì)數(shù)據(jù)進(jìn)行多次備份后,存在大量重復(fù)數(shù)據(jù),非常適合這種技術(shù)。事實(shí)上,dedupe技術(shù)可以用于很多場(chǎng)合,包括在線數(shù)據(jù)、近線數(shù)據(jù)、離線數(shù)據(jù)存儲(chǔ)系統(tǒng),甚至可以在文件系統(tǒng)、卷管理器、NAS、SAN中實(shí)施。也可以用于網(wǎng)絡(luò)數(shù)據(jù)傳輸,當(dāng)然也可以應(yīng)用于數(shù)據(jù)打包技術(shù)。Dedupe技術(shù)可以幫助眾多應(yīng)用降低數(shù)據(jù)存儲(chǔ)量,節(jié)省網(wǎng)絡(luò)帶寬,提高存儲(chǔ)效率、減小備份窗口,綠色節(jié)能。
4、數(shù)據(jù)同步算法
如Rsync假設(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);赿edupe技術(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ù)塊信息描述、差異編碼、差異編碼信息描述、文件同步。文件切分、差異編碼、文件同步將在后續(xù)部分介紹,這里對(duì)切分?jǐn)?shù)據(jù)塊信息描述和差異編碼信息描述作說明。
切分?jǐn)?shù)據(jù)塊信息的數(shù)據(jù)文件布局由文件頭(chunk_file_header)和數(shù)據(jù)塊描述(chunk_block_entry)實(shí)體集組成,具體定義如下。其中,文件頭定義了文件B的數(shù)據(jù)塊大小、數(shù)據(jù)塊總數(shù)。文件頭后緊隨一組數(shù)據(jù)塊描述實(shí)體,每個(gè)實(shí)體代表一個(gè)數(shù)據(jù)塊,定義了塊長(zhǎng)度、塊在文件B中的偏移、弱校驗(yàn)值和強(qiáng)md5校驗(yàn)值。
view plaincopy to clipboardprint? /* define chunk file header and block entry */ typedef struct _chunk_file_header { uint32_t block_sz; uint32_t block_nr; } chunk_file_header; #define CHUNK_FILE_HEADER_SZ (sizeof(chunk_file_header)) typedef struct _chunk_block_entry { uint64_t offset; uint32_t len; uint8_t md5[16 + 1]; uint8_t csum[10 + 1]; } chunk_block_entry; #define CHUNK_BLOCK_ENTRY_SZ (sizeof(chunk_block_entry)) /* define chunk file header and block entry */ typedef struct _chunk_file_header { uint32_t block_sz; uint32_t block_nr; } chunk_file_header; #define CHUNK_FILE_HEADER_SZ (sizeof(chunk_file_header)) typedef struct _chunk_block_entry { uint64_t offset; uint32_t len; uint8_t md5[16 + 1]; uint8_t csum[10 + 1]; } chunk_block_entry; #define CHUNK_BLOCK_ENTRY_SZ (sizeof(chunk_block_entry))
出處:CSDN
責(zé)任編輯:bluehearts
上一頁(yè) 數(shù)據(jù)同步算法研究 [1] 下一頁(yè) 數(shù)據(jù)同步算法研究 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|