本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)恢復(fù)的方法、存儲(chǔ)的方法、相應(yīng)的裝置及系統(tǒng)。
背景技術(shù):
在大容量分布存儲(chǔ)系統(tǒng)中,為提高數(shù)據(jù)存儲(chǔ)的可靠性,可以采用多副本方案,即把磁盤里面的數(shù)據(jù)復(fù)制到多個(gè)副本磁盤中,當(dāng)其中任意一個(gè)磁盤失效時(shí),從其他任意一個(gè)存活的磁盤中把數(shù)據(jù)讀取出來(lái)放入新磁盤中即完成數(shù)據(jù)恢復(fù),這種技術(shù)實(shí)現(xiàn)簡(jiǎn)單,恢復(fù)耗時(shí)最少,但存儲(chǔ)開(kāi)銷很大。
為了解決多副本方案存儲(chǔ)開(kāi)銷大的問(wèn)題,出現(xiàn)了糾刪碼(Reed-Solomon Code,RS)技術(shù),例如:RS(10,4),即對(duì)10個(gè)磁盤的數(shù)據(jù)進(jìn)行編碼,產(chǎn)生的編碼結(jié)果存放在4個(gè)冗余磁盤里面,存儲(chǔ)開(kāi)銷為(10+4)/10=1.4倍,存儲(chǔ)開(kāi)銷比多副本方案的明顯減少,但是當(dāng)一個(gè)磁盤失效時(shí),需要從10個(gè)磁盤讀取數(shù)據(jù)進(jìn)行解碼,才能實(shí)現(xiàn)數(shù)據(jù)的恢復(fù)。而多副本方案只需要從1個(gè)磁盤讀數(shù)據(jù)即完成恢復(fù),相比之下網(wǎng)絡(luò)帶寬開(kāi)銷增加了10倍,網(wǎng)絡(luò)帶寬開(kāi)銷大則是RS技術(shù)的缺點(diǎn)。
由此可見(jiàn),現(xiàn)有技術(shù)中的分布式存儲(chǔ)方案,要么存儲(chǔ)開(kāi)銷大,要么數(shù)據(jù)恢復(fù)時(shí)網(wǎng)絡(luò)開(kāi)銷大。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)中數(shù)據(jù)分布式存儲(chǔ)系統(tǒng)中數(shù)據(jù)恢復(fù)時(shí)網(wǎng)絡(luò)開(kāi)銷大的問(wèn)題,本發(fā)明實(shí)施例提供一種數(shù)據(jù)恢復(fù)的方法,可以在低存儲(chǔ)開(kāi)銷的前提下,降低數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。本發(fā)明實(shí)施例還提供了相應(yīng)的數(shù)據(jù)存儲(chǔ)的方法、相應(yīng)的裝置及系統(tǒng)。
本發(fā)明第一方面提供一種數(shù)據(jù)恢復(fù)的方法,所述方法應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多 個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述方法包括:
所述數(shù)據(jù)處理裝置接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí);
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)文件的標(biāo)識(shí)未查找到所述目標(biāo)文件,確定所述目標(biāo)文件塊丟失;
所述數(shù)據(jù)處理裝置從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),并根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和所述目標(biāo)文件的標(biāo)識(shí)獲取所述恢復(fù)依賴數(shù)據(jù)塊,所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件;
所述數(shù)據(jù)處理裝置根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。
結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊,包括:
所述數(shù)據(jù)處理裝置根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
所述數(shù)據(jù)處理裝置根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
結(jié)合第一方面第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),包括:
所述數(shù)據(jù)處理裝置從第一編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述 第一字節(jié)所需的依賴字節(jié),從第一編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼,所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的編碼參數(shù),所述第一編碼結(jié)果為采用所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的依賴字節(jié)和所述第一字節(jié)進(jìn)行編碼所得到的結(jié)果;
所述數(shù)據(jù)處理裝置根據(jù)恢復(fù)所述第一字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第一字節(jié)。
結(jié)合第一方面第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),包括:
所述數(shù)據(jù)處理裝置從第二編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第二字節(jié)所需的依賴字節(jié),從第二編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼,所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的編碼參數(shù),所述第二編碼結(jié)果為采用所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的依賴字節(jié)和所述第二字節(jié)進(jìn)行編碼所得到的結(jié)果;
所述數(shù)據(jù)處理裝置根據(jù)恢復(fù)所述第二字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第二字節(jié)。
本發(fā)明第二方面提供一種數(shù)據(jù)存儲(chǔ)的方法,所述方法應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述方法包括:
所述數(shù)據(jù)處理裝置接收所述命名節(jié)點(diǎn)發(fā)送的多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí),所述多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)為已存儲(chǔ)了所述目標(biāo)文件的不同文件塊的第一存儲(chǔ)節(jié)點(diǎn);
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼,所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
所述數(shù)據(jù)處理裝置將所述第一校驗(yàn)碼和所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼,包括:
所述數(shù)據(jù)處理裝置從第一編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第一編碼參數(shù)所指示的字節(jié),所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
所述數(shù)據(jù)處理裝置根據(jù)所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第一校驗(yàn)碼。
結(jié)合第二方面或第二方面第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,包括:
所述數(shù)據(jù)處理裝置從第二編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第二編碼參數(shù)所指示的字節(jié),所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
所述數(shù)據(jù)處理裝置根據(jù)所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第二校驗(yàn)碼。
結(jié)合第二方面或第二方面第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼之前,所述方法還包括:
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的數(shù)量和所述命名節(jié)點(diǎn)所指定的校驗(yàn)節(jié)點(diǎn)的數(shù)量,確定所述部分字節(jié)編碼函數(shù)中第一參數(shù)的數(shù)量和緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)中的部分字節(jié)編碼函數(shù)所包含的相同第一參數(shù)的個(gè)數(shù),所述緊鄰的 兩個(gè)校驗(yàn)節(jié)點(diǎn)所包含的部分字節(jié)編碼函數(shù)中第一參數(shù)的重疊個(gè)數(shù)最多。
本發(fā)明第三方面提供一種數(shù)據(jù)處理裝置,應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括所述數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述數(shù)據(jù)處理裝置包括:
接收模塊,用于接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí);
確定模塊,用于根據(jù)所述接收模塊接收的所述目標(biāo)文件的標(biāo)識(shí)未查找到所述目標(biāo)文件,確定所述目標(biāo)文件塊丟失;
獲取模塊,用于在所述確定模塊確定所述目標(biāo)文件丟失后,從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),并根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和所述目標(biāo)文件的標(biāo)識(shí)獲取所述恢復(fù)依賴數(shù)據(jù)塊,所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件;
恢復(fù)模塊,用于根據(jù)所述獲取模塊獲取的所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。
結(jié)合第三方面,在第一種可能的實(shí)現(xiàn)方式中,所述恢復(fù)模塊包括:
第一恢復(fù)單元,用于根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
第二恢復(fù)單元,用于根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
結(jié)合第三方面第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,
所述第一恢復(fù)單元,具體用于從第一編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第一字節(jié)所需的依賴字節(jié),從第一編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼,所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的編碼參數(shù),所述第一編碼結(jié)果為采用所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的依賴字節(jié)和所述第一字節(jié)進(jìn)行編碼所得到的結(jié)果;根據(jù)恢復(fù)所述第一字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第一字節(jié)。
結(jié)合第三方面第一種或第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,
所述第二恢復(fù)單元,具體用于從第二編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第二字節(jié)所需的依賴字節(jié),從第二編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼,所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的編碼參數(shù),所述第二編碼結(jié)果為采用所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的依賴字節(jié)和所述第二字節(jié)進(jìn)行編碼所得到的結(jié)果;根據(jù)恢復(fù)所述第二字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第二字節(jié)。
本發(fā)明第四方面提供一種數(shù)據(jù)處理裝置,應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述數(shù)據(jù)處理裝置包括:
接收模塊,用于接收所述命名節(jié)點(diǎn)發(fā)送的多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí),所述多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)為已存儲(chǔ)了所述目標(biāo)文件的不同文件塊的第一存儲(chǔ)節(jié)點(diǎn);
第一編碼模塊,用于根據(jù)所述接收模塊接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn) 碼,所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
第二編碼模塊,用于根據(jù)所述接收模塊接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
存儲(chǔ)調(diào)度模塊,用于將所述第一編碼模塊編碼得到的所述第一校驗(yàn)碼和所述第二編碼模塊編碼得到的所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
結(jié)合第四方面,在第一種可能的實(shí)現(xiàn)方式中,
所述第一編碼模塊,具體用于從第一編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第一編碼參數(shù)所指示的字節(jié),所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);根據(jù)所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第一校驗(yàn)碼。
結(jié)合第四方面或第四方面第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,
所述第二編碼模塊,具體用于從第二編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第二編碼參數(shù)所指示的字節(jié),所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);根據(jù)所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第二校驗(yàn)碼。
結(jié)合第四方面或第四方面第一種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,
所述數(shù)據(jù)處理裝置還包括:
確定模塊,用于根據(jù)所述接收模塊接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的數(shù)量和所述命名節(jié)點(diǎn)所指定的校驗(yàn)節(jié)點(diǎn)的數(shù)量,確定所述部分字節(jié)編碼函數(shù)中第一參數(shù)的數(shù)量和緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)中的部分字節(jié)編碼函數(shù)所包含的相同第一參數(shù)的個(gè)數(shù),所述緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)所包含的部分字節(jié)編碼函數(shù)中第一參數(shù)的重疊個(gè)數(shù)最多。
本發(fā)明第五方面提供一種分布式存儲(chǔ)系統(tǒng),包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括第一數(shù)據(jù)處理裝置,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括第二數(shù)據(jù)處理裝置,每個(gè)第一數(shù)據(jù)處理裝置和每個(gè)第二數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接;
所述第一數(shù)據(jù)處理裝置為上述第三方面或第三方面任一實(shí)現(xiàn)方式所述的數(shù)據(jù)處理裝置;
所述第二數(shù)據(jù)處理裝置為上述第四方面或第四方面任一實(shí)現(xiàn)方式所述的數(shù)據(jù)處理裝置。
本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法,應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述方法包括:所述數(shù)據(jù)處理裝置接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí);所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)文件的標(biāo)識(shí)未查找到所述目標(biāo)文件,確定所述目標(biāo)文件塊丟失;所述數(shù)據(jù)處理裝置從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件;所述數(shù)據(jù)處理裝置根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。與現(xiàn)有技術(shù)中數(shù)據(jù)無(wú)法同時(shí)兼顧數(shù)據(jù)存儲(chǔ)開(kāi)銷和數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法,校驗(yàn)碼塊是通過(guò)部分字節(jié)編碼和全字節(jié)編碼結(jié)合得到的,降低了存儲(chǔ)開(kāi)銷,數(shù)據(jù)恢復(fù)時(shí)目標(biāo)文件塊中的一部分只需要依賴部分依賴文件塊就可以得到降低了數(shù)據(jù)恢復(fù)時(shí)的 網(wǎng)絡(luò)開(kāi)銷。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例中分布式存儲(chǔ)系統(tǒng)的一實(shí)施例示意圖;
圖2是本發(fā)明實(shí)施例中分布式存儲(chǔ)系統(tǒng)的另一實(shí)施例示意圖;
圖3是本發(fā)明實(shí)施例中數(shù)據(jù)存儲(chǔ)的方法的一實(shí)施例示意圖;
圖4是本發(fā)明實(shí)施例中一場(chǎng)景示例示意圖;
圖5是本發(fā)明實(shí)施例中數(shù)據(jù)恢復(fù)的方法的一實(shí)施例示意圖;
圖6是本發(fā)明實(shí)施例中數(shù)據(jù)恢復(fù)的方法的另一實(shí)施例示意圖;
圖7是本發(fā)明實(shí)施例中數(shù)據(jù)存儲(chǔ)的方法的另一實(shí)施例示意圖;
圖8是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖9是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖10是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖11是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖12是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖13是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖;
圖14是本發(fā)明實(shí)施例中數(shù)據(jù)處理裝置的一實(shí)施例示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供一種數(shù)據(jù)恢復(fù)的方法,可以在低存儲(chǔ)開(kāi)銷的前提下,降低數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。本發(fā)明實(shí)施例還提供了相應(yīng)的數(shù)據(jù)存儲(chǔ)的方法、相應(yīng)的裝置及系統(tǒng)。以下分別進(jìn)行詳細(xì)說(shuō)明。
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有作出創(chuàng)造性勞 動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實(shí)施例中分布式存儲(chǔ)系統(tǒng)的一實(shí)施例示意圖。
如圖1所示,分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)(NameNode)和多個(gè)存儲(chǔ)節(jié)點(diǎn)(Node),每個(gè)存儲(chǔ)節(jié)點(diǎn)都與命名節(jié)點(diǎn)通信連接。實(shí)際上,命名節(jié)點(diǎn)與存儲(chǔ)節(jié)點(diǎn)間可以通過(guò)交換機(jī)通信連接。
圖2為本發(fā)明實(shí)施例中分布式存儲(chǔ)系統(tǒng)的另一實(shí)施例示意圖。
如圖2所示,多個(gè)存儲(chǔ)節(jié)點(diǎn)被劃分到多個(gè)機(jī)架,同一個(gè)機(jī)架內(nèi)的存儲(chǔ)節(jié)點(diǎn)可以通過(guò)1G的交換機(jī)通信連接,圖2中表示了3個(gè)存儲(chǔ)節(jié)點(diǎn)組成一個(gè)機(jī)架,它們通過(guò)交換機(jī)通信連接;機(jī)架間則通過(guò)更高帶寬的交換機(jī)通信連接;NameNode節(jié)點(diǎn)管理著整個(gè)集群的元數(shù)據(jù),直接聯(lián)入上層交換機(jī),NameNode、存儲(chǔ)節(jié)點(diǎn)、交換機(jī)、機(jī)架構(gòu)成了一個(gè)分布式存儲(chǔ)集群。元數(shù)據(jù)在本發(fā)明實(shí)施例中指的是文件中各文件塊與存儲(chǔ)路徑的對(duì)應(yīng)關(guān)系。一個(gè)文件可以分布式存儲(chǔ)在多個(gè)存儲(chǔ)節(jié)點(diǎn)上,例如:5個(gè)存儲(chǔ)節(jié)點(diǎn)上,則該文件有5個(gè)文件塊,而且,各文件塊的數(shù)據(jù)內(nèi)容不相同。用戶設(shè)備對(duì)于分布式存儲(chǔ)系統(tǒng)的使用包括數(shù)據(jù)存入和數(shù)據(jù)讀出兩個(gè)方面,用戶在存入或讀出數(shù)據(jù)時(shí),通過(guò)網(wǎng)絡(luò)接入分布式存儲(chǔ)系統(tǒng)。
需要說(shuō)明的是,本發(fā)明實(shí)施例提供的存儲(chǔ)節(jié)點(diǎn)可以是獨(dú)立的物理主機(jī),也可以是位于一個(gè)或多個(gè)物理主機(jī)上的虛擬機(jī)。
下面分別從數(shù)據(jù)存入和數(shù)據(jù)讀出兩個(gè)方面介紹本發(fā)明實(shí)施例中數(shù)據(jù)存儲(chǔ)的過(guò)程和數(shù)據(jù)恢復(fù)的過(guò)程:
需要預(yù)先說(shuō)明的是,本發(fā)明實(shí)施例中多個(gè)包括兩個(gè)以及兩個(gè)以上。
首先結(jié)合圖3介紹數(shù)據(jù)存儲(chǔ)的過(guò)程:
圖3為本發(fā)明實(shí)施例中數(shù)據(jù)存儲(chǔ)的方法的一實(shí)施例示意圖。
本發(fā)明實(shí)施例的分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,如圖3所示,第一存儲(chǔ)節(jié)點(diǎn)有十個(gè),十個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)分別為N1、N2至N10,第二存儲(chǔ)節(jié)點(diǎn)有四個(gè),四個(gè)第二存儲(chǔ)節(jié)點(diǎn)的標(biāo) 識(shí)分別為N11至N14,當(dāng)然,圖3中只是舉例,實(shí)際上分布式存儲(chǔ)系統(tǒng)中有很多第一存儲(chǔ)節(jié)點(diǎn)和第二存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)都有其對(duì)應(yīng)的標(biāo)識(shí)。當(dāng)用戶設(shè)備要將目標(biāo)文件存儲(chǔ)到分布式存儲(chǔ)系統(tǒng)時(shí),先向命名節(jié)點(diǎn)發(fā)送存儲(chǔ)請(qǐng)求,命名節(jié)點(diǎn)可以根據(jù)目標(biāo)文件的大小、第一存儲(chǔ)存儲(chǔ)空間的大小等參數(shù),為該目標(biāo)文件分配第一存儲(chǔ)節(jié)點(diǎn),命名節(jié)點(diǎn)中維護(hù)有每個(gè)第一存儲(chǔ)節(jié)點(diǎn)和每個(gè)第二存儲(chǔ)節(jié)點(diǎn)存儲(chǔ)空間的大小,同時(shí),命名節(jié)點(diǎn)在為目標(biāo)文件分配第一存儲(chǔ)節(jié)點(diǎn)后,還會(huì)對(duì)應(yīng)維護(hù)其目標(biāo)文件的標(biāo)識(shí)與分配的每個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。例如:當(dāng)為目標(biāo)文件分配了N1至N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)后,命名節(jié)點(diǎn)就會(huì)維護(hù)目標(biāo)文件的標(biāo)識(shí)和N1至N10的對(duì)應(yīng)關(guān)系。用戶設(shè)備接收命名節(jié)點(diǎn)發(fā)送的文件存儲(chǔ)響應(yīng),該文件存儲(chǔ)響應(yīng)中攜帶N1至N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),則用戶設(shè)備將目標(biāo)文件拆分為十個(gè)文件塊,分別存儲(chǔ)到十個(gè)第一存儲(chǔ)節(jié)點(diǎn)中,當(dāng)然,用戶設(shè)備也可以不對(duì)目標(biāo)文件進(jìn)行拆分,而是輪循存儲(chǔ),十個(gè)第一存儲(chǔ)節(jié)點(diǎn)中的文件塊大小可以相同,也可以不相同,本發(fā)明實(shí)施例中對(duì)此不作限定。在目標(biāo)文件存儲(chǔ)到十個(gè)第一存儲(chǔ)節(jié)點(diǎn)后,為了確保數(shù)據(jù)的可靠性,命名節(jié)點(diǎn)會(huì)為該目標(biāo)文件分配第二存儲(chǔ)節(jié)點(diǎn),用于存儲(chǔ)該目標(biāo)文件十個(gè)文件塊,命名節(jié)點(diǎn)為該目標(biāo)函數(shù)分配了四個(gè)第二存儲(chǔ)節(jié)點(diǎn),四個(gè)第二存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)分別為N11至N14,然后,命名節(jié)點(diǎn)向N11至N14中的數(shù)據(jù)處理裝置發(fā)送十個(gè)第一存儲(chǔ)節(jié)點(diǎn)N1至N10的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí)。這十個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)為目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)。數(shù)據(jù)處理裝置在接收到N1至N10的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí)后,即獲知了要對(duì)N1至N10中目標(biāo)文件的10個(gè)文件塊進(jìn)行編碼。
本發(fā)明實(shí)施例中,數(shù)據(jù)處理裝置對(duì)目標(biāo)文件中各文件塊的編碼采用兩種編碼函數(shù),第一種為部分字節(jié)編碼函數(shù),第二種為全字節(jié)編碼函數(shù)。部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼。
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所 述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼。
所述數(shù)據(jù)處理裝置將所述第一校驗(yàn)碼和所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
下面結(jié)合實(shí)例說(shuō)明本發(fā)明實(shí)施例中部分字節(jié)編碼和全字節(jié)編碼的過(guò)程:
本發(fā)明實(shí)施例應(yīng)用場(chǎng)景中,用于存儲(chǔ)目標(biāo)文件的第一存儲(chǔ)節(jié)點(diǎn)有十個(gè),為該目標(biāo)文件分配的用戶存儲(chǔ)校驗(yàn)碼塊的第二存儲(chǔ)節(jié)點(diǎn)有4個(gè)。a1,a2,…,a10分別為N1,N2,…,N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)上目標(biāo)文件的不同文件塊中的第n個(gè)字節(jié),b1,b2,…,b10分別為N1,N2,…,N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)上目標(biāo)文件的不同文件塊中的第n+1個(gè)字節(jié);c11,c21,c31,c41是第二存儲(chǔ)節(jié)點(diǎn)N11,N12,N13,N14上的第n個(gè)字節(jié),它的值通過(guò)部分字節(jié)編碼函數(shù)g1,g2,g3,g4計(jì)算得到,c12,c22,c32,c42是第二存儲(chǔ)節(jié)點(diǎn)N11,N12,N13,N14上的第n+1個(gè)字節(jié),它的值通過(guò)全字節(jié)編碼函數(shù)f1,f2,f3,f4+g5計(jì)算得到。
數(shù)據(jù)處理裝置對(duì)上述應(yīng)用場(chǎng)景的編碼原理可以參閱表1進(jìn)行理解:
表1:應(yīng)用場(chǎng)景實(shí)例的編碼原理
其中,g1(a1,a2,a3,a4)=B11*a1+B12*a2+B13*a3+B14*a4;
g2(a3,a4,a5,a6)=B23*a3+B24*a4+B25*a5+B26*a6;
f1(b1,b2,…,b9,b10)=B11*b1+B12*b2+…,+B19*b9+B1,10*b10;
f2(b1,b2,…,b9,b10)=B21*b1+B22*b2+…,+B29*b9+B2,10*b10;
本處只是列舉了其中幾個(gè)函數(shù)關(guān)系式,其他的函數(shù)關(guān)系式可以參閱上述關(guān)系式進(jìn)行改寫,本處不一一贅述。
而且,上述只是舉例說(shuō)明了每個(gè)文件塊中第n個(gè)字節(jié)和第n+1個(gè)字節(jié)的編碼原理,實(shí)際上,每個(gè)文件塊中其他字節(jié)也可以使用這兩個(gè)編碼函數(shù)進(jìn)行編碼。本處不一一列出。
本發(fā)明對(duì)a組采用部分字節(jié)編碼,只有一部分字節(jié)作為它的編碼函數(shù)的輸入?yún)?shù),對(duì)b組采用全字節(jié)編碼,所有字節(jié)都作為它的編碼函數(shù)的輸入?yún)?shù)。
本發(fā)明實(shí)施例采用的編碼矩陣為:
本發(fā)明實(shí)施例中對(duì)編碼矩陣值不做限定,只要保證逆矩陣存在就可以,各編碼函數(shù)g1~g5,f1~f4中需要的系數(shù)從該矩陣中獲取。
由上述示例的部分字節(jié)編碼函數(shù)可見(jiàn),緊鄰的兩個(gè)部分字節(jié)編碼函數(shù)的字節(jié)參數(shù)有兩個(gè)字節(jié)的重疊。這樣,可以保證每個(gè)字節(jié)都能被編進(jìn)多個(gè)校驗(yàn)碼里,即使該目標(biāo)文件有多個(gè)文件塊丟失時(shí),也能保證丟失的字節(jié)正常的恢復(fù)出來(lái)。緊鄰的兩個(gè)部分字節(jié)編碼函數(shù)即為g1與g2,g2與g3,g3與g4這種參數(shù)重疊數(shù)最多的函數(shù)。
當(dāng)然,重疊兩個(gè)字節(jié)只是本示例的情況,具體部分字節(jié)編碼函數(shù)中字節(jié)參數(shù)的數(shù)量和緊鄰的兩個(gè)部分編碼函數(shù)中字節(jié)重復(fù)的數(shù)量可以根據(jù)該目標(biāo)文件的第一存儲(chǔ)節(jié)點(diǎn)的數(shù)量和第二存儲(chǔ)節(jié)點(diǎn)的數(shù)量確定。保證每個(gè)字節(jié)都被編進(jìn)至少兩個(gè)校驗(yàn)碼塊即可。
如圖4所示,a1,a2,…,a9,a10這十個(gè)字節(jié),按照緊鄰的兩個(gè)函數(shù)重疊兩個(gè)字節(jié)的情況可以有五個(gè)部分字節(jié)編碼函數(shù)。
分別為:g1(a1,a2,a3,a4),g2(a3,a4,a5,a6),(a5,a6,a7,a8),g4(a7,a8,a9,a10),(a9,a10,a1,a2),保證了a1,a2,…,a9,a10每個(gè)字節(jié)都被編進(jìn)了兩個(gè)校驗(yàn)碼塊中。實(shí) 際上,也可以有三個(gè)重疊字節(jié),這樣,a1,a2,…,a9,a10每個(gè)字節(jié)都被編進(jìn)3個(gè)校驗(yàn)碼塊中,可靠性更高,但存儲(chǔ)開(kāi)銷會(huì)增大。
下面舉例計(jì)算本發(fā)明上述示例的部分字節(jié)編碼函數(shù)中選擇4個(gè)字節(jié)作為參與編碼的字節(jié),重疊長(zhǎng)度為兩個(gè)字節(jié)的原因。
假設(shè):nodeNum為需要參與部分字節(jié)編碼的存儲(chǔ)節(jié)點(diǎn)的數(shù)量,len為節(jié)點(diǎn)重疊部分的長(zhǎng)度,第二存儲(chǔ)節(jié)點(diǎn)的數(shù)量用r表示,第一存儲(chǔ)節(jié)點(diǎn)的數(shù)量用k表示,通過(guò)如下公式確定nodeNum和len。
r=(k-nodeNum)/(nodeNum-len)+1;
帶寬開(kāi)銷減少率ratio=(k-nodeNum)/2k;
本實(shí)施例中,通過(guò)多次賦值嘗試。在nodeNum=4,len=2是最佳的參數(shù)組合,增加nodeNum的值會(huì)導(dǎo)致網(wǎng)絡(luò)帶寬開(kāi)銷增加,而增加len的值則會(huì)導(dǎo)致存儲(chǔ)開(kāi)銷增加。因此,確定最終nodeNum=4,len=2,通過(guò)這兩個(gè)值可以確定每個(gè)部分字節(jié)編碼函數(shù)。
在一個(gè)數(shù)據(jù)處理裝置對(duì)目標(biāo)文件的不同文件塊中的相應(yīng)字節(jié)都編碼結(jié)束后,就將校驗(yàn)碼存儲(chǔ)在該數(shù)據(jù)處理裝置所在的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
在上述示例中,N11、N12、N13和N14中的數(shù)據(jù)處理裝置都分別按照各自的部分字節(jié)編碼函數(shù)和全字節(jié)編碼函數(shù)進(jìn)行編碼,可以并行編碼,提高了編碼效率。
下面結(jié)合圖5介紹本發(fā)明實(shí)施例中數(shù)據(jù)恢復(fù)的過(guò)程:
圖5所示的分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接。
在圖5所示的示例中,結(jié)合圖3所示的場(chǎng)景,目標(biāo)文件存儲(chǔ)在N1,N2,…,N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)上,目標(biāo)文件的校驗(yàn)碼存儲(chǔ)在N11、N12、N13和N14四個(gè)第二存儲(chǔ)節(jié)點(diǎn)上。每個(gè)第一存儲(chǔ)節(jié)點(diǎn)上都有一個(gè)數(shù)據(jù)處理裝置。實(shí)際上第一存儲(chǔ)節(jié)點(diǎn)和第二存儲(chǔ)節(jié)點(diǎn)上都有數(shù)據(jù)處理裝置,只是在數(shù)據(jù)恢復(fù)的解碼過(guò)程中,第 二存儲(chǔ)節(jié)點(diǎn)上的數(shù)據(jù)處理裝置暫時(shí)不需要使用。
在用戶想使用目標(biāo)文件時(shí),用戶設(shè)備向命名節(jié)點(diǎn)發(fā)送目標(biāo)文件獲取請(qǐng)求,目標(biāo)文件獲取請(qǐng)求中攜帶該目標(biāo)文件的標(biāo)識(shí)。命名節(jié)點(diǎn)根據(jù)該目標(biāo)文件的標(biāo)識(shí),從該目標(biāo)文件存儲(chǔ)時(shí)建立的目標(biāo)文件的標(biāo)識(shí)與第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)的關(guān)聯(lián)關(guān)系中,確定該目標(biāo)文件存儲(chǔ)在N1,N2,…,N10十個(gè)第一存儲(chǔ)節(jié)點(diǎn)上。則命名節(jié)點(diǎn)向用戶設(shè)備返回N1,N2,…,N10這十個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)。
用戶設(shè)備根據(jù)N1,N2,…,N10這十個(gè)第一存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),向N1,N2,…,N10這十個(gè)第一存儲(chǔ)節(jié)點(diǎn)發(fā)送文件塊的獲取請(qǐng)求,該文件塊的獲取請(qǐng)求中攜帶目標(biāo)文件的標(biāo)識(shí)。
如果N1,N2,…,N10上存儲(chǔ)的該目標(biāo)文件的文件塊沒(méi)有丟失,則會(huì)分別向用戶設(shè)備返回相應(yīng)的文件塊,但本發(fā)明場(chǎng)景示例中第一存儲(chǔ)節(jié)點(diǎn)N1上的文件塊丟失,則意味著a1、b1等存儲(chǔ)在第一存儲(chǔ)節(jié)點(diǎn)N1上的相關(guān)字節(jié)丟失,需要恢復(fù)丟失的文件塊后再向用戶設(shè)備返回恢復(fù)的文件塊。下面以恢復(fù)a1、b1為例說(shuō)明本發(fā)明實(shí)施例中數(shù)據(jù)恢復(fù)的過(guò)程。
由圖3對(duì)應(yīng)的場(chǎng)景示例可知,a1是根據(jù)部分字節(jié)編碼函數(shù)編碼在校驗(yàn)碼c11=g1(a1,a2,a3,a4)中的,所以要恢復(fù)a1需要依賴a2,a3,a4和c11四個(gè)值,則可以從N2、N3、N4和N11中分別獲取a2,a3,a4和c11這四個(gè)值,然后按照編碼的逆過(guò)程進(jìn)行解碼,即可得到a1。同理,要恢復(fù)b1可以在獲取b2,…,b9,b10和c12后,通過(guò)c12=f1(b1,b2,…,b9,b10)函數(shù)的逆過(guò)程恢復(fù)出b1。當(dāng)然,恢復(fù)b1還可以采用其他幾個(gè)全字節(jié)編碼函數(shù),但原理是相同的。
由以上可知,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法,采用部分字節(jié)編碼和全字節(jié)編碼混合的方式,提高了字節(jié)可靠性的同時(shí),降低了存儲(chǔ)空間,提高了編碼效率。同時(shí),在數(shù)據(jù)恢復(fù)時(shí),針對(duì)部分字節(jié)編碼函數(shù)編碼的字節(jié),不需要獲取每個(gè)字節(jié)進(jìn)行解碼,降低了網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
參閱圖6,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法的一實(shí)施例包括:
101、數(shù)據(jù)處理裝置接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí),所述數(shù)據(jù)處理裝置應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn), 所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接。
102、所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)文件的標(biāo)識(shí)未查找到所述目標(biāo)文件,確定所述目標(biāo)文件塊丟失。
103、所述數(shù)據(jù)處理裝置從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),并根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和所述目標(biāo)文件的標(biāo)識(shí)獲取所述恢復(fù)依賴數(shù)據(jù)塊,所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件。
104、所述數(shù)據(jù)處理裝置根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。
與現(xiàn)有技術(shù)中數(shù)據(jù)無(wú)法同時(shí)兼顧數(shù)據(jù)存儲(chǔ)開(kāi)銷和數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法,校驗(yàn)碼塊是通過(guò)部分字節(jié)編碼和全字節(jié)編碼結(jié)合得到的,降低了存儲(chǔ)開(kāi)銷,數(shù)據(jù)恢復(fù)時(shí)目標(biāo)文件塊中的一部分只需要依賴部分依賴文件塊就可以得到降低了數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
可選地,在上述圖6對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法的第一個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊,可以包括:
所述數(shù)據(jù)處理裝置根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
所述數(shù)據(jù)處理裝置根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
可選地,在上述圖6對(duì)應(yīng)的第一個(gè)可選實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法的第二個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),可以包括:
所述數(shù)據(jù)處理裝置從第一編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第一字節(jié)所需的依賴字節(jié),從第一編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼,所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的編碼參數(shù),所述第一編碼結(jié)果為采用所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的依賴字節(jié)和所述第一字節(jié)進(jìn)行編碼所得到的結(jié)果;
所述數(shù)據(jù)處理裝置根據(jù)恢復(fù)所述第一字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第一字節(jié)。
可選地,在上述圖6對(duì)應(yīng)的第一個(gè)或第二個(gè)可選實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)恢復(fù)的方法的第三個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),可以包括:
所述數(shù)據(jù)處理裝置從第二編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第二字節(jié)所需的依賴字節(jié),從第二編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼,所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的編碼參數(shù),所述第二編碼結(jié)果為采用所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的依賴字節(jié)和所述第二字節(jié)進(jìn)行編碼所得到的結(jié)果;
所述數(shù)據(jù)處理裝置根據(jù)恢復(fù)所述第二字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第二字節(jié)。
圖6對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一字節(jié)可以參閱a組中的第n個(gè)字節(jié)進(jìn)行理解,第二字節(jié)可以參閱b組中的第n+1個(gè)字節(jié)進(jìn)行理解,第一字節(jié)總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)的字節(jié),第二字節(jié)是采用全字節(jié)編碼函數(shù)的字節(jié)。依賴文件塊和所述依賴校驗(yàn)碼塊是恢復(fù)丟失文件塊所 需依賴的存活文件塊和校驗(yàn)碼塊,例如:恢復(fù)第一存儲(chǔ)節(jié)點(diǎn)N1中的目標(biāo)文件的文件塊需要依賴N2、N3和N4中目標(biāo)文件的相關(guān)文件塊和N11中目標(biāo)文件的校驗(yàn)碼塊。
圖6對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖5部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
參閱圖7,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法的一實(shí)施例包括:
201、數(shù)據(jù)處理裝置接收所述命名節(jié)點(diǎn)發(fā)送的多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí),所述多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)為已存儲(chǔ)了所述目標(biāo)文件的不同文件塊的第一存儲(chǔ)節(jié)點(diǎn),所述數(shù)據(jù)處理裝置應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接。
202、所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼,所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
203、所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
204、所述數(shù)據(jù)處理裝置將所述第一校驗(yàn)碼和所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法,采用部分字節(jié)編碼和全字節(jié)編碼混合的方式,提高了字節(jié)可靠性的同時(shí),降低了存儲(chǔ)空間,提高了編碼效率。同時(shí),在數(shù)據(jù)恢復(fù)時(shí),針對(duì)部分字節(jié)編碼函數(shù)編碼的字節(jié),不需要獲取每個(gè)字節(jié)進(jìn)行解碼,降低了網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
可選地,在上述圖7對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法的第一個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一 校驗(yàn)碼,可以包括:
所述數(shù)據(jù)處理裝置從第一編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第一編碼參數(shù)所指示的字節(jié),所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
所述數(shù)據(jù)處理裝置根據(jù)所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第一校驗(yàn)碼。
可選地,在上述圖7對(duì)應(yīng)的實(shí)施例或第一個(gè)可選實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法的第二個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,可以包括:
所述數(shù)據(jù)處理裝置從第二編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第二編碼參數(shù)所指示的字節(jié),所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
所述數(shù)據(jù)處理裝置根據(jù)所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第二校驗(yàn)碼。
可選地,在上述圖7對(duì)應(yīng)的實(shí)施例或第一個(gè)可選實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法的第三個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼之前,所述方法還可以包括:
所述數(shù)據(jù)處理裝置根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的數(shù)量和所述命名節(jié)點(diǎn)所指定的校驗(yàn)節(jié)點(diǎn)的數(shù)量,確定所述部分字節(jié)編碼函數(shù)中第一參數(shù)的數(shù)量和緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)中的部分字節(jié)編碼函數(shù)所包含的相同第一參數(shù)的個(gè)數(shù),所述緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)所包含的部分字節(jié)編碼函數(shù)中第一參數(shù)的重疊個(gè)數(shù)最多。
圖7對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一校驗(yàn)碼可以參閱c11進(jìn)行理解,第二校驗(yàn)碼可以參閱c21進(jìn)行理解,第一校驗(yàn)碼總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼,第二字節(jié)是采用全字節(jié)編 碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼。
圖7對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖5部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
參閱圖8,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置30的一實(shí)施例包括:數(shù)據(jù)處理裝置30應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括所述數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述數(shù)據(jù)處理裝置30包括:
接收模塊301,用于接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí);
確定模塊302,用于根據(jù)所述接收模塊301接收的所述目標(biāo)文件的標(biāo)識(shí)未查找到所述目標(biāo)文件,確定所述目標(biāo)文件塊丟失;
獲取模塊303,用于在所述確定模塊302確定所述目標(biāo)文件丟失后,從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),并根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和所述目標(biāo)文件的標(biāo)識(shí)獲取所述恢復(fù)依賴數(shù)據(jù)塊,所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件;
恢復(fù)模塊304,用于根據(jù)所述獲取模塊303獲取的所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置,在數(shù)據(jù)恢復(fù)時(shí),針對(duì)部分字節(jié)編碼函數(shù)編碼的字節(jié),不需要獲取每個(gè)字節(jié)進(jìn)行解碼,降低了網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
可選地,在上述圖8對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,參閱圖9,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置30的第一個(gè)可選實(shí)施例中,所述恢復(fù)模塊304包括:
第一恢復(fù)單元3041,用于根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
第二恢復(fù)單元3042,用于根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
可選地,在上述圖9對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置30的第二個(gè)可選實(shí)施例中,
所述第一恢復(fù)單元3041,具體用于從第一編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第一字節(jié)所需的依賴字節(jié),從第一編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼,所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的編碼參數(shù),所述第一編碼結(jié)果為采用所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的依賴字節(jié)和所述第一字節(jié)進(jìn)行編碼所得到的結(jié)果;根據(jù)恢復(fù)所述第一字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第一字節(jié)。
可選地,在上述圖9對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置30的第三個(gè)可選實(shí)施例中,
所述第二恢復(fù)單元3042,具體用于從第二編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第二字節(jié)所需的依賴字節(jié),從第二編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼,所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的編碼參數(shù),所述第二編碼結(jié)果為采用所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的依賴字節(jié)和所述第二字節(jié)進(jìn)行編碼所得到的結(jié)果;根據(jù)恢復(fù)所述第二字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第二字節(jié)。
圖8或圖9對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一字節(jié)可以參閱a組中的第n個(gè)字節(jié)進(jìn)行理解,第二字節(jié)可以參閱b組中的第n+1個(gè)字 節(jié)進(jìn)行理解,第一字節(jié)總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)的字節(jié),第二字節(jié)是采用全字節(jié)編碼函數(shù)的字節(jié)。依賴文件塊和所述依賴校驗(yàn)碼塊是恢復(fù)丟失文件塊所需依賴的存活文件塊和校驗(yàn)碼塊,例如:恢復(fù)第一存儲(chǔ)節(jié)點(diǎn)N1中的目標(biāo)文件的文件塊需要依賴N2、N3和N4中目標(biāo)文件的相關(guān)文件塊和N11中目標(biāo)文件的校驗(yàn)碼塊。
圖8或圖9對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖6部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
參閱圖10,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置40的一實(shí)施例包括:數(shù)據(jù)處理裝置40應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接,所述數(shù)據(jù)處理裝置包括:
接收模塊401,用于接收所述命名節(jié)點(diǎn)發(fā)送的多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和目標(biāo)文件的標(biāo)識(shí),所述多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)為已存儲(chǔ)了所述目標(biāo)文件的不同文件塊的第一存儲(chǔ)節(jié)點(diǎn);
第一編碼模塊402,用于根據(jù)所述接收模塊401接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼,所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
第二編碼模塊403,用于根據(jù)所述接收模塊401接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
存儲(chǔ)調(diào)度模塊404,用于將所述第一編碼模塊402編碼得到的所述第一校驗(yàn)碼和所述第二編碼模塊403編碼得到的所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置,采用部分字節(jié)編碼 和全字節(jié)編碼混合的方式,提高了字節(jié)可靠性的同時(shí),降低了存儲(chǔ)空間,提高了編碼效率。同時(shí),在數(shù)據(jù)恢復(fù)時(shí),針對(duì)部分字節(jié)編碼函數(shù)編碼的字節(jié),不需要獲取每個(gè)字節(jié)進(jìn)行解碼,降低了網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
可選地,在上述圖10對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置40的第一個(gè)可選實(shí)施例中,
所述第一編碼模塊402,具體用于從第一編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第一編碼參數(shù)所指示的字節(jié),所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);根據(jù)所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第一校驗(yàn)碼。
可選地,在上述圖10對(duì)應(yīng)的實(shí)施例或第一個(gè)可選實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置40的第二個(gè)可選實(shí)施例中,
所述第二編碼模塊,具體用于從第二編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第二編碼參數(shù)所指示的字節(jié),所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);根據(jù)所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第二校驗(yàn)碼。
可選地,在上述圖10對(duì)應(yīng)的實(shí)施例或第一個(gè)可選實(shí)施例的基礎(chǔ)上,參閱圖11,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置40的第三個(gè)可選實(shí)施例中,所述數(shù)據(jù)處理裝置40還包括:
確定模塊405,用于根據(jù)所述接收模塊401接收的所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的數(shù)量和所述命名節(jié)點(diǎn)所指定的校驗(yàn)節(jié)點(diǎn)的數(shù)量,確定所述部分字節(jié)編碼函數(shù)中第一參數(shù)的數(shù)量和緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)中的部分字節(jié)編碼函數(shù)所包含的相同第一參數(shù)的個(gè)數(shù),所述緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)所包含的部分字節(jié)編碼函數(shù)中第一參數(shù)的重疊個(gè)數(shù)最多。
圖10和圖11對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一校驗(yàn)碼可以參閱c11進(jìn)行理解,第二校驗(yàn)碼可以參閱c21進(jìn)行理解,第一校驗(yàn)碼總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼,第二字節(jié)是采用全 字節(jié)編碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼。
圖10和圖11對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖5、圖7部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
在上述數(shù)據(jù)處理裝置的多個(gè)實(shí)施例中,應(yīng)當(dāng)理解的是,在一種實(shí)現(xiàn)方式下,接收模塊、獲取模塊可以是由輸入/輸出I/O設(shè)備(比如網(wǎng)卡)來(lái)實(shí)現(xiàn),確定模塊、恢復(fù)模塊、第一編碼模塊、第二編碼模塊、存儲(chǔ)調(diào)度模塊可以由處理器執(zhí)行存儲(chǔ)器中的程序或指令來(lái)實(shí)現(xiàn)的(換言之,即由處理器以及與所述處理器耦合的存儲(chǔ)器中的特殊指令相互配合來(lái)實(shí)現(xiàn));在另一種實(shí)現(xiàn)方式下接收模塊、獲取模塊可以是由輸入/輸出I/O設(shè)備(比如網(wǎng)卡)來(lái)實(shí)現(xiàn),確定模塊、恢復(fù)模塊、第一編碼模塊、第二編碼模塊、存儲(chǔ)調(diào)度模塊也可以分別通過(guò)專有電路來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)方式參見(jiàn)現(xiàn)有技術(shù),這里不再贅述;在再一種實(shí)現(xiàn)方式下,接收模塊、獲取模塊可以是由輸入/輸出I/O設(shè)備(比如網(wǎng)卡)來(lái)實(shí)現(xiàn),確定模塊、恢復(fù)模塊、第一編碼模塊、第二編碼模塊、存儲(chǔ)調(diào)度模塊也可以通過(guò)現(xiàn)場(chǎng)可編程門陣列(FPGA,F(xiàn)ield-Programmable Gate Array)來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)方式參見(jiàn)現(xiàn)有技術(shù),這里不再贅述,本發(fā)明包括但不限于前述實(shí)現(xiàn)方式,應(yīng)當(dāng)理解的是,只要按照本發(fā)明的思想實(shí)現(xiàn)的方案,都落入本發(fā)明實(shí)施例所保護(hù)的范圍。
本實(shí)施例提供了一種數(shù)據(jù)處理裝置的硬件結(jié)構(gòu),參見(jiàn)圖12所示,一種數(shù)據(jù)處理裝置的硬件結(jié)構(gòu)可以包括:
收發(fā)器件、軟件器件以及硬件器件三部分;
收發(fā)器件為用于完成包收發(fā)的硬件電路;
硬件器件也可稱“硬件處理模塊”,或者更簡(jiǎn)單的,也可簡(jiǎn)稱為“硬件”,硬件器件主要包括基于FPGA、ASIC之類專用硬件電路(也會(huì)配合其他配套器件,如存儲(chǔ)器)來(lái)實(shí)現(xiàn)某些特定功能的硬件電路,其處理速度相比通用處理器往往要快很多,但功能一經(jīng)定制,便很難更改,因此,實(shí)現(xiàn)起來(lái)并不靈活,通常用來(lái)處理一些固定的功能。需要說(shuō)明的是,硬件器件在實(shí)際應(yīng)用中,也可以包括MCU(微處理器,如單片機(jī))、或者CPU等處理器,但這些處理器的主要功能并不是完成大數(shù)據(jù)的處理,而主要用于進(jìn)行一些控制,在這種應(yīng)用場(chǎng)景下, 由這些器件搭配的系統(tǒng)為硬件器件。
軟件器件(或者也簡(jiǎn)單“軟件”)主要包括通用的處理器(例如CPU)及其一些配套的器件(如內(nèi)存、硬盤等存儲(chǔ)設(shè)備),可以通過(guò)編程來(lái)讓處理器具備相應(yīng)的處理功能,用軟件來(lái)實(shí)現(xiàn)時(shí),可以根據(jù)業(yè)務(wù)靈活配置,但往往速度相比硬件器件來(lái)說(shuō)要慢。軟件處理完后,可以通過(guò)硬件器件將處理完的數(shù)據(jù)通過(guò)收發(fā)器件進(jìn)行發(fā)送,也可以通過(guò)一個(gè)與收發(fā)器件相連的接口向收發(fā)器件發(fā)送處理完的數(shù)據(jù)。
本實(shí)施例中,收發(fā)器件用于接收目標(biāo)文件的標(biāo)識(shí)、目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)等。
硬件器件及軟件器件的其他功能在前述實(shí)施例中已經(jīng)詳細(xì)論述,這里不再贅述。
下面結(jié)合附圖就接收模塊、獲取模塊可以是由輸入/輸出I/O設(shè)備(比如網(wǎng)卡)來(lái)實(shí)現(xiàn),確定模塊、恢復(fù)模塊、第一編碼模塊、第二編碼模塊、存儲(chǔ)調(diào)度模塊可以是可以由處理器執(zhí)行存儲(chǔ)器中的程序或指令來(lái)實(shí)現(xiàn)的技術(shù)方案來(lái)做詳細(xì)的介紹:
圖13是本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置30的結(jié)構(gòu)示意圖。數(shù)據(jù)處理裝置30應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接。所述數(shù)據(jù)處理裝置30包括處理器310、存儲(chǔ)器350和輸入/輸出I/O設(shè)備330,存儲(chǔ)器350可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器310提供操作指令和數(shù)據(jù)。存儲(chǔ)器350的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器(NVRAM)。
在一些實(shí)施方式中,存儲(chǔ)器350存儲(chǔ)了如下的元素,可執(zhí)行模塊或者數(shù)據(jù)結(jié)構(gòu),或者他們的子集,或者他們的擴(kuò)展集:
當(dāng)數(shù)據(jù)處理裝置30為源設(shè)備時(shí):
在本發(fā)明實(shí)施例中,通過(guò)調(diào)用存儲(chǔ)器350存儲(chǔ)的操作指令(該操作指令可存儲(chǔ)在操作系統(tǒng)中),
通過(guò)I/O設(shè)備330接收用戶設(shè)備發(fā)送的文件塊獲取請(qǐng)求,所述文件塊獲取請(qǐng)求攜帶所述目標(biāo)文件的標(biāo)識(shí);
通過(guò)I/O設(shè)備330從所述命名節(jié)點(diǎn)獲取恢復(fù)依賴數(shù)據(jù)塊所在的目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí),并根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和所述目標(biāo)文件的標(biāo)識(shí)獲取所述恢復(fù)依賴數(shù)據(jù)塊,所述恢復(fù)依賴數(shù)據(jù)塊包括恢復(fù)所述目標(biāo)文件塊所需的依賴文件塊和依賴校驗(yàn)碼塊,所述依賴校驗(yàn)碼塊中的一部分校驗(yàn)碼為對(duì)目標(biāo)文件的部分文件塊編碼得到,所述依賴校驗(yàn)碼塊中的剩余部分校驗(yàn)碼為對(duì)所述目標(biāo)文件的每個(gè)文件塊編碼得到,所述剩余部分校驗(yàn)碼為除所述一部分校驗(yàn)碼之外的校驗(yàn)碼,所述目標(biāo)文件為所述目標(biāo)文件塊所屬的文件;
根據(jù)所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊。
與現(xiàn)有技術(shù)中數(shù)據(jù)無(wú)法同時(shí)兼顧數(shù)據(jù)存儲(chǔ)開(kāi)銷和數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置,校驗(yàn)碼塊是通過(guò)部分字節(jié)編碼和全字節(jié)編碼結(jié)合得到的,降低了存儲(chǔ)開(kāi)銷,數(shù)據(jù)恢復(fù)時(shí)目標(biāo)文件塊中的一部分只需要依賴部分依賴文件塊就可以得到降低了數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
處理器310控制數(shù)據(jù)處理裝置30的操作,處理器310還可以稱為CPU(Central Processing Unit,中央處理單元)。存儲(chǔ)器350可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器310提供指令和數(shù)據(jù)。存儲(chǔ)器350的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器(NVRAM)。具體的應(yīng)用中數(shù)據(jù)處理裝置30的各個(gè)組件通過(guò)總線系統(tǒng)320耦合在一起,其中總線系統(tǒng)320除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號(hào)總線等。但是為了清楚說(shuō)明起見(jiàn),在圖中將各種總線都標(biāo)為總線系統(tǒng)320。
上述本發(fā)明實(shí)施例揭示的方法可以應(yīng)用于處理器310中,或者由處理器310實(shí)現(xiàn)。處理器310可能是一種集成電路芯片,具有信號(hào)的處理能力。在實(shí)現(xiàn)過(guò)程中,上述方法的各步驟可以通過(guò)處理器310中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器310可以是通用處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件??梢詫?shí)現(xiàn)或者執(zhí)行本發(fā)明實(shí)施例中的公開(kāi)的各方法、步驟及邏輯框圖。通用處理器可以是微處理 器或者該處理器也可以是任何常規(guī)的處理器等。結(jié)合本發(fā)明實(shí)施例所公開(kāi)的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲(chǔ)器,閃存、只讀存儲(chǔ)器,可編程只讀存儲(chǔ)器或者電可擦寫可編程存儲(chǔ)器、寄存器等本領(lǐng)域成熟的存儲(chǔ)介質(zhì)中。該存儲(chǔ)介質(zhì)位于存儲(chǔ)器350,處理器310讀取存儲(chǔ)器350中的信息,結(jié)合其硬件完成上述方法的步驟。
可選地,處理器310具體用于:
根據(jù)部分字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第一字節(jié),所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
根據(jù)全字節(jié)編碼函數(shù)、所述依賴文件塊和所述依賴校驗(yàn)碼塊恢復(fù)所述目標(biāo)文件塊中的第二字節(jié),所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù)。
可選地,處理器310具體用于:
從第一編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第一字節(jié)所需的依賴字節(jié),從第一編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼,所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的編碼參數(shù),所述第一編碼結(jié)果為采用所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的依賴字節(jié)和所述第一字節(jié)進(jìn)行編碼所得到的結(jié)果;
根據(jù)恢復(fù)所述第一字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第一字節(jié)所需的校驗(yàn)碼進(jìn)行解碼,得到所述第一字節(jié)。
可選地,處理器310具體用于:
從第二編碼參數(shù)所對(duì)應(yīng)的依賴文件塊中獲取恢復(fù)所述第二字節(jié)所需的依賴字節(jié),從第二編碼結(jié)果所對(duì)應(yīng)的依賴校驗(yàn)碼塊中獲取恢復(fù)所述第二字節(jié)所需的校驗(yàn)碼,所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的編碼參數(shù),所述第二編碼結(jié)果為采用所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的依賴字節(jié)和所述第二字節(jié)進(jìn)行編碼所得到的結(jié)果;
根據(jù)恢復(fù)所述第二字節(jié)所需的依賴字節(jié),對(duì)恢復(fù)所述第二字節(jié)所需的校驗(yàn) 碼進(jìn)行解碼,得到所述第二字節(jié)。
圖13對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一字節(jié)可以參閱a組中的第n個(gè)字節(jié)進(jìn)行理解,第二字節(jié)可以參閱b組中的第n+1個(gè)字節(jié)進(jìn)行理解,第一字節(jié)總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)的字節(jié),第二字節(jié)是采用全字節(jié)編碼函數(shù)的字節(jié)。依賴文件塊和所述依賴校驗(yàn)碼塊是恢復(fù)丟失文件塊所需依賴的存活文件塊和校驗(yàn)碼塊,例如:恢復(fù)第一存儲(chǔ)節(jié)點(diǎn)N1中的目標(biāo)文件的文件塊需要依賴N2、N3和N4中目標(biāo)文件的相關(guān)文件塊和N11中目標(biāo)文件的校驗(yàn)碼塊。
圖13對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖5、圖6、圖8、圖9部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
圖14是本發(fā)明實(shí)施例提供的數(shù)據(jù)處理裝置40的結(jié)構(gòu)示意圖。數(shù)據(jù)處理裝置40應(yīng)用于分布式存儲(chǔ)系統(tǒng),所述分布式存儲(chǔ)系統(tǒng)包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)待存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括數(shù)據(jù)處理裝置,每個(gè)數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接。所述數(shù)據(jù)處理裝置40包括處理器410、存儲(chǔ)器450和輸入/輸出I/O設(shè)備430,存儲(chǔ)器450可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器410提供操作指令和數(shù)據(jù)。存儲(chǔ)器450的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器(NVRAM)。
在一些實(shí)施方式中,存儲(chǔ)器450存儲(chǔ)了如下的元素,可執(zhí)行模塊或者數(shù)據(jù)結(jié)構(gòu),或者他們的子集,或者他們的擴(kuò)展集:
當(dāng)數(shù)據(jù)處理裝置40為源設(shè)備時(shí):
在本發(fā)明實(shí)施例中,通過(guò)調(diào)用存儲(chǔ)器450存儲(chǔ)的操作指令(該操作指令可存儲(chǔ)在操作系統(tǒng)中),
通過(guò)I/O設(shè)備430接收所述命名節(jié)點(diǎn)發(fā)送的多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和目 標(biāo)文件的標(biāo)識(shí),所述多個(gè)目標(biāo)存儲(chǔ)節(jié)點(diǎn)為已存儲(chǔ)了所述目標(biāo)文件的不同文件塊的第一存儲(chǔ)節(jié)點(diǎn);
根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和部分字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的部分文件塊進(jìn)行編碼,得到第一校驗(yàn)碼,所述部分字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的部分文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的標(biāo)識(shí)和全字節(jié)編碼函數(shù)對(duì)所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼,得到第二校驗(yàn)碼,所述全字節(jié)編碼函數(shù)為采用所述目標(biāo)文件中的每個(gè)文件塊進(jìn)行編碼得到編碼結(jié)果的函數(shù);
將所述第一校驗(yàn)碼和所述第二校驗(yàn)碼存儲(chǔ)到所述數(shù)據(jù)處理裝置所屬的第二存儲(chǔ)節(jié)點(diǎn)的存儲(chǔ)空間中。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲(chǔ)的方法,采用部分字節(jié)編碼和全字節(jié)編碼混合的方式,提高了字節(jié)可靠性的同時(shí),降低了存儲(chǔ)空間,提高了編碼效率。同時(shí),在數(shù)據(jù)恢復(fù)時(shí),針對(duì)部分字節(jié)編碼函數(shù)編碼的字節(jié),不需要獲取每個(gè)字節(jié)進(jìn)行解碼,降低了網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
處理器410控制數(shù)據(jù)處理裝置40的操作,處理器410還可以稱為CPU(Central Processing Unit,中央處理單元)。存儲(chǔ)器450可以包括只讀存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器,并向處理器410提供指令和數(shù)據(jù)。存儲(chǔ)器450的一部分還可以包括非易失性隨機(jī)存取存儲(chǔ)器(NVRAM)。具體的應(yīng)用中數(shù)據(jù)處理裝置40的各個(gè)組件通過(guò)總線系統(tǒng)420耦合在一起,其中總線系統(tǒng)420除包括數(shù)據(jù)總線之外,還可以包括電源總線、控制總線和狀態(tài)信號(hào)總線等。但是為了清楚說(shuō)明起見(jiàn),在圖中將各種總線都標(biāo)為總線系統(tǒng)420。
上述本發(fā)明實(shí)施例揭示的方法可以應(yīng)用于處理器410中,或者由處理器410實(shí)現(xiàn)。處理器410可能是一種集成電路芯片,具有信號(hào)的處理能力。在實(shí)現(xiàn)過(guò)程中,上述方法的各步驟可以通過(guò)處理器410中的硬件的集成邏輯電路或者軟件形式的指令完成。上述的處理器410可以是通用處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。可以實(shí)現(xiàn)或者執(zhí)行本發(fā)明實(shí)施例中的公開(kāi)的各方法、步驟及邏輯框圖。通用處理器可以是微處理 器或者該處理器也可以是任何常規(guī)的處理器等。結(jié)合本發(fā)明實(shí)施例所公開(kāi)的方法的步驟可以直接體現(xiàn)為硬件譯碼處理器執(zhí)行完成,或者用譯碼處理器中的硬件及軟件模塊組合執(zhí)行完成。軟件模塊可以位于隨機(jī)存儲(chǔ)器,閃存、只讀存儲(chǔ)器,可編程只讀存儲(chǔ)器或者電可擦寫可編程存儲(chǔ)器、寄存器等本領(lǐng)域成熟的存儲(chǔ)介質(zhì)中。該存儲(chǔ)介質(zhì)位于存儲(chǔ)器450,處理器410讀取存儲(chǔ)器450中的信息,結(jié)合其硬件完成上述方法的步驟。
可選地,處理器410具體用于:
從第一編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第一編碼參數(shù)所指示的字節(jié),所述第一編碼參數(shù)為所述部分字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
根據(jù)所述部分字節(jié)編碼函數(shù)對(duì)所述第一編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第一校驗(yàn)碼。
可選地,處理器410具體用于:
從第二編碼參數(shù)所對(duì)應(yīng)的目標(biāo)存儲(chǔ)節(jié)點(diǎn)中獲取所述第二編碼參數(shù)所指示的字節(jié),所述第二編碼參數(shù)為所述全字節(jié)編碼函數(shù)中的每個(gè)編碼參數(shù);
根據(jù)所述全字節(jié)編碼函數(shù)對(duì)所述第二編碼參數(shù)所指示的字節(jié)進(jìn)行編碼,得到第二校驗(yàn)碼。
可選地,處理器410具體用于:
根據(jù)所述目標(biāo)存儲(chǔ)節(jié)點(diǎn)的數(shù)量和所述命名節(jié)點(diǎn)所指定的校驗(yàn)節(jié)點(diǎn)的數(shù)量,確定所述部分字節(jié)編碼函數(shù)中第一參數(shù)的數(shù)量和緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)中的部分字節(jié)編碼函數(shù)所包含的相同第一參數(shù)的個(gè)數(shù),所述緊鄰的兩個(gè)校驗(yàn)節(jié)點(diǎn)所包含的部分字節(jié)編碼函數(shù)中第一參數(shù)的重疊個(gè)數(shù)最多。
圖13對(duì)應(yīng)的實(shí)施例或可選實(shí)施例中,第一編碼參數(shù)指的是部分字節(jié)編碼函數(shù)中的參數(shù),例如:圖3場(chǎng)景示例中的g1函數(shù)中的a1,a2,a3,a4,第二編碼參數(shù)指的是全字節(jié)編碼函數(shù)中的參數(shù),例如:f函數(shù)中的b1,b2,…,b9,b10,第一校驗(yàn)碼可以參閱c11進(jìn)行理解,第二校驗(yàn)碼可以參閱c21進(jìn)行理解,第一校驗(yàn)碼總體來(lái)說(shuō)是采用部分字節(jié)編碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼,第二字節(jié)是采用全字節(jié)編碼函數(shù)進(jìn)行編碼得到的校驗(yàn)碼。
圖13對(duì)應(yīng)的實(shí)施例或任一可選實(shí)施例中可以參閱圖1至圖5、圖7、圖10、 圖11部分的相關(guān)描述進(jìn)行理解,本處不做過(guò)多贅述。
本發(fā)明實(shí)施例提供的分布式存儲(chǔ)系統(tǒng),包括命名節(jié)點(diǎn)、多個(gè)第一存儲(chǔ)節(jié)點(diǎn)和多個(gè)第二存儲(chǔ)節(jié)點(diǎn),所述多個(gè)第一存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)已存儲(chǔ)文件的不同文件塊,所述多個(gè)第二存儲(chǔ)節(jié)點(diǎn)用于分布式存儲(chǔ)對(duì)所述不同文件塊進(jìn)行編碼得到的校驗(yàn)碼塊,每個(gè)第一存儲(chǔ)節(jié)點(diǎn)都包括第一數(shù)據(jù)處理裝置,每個(gè)第二存儲(chǔ)節(jié)點(diǎn)都包括第二數(shù)據(jù)處理裝置,每個(gè)第一數(shù)據(jù)處理裝置和每個(gè)第二數(shù)據(jù)處理裝置都與所述命名節(jié)點(diǎn)通信連接;
第一數(shù)據(jù)處理裝置可以參閱圖3部分的描述進(jìn)行理解,第二數(shù)據(jù)處理裝置可以參閱圖5部分的描述進(jìn)行理解,本處不再重復(fù)贅述。
與現(xiàn)有技術(shù)中數(shù)據(jù)無(wú)法同時(shí)兼顧數(shù)據(jù)存儲(chǔ)開(kāi)銷和數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷相比,本發(fā)明實(shí)施例提供的分布式存儲(chǔ)系統(tǒng),校驗(yàn)碼塊是通過(guò)部分字節(jié)編碼和全字節(jié)編碼結(jié)合得到的,降低了存儲(chǔ)開(kāi)銷,數(shù)據(jù)恢復(fù)時(shí)目標(biāo)文件塊中的一部分只需要依賴部分依賴文件塊就可以得到降低了數(shù)據(jù)恢復(fù)時(shí)的網(wǎng)絡(luò)開(kāi)銷。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。
以上對(duì)本發(fā)明實(shí)施例所提供的數(shù)據(jù)存儲(chǔ)的方法、恢復(fù)的方法、相應(yīng)裝置以及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。