專利名稱:一種數(shù)據(jù)修復(fù)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)復(fù)本修復(fù)方法及相應(yīng)的裝置。
背景技術(shù):
為提高數(shù)據(jù)的可用性和系統(tǒng)的穩(wěn)定性,現(xiàn)有的數(shù)據(jù)儲存模式通常采用分布式存儲 技術(shù),即將一份數(shù)據(jù)作為整體同時備份存儲在多個獨(dú)立的存儲器,形成多個數(shù)據(jù)復(fù)本,以便一處存儲的數(shù)據(jù)出現(xiàn)壞損或丟失時可通過其他數(shù)據(jù)復(fù)本實(shí)現(xiàn)數(shù)據(jù)恢復(fù)。比如FaceBook的相冊存儲系統(tǒng)、淘寶的圖片存儲系統(tǒng)TFS,G00gle的海量數(shù)據(jù)存儲系統(tǒng)GFS等。這些存儲系統(tǒng)采用的數(shù)據(jù)修復(fù)方法是全額復(fù)制技術(shù)。所謂全額復(fù)制技術(shù)是指在一處數(shù)據(jù)出現(xiàn)壞損或丟失后,將復(fù)本的全部數(shù)據(jù)均復(fù)制到壞損的存儲器,這種方式技術(shù)上簡單、處理方便,被廣泛使用于分布式存儲系統(tǒng)。但是,無論一份數(shù)據(jù)是局部壞損或全部丟失,全額復(fù)制技術(shù)均復(fù)制整份數(shù)據(jù)用以數(shù)據(jù)修復(fù),在數(shù)據(jù)復(fù)本含有的數(shù)據(jù)量比較大的情況下,將導(dǎo)致大量的數(shù)據(jù)拷貝開銷,特別在分布式存儲系統(tǒng)環(huán)境下,進(jìn)行大數(shù)據(jù)量傳輸不僅消耗磁盤總線帶寬,還將占用較多的網(wǎng)絡(luò)資源,影響到基于網(wǎng)絡(luò)的前端應(yīng)用服務(wù)。
發(fā)明內(nèi)容
為解決上述技術(shù)問題,本申請實(shí)施例提供一種數(shù)據(jù)修復(fù)方法及裝置,以減少數(shù)據(jù)修復(fù)過程中的數(shù)據(jù)拷貝開銷。本申請實(shí)施例提供的數(shù)據(jù)修復(fù)方法包括讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。優(yōu)選地,在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配序列號包括選擇多個存儲器中的一個存儲器作為主存儲器;在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號;將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個存儲器。進(jìn)一步優(yōu)選地,所述與數(shù)據(jù)對象對應(yīng)的序列號按預(yù)設(shè)步長順序增加,則讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較。進(jìn)一步優(yōu)選地,將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,所述方法還包括將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,則將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。
本申請實(shí)施例還提供了一種數(shù)據(jù)修復(fù)裝置。該裝置包括讀取單元、分配單元、比較單元和復(fù)制單元,其中
所述讀取單元,用于讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號由分配單元在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;所述比較單元,用于將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較;所述復(fù)制單元,用于將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。優(yōu)選地,所述分配單元包括選擇子單元、生成子單元和寫入子單元,其中所述選擇子單元,用于選擇多個存儲器中的一個存儲器作為主存儲器;所述生成子單元,用于在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號;所述寫入子單元,用于將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個從存儲器。進(jìn)一步優(yōu)選地,所述生成子單元生成的序列號按預(yù)設(shè)步長順序增加,則讀取單元用于讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,比較單元用于將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較。進(jìn)一步優(yōu)選地,所述分配單元還包括比較子單元和設(shè)置子單元,其中所述比較子單元,用于在將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,觸發(fā)設(shè)置子單元;所述設(shè)置子單元,用于將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。本申請實(shí)施例將數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,比較后獲得數(shù)據(jù)復(fù)本存儲器相對于數(shù)據(jù)異常存儲器多出的序列號,然后將多出序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器,從而實(shí)現(xiàn)數(shù)據(jù)修復(fù)。與現(xiàn)有技術(shù)相比,本申請實(shí)施例由于在將數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配了相應(yīng)的序列號,通過比較序列號得出數(shù)據(jù)異常存儲器相對于復(fù)本存儲器的差異后,僅需要將多出序列號對應(yīng)的數(shù)據(jù)對象而不是全部數(shù)據(jù)復(fù)制到數(shù)據(jù)異常存儲器,從而減少了復(fù)制的數(shù)據(jù)總量,節(jié)約了數(shù)據(jù)拷貝開銷。而且,在分布式存儲系統(tǒng)環(huán)境下,由于進(jìn)行數(shù)據(jù)修復(fù)需要復(fù)制的數(shù)據(jù)總量減小,對磁盤總線帶寬的消耗、網(wǎng)絡(luò)資源的占用量隨之減小,從而避免了對基于網(wǎng)絡(luò)的前端應(yīng)用服務(wù)的影響。此外,由于需要復(fù)制的數(shù)據(jù)總量減小,數(shù)據(jù)修復(fù)操作的時間變短,縮小了潛在的數(shù)據(jù)失效窗口,從而進(jìn)一步從整體上提高了數(shù)據(jù)可用性和系統(tǒng)穩(wěn)定性。
為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為本申請實(shí)施例一的數(shù)據(jù)修復(fù)方法流程圖;圖2為本申請實(shí)施例二的數(shù)據(jù)修復(fù)方法的序列號分配流程圖3為本申請實(shí)施例三的數(shù)據(jù)修復(fù)方法流程圖;圖4為本申請實(shí)施例的一種數(shù)據(jù)修復(fù)裝置結(jié)構(gòu)框圖。
具體實(shí)施例方式為了使本技術(shù)領(lǐng)域的人員更好地理解本申請中的技術(shù)方案,下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請保護(hù)的范圍。為使本申請的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對本申請作進(jìn)一步詳細(xì)的說明。
參見圖1,該圖示出了本申請實(shí)施例一的數(shù)據(jù)修復(fù)方法的流程。該實(shí)施例包括步驟SlOl :讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;數(shù)據(jù)存儲系統(tǒng)在存儲數(shù)據(jù)時,限于存儲速度和吞吐帶寬,通常不能將一個大塊數(shù)據(jù)一次性全部寫入存儲器,而需要將待存儲的數(shù)據(jù)劃分為多個數(shù)據(jù)塊,每個數(shù)據(jù)塊作為一個數(shù)據(jù)對象存入存儲器。本實(shí)施例在數(shù)據(jù)對象寫入相互作為備份的多個存儲器過程中統(tǒng)一分配序列號,該序列號與數(shù)據(jù)對象對應(yīng)。為了進(jìn)行數(shù)據(jù)修復(fù),需要讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,如果序列號僅與數(shù)據(jù)對象對應(yīng)、相互之間具有獨(dú)立時,需要讀取數(shù)據(jù)異常存儲器內(nèi)目前存儲的全部數(shù)據(jù)對象對應(yīng)的序列號;如果序列號不僅與數(shù)據(jù)對象對應(yīng),而且序列號之間還存在某種有規(guī)律性的關(guān)系,比如,逐次增加或減小,則可以僅讀取最大或最小的序列號。這里數(shù)據(jù)異常存儲器指存儲器存儲的數(shù)據(jù)因各種原因出現(xiàn)壞損、缺失等異常的存儲器,包括存儲器硬件整體出現(xiàn)故障數(shù)據(jù)全部損失后經(jīng)過故障排除后的存儲器。異常存儲器在系統(tǒng)重新啟動后將發(fā)起數(shù)據(jù)修復(fù)工作。步驟S102 :將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,獲取數(shù)據(jù)復(fù)本存儲器多出的序列號;讀取數(shù)據(jù)異常存儲器的序列號后,將該序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,以確定數(shù)據(jù)異常存儲器相對于數(shù)據(jù)復(fù)本存儲器出現(xiàn)的數(shù)據(jù)壞損或缺失。這里的數(shù)據(jù)復(fù)本存儲器指存儲器存儲的數(shù)據(jù)未出現(xiàn)壞損、缺失等異常情況而數(shù)據(jù)完備的存儲器。與前述讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號相對應(yīng),如果讀取的是數(shù)據(jù)異常存儲器的全部的序列號,則將這些序列號與數(shù)據(jù)復(fù)本存儲器的全部序列號進(jìn)行比較,如果讀取的僅是最大(小)序列號,則將該最大(小)序列號與數(shù)據(jù)復(fù)本存儲器的最大(小)序列號進(jìn)行比較。比較的目的在于確定兩個數(shù)據(jù)存儲器的差異,從而找出數(shù)據(jù)異常存儲器的數(shù)據(jù)異常點(diǎn)。經(jīng)過比較后,可獲得數(shù)據(jù)復(fù)本存儲器相對于數(shù)據(jù)異常存儲器多出的序列號,該序列號反映了數(shù)據(jù)異常存儲器內(nèi)的數(shù)據(jù)異常情況。步驟S103 :將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。數(shù)據(jù)復(fù)本存儲器多出的序列號實(shí)際上即是數(shù)據(jù)異常存儲器缺失的序列號。找出數(shù)據(jù)異常存儲器的缺少的序列號后,即可將數(shù)據(jù)復(fù)本存儲器中相應(yīng)序列號對應(yīng)的數(shù)據(jù)對象拷貝到數(shù)據(jù)異常存儲器,從而實(shí)現(xiàn)數(shù)據(jù)修復(fù)。本實(shí)施例將數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,比較后獲得數(shù)據(jù)復(fù)本存儲器相對于數(shù)據(jù)異常存儲器多出的序列號,然后將多出序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器,從而實(shí)現(xiàn)數(shù)據(jù)修復(fù)。與現(xiàn)有技術(shù)相比,本實(shí)施例由于在將數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配了相應(yīng)的序列號,通過比較序列號得出數(shù)據(jù)異常存儲器相對于復(fù)本存儲器的差異后,僅需要將多出序列號對應(yīng)的數(shù)據(jù)對象而不是全部數(shù)據(jù)復(fù)制到數(shù)據(jù)異常存儲器,從而減少了復(fù)制的數(shù)據(jù)總量,節(jié)約了數(shù)據(jù)拷貝開銷。而且,在分布式存儲系統(tǒng)環(huán)境下,由于進(jìn)行數(shù)據(jù)修復(fù)需要復(fù)制的數(shù)據(jù)總量減小,對磁盤總線帶寬的消耗、網(wǎng)絡(luò)資源的占用量隨之減小,從而避免了對基于網(wǎng)絡(luò)的前端應(yīng)用服務(wù)的影響。此外,由于需要復(fù)制的數(shù)據(jù)總量減小,數(shù)據(jù)修復(fù)操作的時間變短,縮小了潛在的數(shù)據(jù)失效窗口,從而進(jìn)一步從整體上提高了數(shù)據(jù)可用性和系統(tǒng)穩(wěn)定性。上述實(shí)施例一的步驟SlOl中提到數(shù)據(jù)對象的序列號在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配。要實(shí)現(xiàn)序列號的統(tǒng)一分配,其方式較多,比如每個存儲器維護(hù)一個計數(shù)器,各存儲器每接收到一個數(shù)據(jù)對象時該計數(shù)器的數(shù)值自動增加,由此確保在多個存儲器上的數(shù)據(jù)對象獲得的序列號一致;還比如將數(shù)據(jù)對象按照預(yù)設(shè)規(guī)則進(jìn)行運(yùn)算得到與該數(shù)據(jù)對象對應(yīng)的序列號,由于相互存在備份關(guān)系的多個存儲器在一次寫操作過程中寫入的數(shù)據(jù)對象相同,因此得到的序列號也相同,從而保證了序列號的統(tǒng)一分配。但是,上述方式的序列號存在多個“源”(每個存儲器一個“源”),如果某個存儲器出現(xiàn)計數(shù)錯誤或計算錯誤,將導(dǎo)致相互具有備份關(guān)系的多個存儲器存儲的數(shù)據(jù)對象并不一致,相應(yīng)地,每個存儲器內(nèi)的全部序列號也將存在“先天”差別,那么修復(fù)過程中多出的序列號并不能真正反映數(shù)據(jù)異常存儲器出現(xiàn)的數(shù)據(jù)缺失或壞損等異常情況。為此,本申請實(shí)施例優(yōu)選按照如下的方式實(shí)現(xiàn)數(shù)據(jù)對象寫入多個存儲器過程中的序列號的統(tǒng)一分配,該實(shí)現(xiàn)方法構(gòu)成本申請的另一種數(shù)據(jù)修復(fù)方法實(shí)施例。參見圖2,該圖示出了本申請實(shí)施例二的數(shù)據(jù)修復(fù)方法的序列號分配流程,該流程包括步驟S2011 :選擇多個存儲器中的一個存儲器作為主存儲器;如前所述,現(xiàn)有的數(shù)據(jù)存儲系統(tǒng)為了提高數(shù)據(jù)的可用性和系統(tǒng)的穩(wěn)定性,通常將一個數(shù)據(jù)同時存儲在多個相互獨(dú)立的存儲器中,以便在某個存儲器的數(shù)據(jù)出現(xiàn)問題時可以利用其他存儲器上存儲的復(fù)本進(jìn)行修復(fù)。這里的多個存儲器可以指位于一個集群存儲系統(tǒng)中各個存儲單元,也可以指通過網(wǎng)絡(luò)連接分布式存儲存儲器,無論何種架構(gòu),該存儲系統(tǒng)內(nèi)的各個存儲器通常具有等同地位。從多個存儲器中選擇一個存儲器作為主存儲器,該主存儲器就存儲數(shù)據(jù)本身而言仍有其他存儲器相同。選擇主存儲器可以隨機(jī)選擇,也可以按照一定的順序逐個選擇,或者按照某種概率分布進(jìn)行選擇。此外,該選擇過程還可以通過對主存儲器的“健康狀況”進(jìn)行監(jiān)控實(shí)現(xiàn)選擇,當(dāng)發(fā)現(xiàn)主存儲器發(fā)生故障后,從剩余的其他“健康”存儲器中重新選擇一臺充當(dāng)主存儲器。通過這些選擇機(jī)制保證只要有多個可用存儲器存在即可選擇出主存儲器。步驟S2012 :在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號;在選擇出主存儲器后,其他存儲器即處于從存儲器地位,整個存儲系統(tǒng)通過該主存儲器實(shí)現(xiàn)數(shù)據(jù)寫入控制,準(zhǔn)備存儲數(shù)據(jù)存儲系統(tǒng)的數(shù)據(jù)不直接發(fā)送到各存儲器,而是先由主存儲器接收數(shù)據(jù)對象,在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號,該序列號的生成方式可以有多種,比如按照自然序列生成,或根據(jù)數(shù)據(jù)對象生成;這些生成的序列號之間可以具有某種規(guī)律,比如按順序遞增或遞減,也可以不具有某種規(guī)律、相互之間獨(dú)立存在。步驟S2013 :將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個存儲器。生成數(shù)據(jù)序列號后,將數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個存儲器,由于序列號出于一“源”,從而保證了多個存儲器的序列號的統(tǒng)一。上述實(shí)施例二的數(shù)據(jù)修復(fù)方法中,如果在分布式存儲系統(tǒng)環(huán)境下,網(wǎng)絡(luò)出現(xiàn)異常,由主存儲器處將數(shù)據(jù)對象和序列號寫入多個存儲器的過程將可能導(dǎo)致某些存儲器未能正常接收數(shù)據(jù)對象和序列號,一旦出現(xiàn)這種情況,將導(dǎo)致后續(xù)的寫操作在未接收數(shù)據(jù)對象和序列號的存儲器與其他正常接收數(shù)據(jù)對象和序列號的存儲器被賦予不同的序列號。為了解 決該問題,本申請?zhí)岢隽艘环N序列號同步機(jī)制。該機(jī)制在將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,則將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。通過對接收數(shù)據(jù)對象和序列號的從存儲器接收的序列號與該從存儲器已經(jīng)存儲的序列號進(jìn)行比較,如果兩個序列號相差一個預(yù)設(shè)步長,說明該從存儲器在上次的數(shù)據(jù)對象和序列號寫入過程未發(fā)生異常情況,如果兩個序列號相差兩個或兩個預(yù)設(shè)步長以上,說明上次的寫入過程出現(xiàn)異常,未能成功寫入上次的數(shù)據(jù)對象和序列號,這種情況下,該從存儲器與其他存儲器的序列號即出現(xiàn)不一致現(xiàn)象,為此,需要將其他存儲器上已經(jīng)正確寫入的數(shù)據(jù)對象設(shè)置為無效,從而確保所有的存儲器的有效數(shù)據(jù)對象和序列號保持一致。上述兩個實(shí)施例中提到的序列號之間可以有規(guī)律,也可以沒有規(guī)律,盡管無論何種情況并不影響本申請發(fā)明目的的實(shí)現(xiàn)。但是,本申請優(yōu)選所述的序列號按照預(yù)設(shè)步長順序增加,這樣各個存儲器的序列號總體呈現(xiàn)“?!笔脚帕?,即先寫入的數(shù)據(jù)對象對應(yīng)的序列號小,后寫入的數(shù)據(jù)對象對應(yīng)的序列號大,這種情況下即可簡化本申請實(shí)施例的數(shù)據(jù)修復(fù)過程,由此,該簡化后的數(shù)據(jù)修復(fù)過程構(gòu)成本申請的第三實(shí)施例。參見附圖3,實(shí)施例三包括步驟S301 :讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,所述序列號在數(shù)據(jù)對象寫入存儲器過程中按照預(yù)設(shè)步長順序增加方式統(tǒng)一分配;步驟S302 :將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較,獲取數(shù)據(jù)復(fù)本存儲器多出的序列號;。步驟S303 :將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。本實(shí)施例由于數(shù)據(jù)對象對應(yīng)的序列號之間存在按照預(yù)設(shè)步長順序遞增的規(guī)律,序列號最大的數(shù)據(jù)對象是最新寫入的數(shù)據(jù)對象,處于數(shù)據(jù)對象存儲的最上層,在通過比較查找數(shù)據(jù)缺失或損壞時,只需要讀取數(shù)據(jù)異常存儲器中的最大序列號而不是讀取全部的序列號,僅需要與數(shù)據(jù)復(fù)本存儲器中的最大序列號進(jìn)行比較而不是全部的序列號比較,由此簡化了操作,節(jié)約了時間,提高了數(shù)據(jù)修復(fù)效率。以上內(nèi)容詳細(xì)描述了本申請的方法實(shí)施例,相應(yīng)地,本申請還給出了實(shí)現(xiàn)數(shù)據(jù)修復(fù)的裝置實(shí)施例。
參見圖4,該圖示出了本申請數(shù)據(jù)修復(fù)的裝置實(shí)施例的結(jié)構(gòu)示意圖。該裝置實(shí)施例包括讀取單元401、分配單元402、比較單元403和復(fù)制單元404,其中
所述讀取單元401,用于讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號由分配單元402在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;所述比較單元403,用于將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較;所述復(fù)制單元404,用于將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。該裝置實(shí)施例的工作過程是讀取單元401讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號由分配單元402在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;比較單元403將讀取的數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,然后由復(fù)制單元404將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。本裝置實(shí)施例將數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,比較后獲得數(shù)據(jù)復(fù)本存儲器相對于數(shù)據(jù)異常存儲器多出的序列號,然后將多出序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器,從而實(shí)現(xiàn)數(shù)據(jù)修復(fù)。與現(xiàn)有技術(shù)相比,本申請實(shí)施例由于在將數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配了相應(yīng)的序列號,通過比較序列號得出數(shù)據(jù)異常存儲器相對于復(fù)本存儲器的差異后,僅需要將多出序列號對應(yīng)的數(shù)據(jù)對象而不是全部數(shù)據(jù)復(fù)制到數(shù)據(jù)異常存儲器,從而減少了復(fù)制的數(shù)據(jù)總量,節(jié)約了數(shù)據(jù)拷貝開銷。而且,在分布式存儲系統(tǒng)環(huán)境下,由于進(jìn)行數(shù)據(jù)修復(fù)需要復(fù)制的數(shù)據(jù)總量減小,對磁盤總線帶寬的消耗、網(wǎng)絡(luò)資源的占用量隨之減小,從而避免了對基于網(wǎng)絡(luò)的前端應(yīng)用服務(wù)的影響。此外,由于需要復(fù)制的數(shù)據(jù)總量減小,數(shù)據(jù)修復(fù)操作的時間變短,縮小了潛在的數(shù)據(jù)失效窗口,從而進(jìn)一步從整體上提高了數(shù)據(jù)可用性和系統(tǒng)穩(wěn)定性。上述系統(tǒng)實(shí)施例中的分配單元在具體的應(yīng)用場景下可以有各種實(shí)現(xiàn)結(jié)構(gòu),本申請優(yōu)選按照如下的方式構(gòu)成分配單元。分配單元402包括選擇子單元4021、生成子單元4022和寫入子單元4023,其中所述選擇子單元4021,用于選擇多個存儲器中的一個存儲器作為主存儲器;所述生成子單元4022,用于在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號;所述寫入子單元4023,用于將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個從存儲器。該分配單元的選擇子單元4021從多個存儲器中選擇一個存儲器作為主存儲器,然后生成子單元4022在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號,寫入子單元4023將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個從存儲器。上述裝置實(shí)施例中生成子單元生成的序列號可以具有某種規(guī)律或者沒有規(guī)律,盡管無論序列號間存在何種關(guān)系,均不影響本發(fā)明的發(fā)明目的的實(shí)現(xiàn)。但是,本申請優(yōu)選生成子單元生成的序列號按預(yù)設(shè)步長順序增加,在這種情況下,讀取單元可以僅讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,比較單元可僅將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較。從而簡化了上述裝置實(shí)施例的工作過程。在這種簡化后的裝置實(shí)施例中,分配單元還可以進(jìn)一步包括比較子單元和設(shè)置子單元,其中比較子單元,用于在將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,觸發(fā)設(shè)置子單元;設(shè)置子單元,用于將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。通過這種方式可嚴(yán)格保證多個存儲器上的可用數(shù)據(jù)對象和序列號高度一致,從而有利于更加準(zhǔn)確地實(shí)現(xiàn)數(shù)據(jù)修復(fù)。為了描述的方便,描述以上裝置時以功能分為各種單元分別描述。當(dāng)然,在實(shí)施本申請時可以把各單元的功能在同一個或多個軟件和/或硬件中實(shí)現(xiàn)。 通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實(shí)施例或者實(shí)施例的某些部分所述的方法。本說明書中的各個實(shí)施例均采用遞進(jìn)的方式描述,各個實(shí)施例之間相同相似的部分互相參見即可,每個實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實(shí)施。本申請可用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如個人計算機(jī)、服務(wù)器計算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。本申請可以在由計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中實(shí)踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。以上所述僅是本申請的具體實(shí)施方式
,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本申請的保護(hù)范圍。
權(quán)利要求
1.一種數(shù)據(jù)修復(fù)方法,其特征在于,該方法包括 讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配; 將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配序列號包括 選擇多個存儲器中的一個存儲器作為主存儲器; 在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號; 將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個從存儲器。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述與數(shù)據(jù)對象對應(yīng)的序列號按預(yù)設(shè)步長順序增加,則讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,所述方法還包括 將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,則將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。
5.一種數(shù)據(jù)修復(fù)裝置,其特征在于,該裝置包括讀取單元、分配單元、比較單元和復(fù)制單元,其中 所述讀取單元,用于讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號由分配單元在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配; 所述比較單元,用于將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較; 所述復(fù)制單元,用于將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述分配單元包括選擇子單元、生成子單元和寫入子單元,其中 所述選擇子單元,用于選擇多個存儲器中的一個存儲器作為主存儲器; 所述生成子單元,用于在主存儲器接收數(shù)據(jù)對象后生成與該數(shù)據(jù)對象對應(yīng)的序列號; 所述寫入子單元,用于將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入到多個從存儲器。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述生成子單元生成的序列號按預(yù)設(shè)步長順序增加,則讀取單元用于讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的最大序列號,比較單元用于將數(shù)據(jù)異常存儲的最大序列號與數(shù)據(jù)復(fù)本存儲器的最大序列號進(jìn)行比較。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述分配單元還包括比較子單元和設(shè)置子單元,其中 所述比較子單元,用于在將所述數(shù)據(jù)對象和對應(yīng)的序列號寫入多個從存儲器之前,將從存儲器接收到的序列號與從存儲器內(nèi)數(shù)據(jù)對象的當(dāng)前最大序列號進(jìn)行比較,如果接收的序列號大于從存儲器當(dāng)前最大序列號兩個預(yù)設(shè)步長以上,觸發(fā)設(shè)置子單元;所述設(shè)置子單元 ,用于將多出的序列號對應(yīng)的數(shù)據(jù)對象設(shè)置為無效。
全文摘要
本申請實(shí)施例公開了一種數(shù)據(jù)修復(fù)方法。該方法包括讀取數(shù)據(jù)異常存儲器內(nèi)數(shù)據(jù)對象的序列號,所述序列號在數(shù)據(jù)對象寫入多個存儲器過程中統(tǒng)一分配;將數(shù)據(jù)異常存儲器的序列號與數(shù)據(jù)復(fù)本存儲器的序列號進(jìn)行比較,將數(shù)據(jù)復(fù)本存儲器多出的序列號對應(yīng)的數(shù)據(jù)對象復(fù)制到數(shù)據(jù)異常存儲器以實(shí)現(xiàn)數(shù)據(jù)修復(fù)。本申請實(shí)施例還公開了一種數(shù)據(jù)修復(fù)裝置。本申請實(shí)施例通過比較序列號得出數(shù)據(jù)異常存儲器相對于復(fù)本存儲器的差異后,僅需要將多出序列號對應(yīng)的數(shù)據(jù)對象而不是全部數(shù)據(jù)復(fù)制到數(shù)據(jù)異常存儲器,從而減少了復(fù)制的數(shù)據(jù)總量,節(jié)約了數(shù)據(jù)拷貝開銷。
文檔編號G06F11/14GK102629223SQ20121004883
公開日2012年8月8日 申請日期2012年2月28日 優(yōu)先權(quán)日2012年2月28日
發(fā)明者劉曉云, 李劍宇 申請人:北京搜狐新媒體信息技術(shù)有限公司