一種數(shù)據(jù)處理方法及重刪引擎的制作方法
【專利摘要】本發(fā)明實施例公開了一種數(shù)據(jù)處理方法及重刪引擎。該數(shù)據(jù)處理方法應(yīng)用于數(shù)據(jù)備份系統(tǒng),數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立至少兩個線程;所述重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),所述方法包括:所述重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);釋放調(diào)取的所述至少一個線程;并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。該方法避免了線程長時間等待IO返回,實現(xiàn)了對CPU充分高效的利用,以及對重復(fù)數(shù)據(jù)刪除性能的提升。
【專利說明】一種數(shù)據(jù)處理方法及重刪弓I擎
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,特別是涉及一種數(shù)據(jù)處理方法及重刪引擎。
【背景技術(shù)】
[0002]重復(fù)數(shù)據(jù)刪除技術(shù)是一種數(shù)據(jù)縮減技術(shù),通常用于基于磁盤的備份系統(tǒng),旨在減少存儲系統(tǒng)中使用的存儲容量,是存儲業(yè)界的熱門技術(shù)。
[0003]重復(fù)數(shù)據(jù)刪除技術(shù)通過記錄數(shù)據(jù)塊的指紋,并根據(jù)數(shù)據(jù)塊的指紋實現(xiàn)對重復(fù)數(shù)據(jù)的識別。在數(shù)據(jù)備份時,對于重復(fù)的數(shù)據(jù)塊直接引用,并修改元數(shù)據(jù)中的引用計數(shù),否則保存新的數(shù)據(jù)塊并記錄其指紋信息。
[0004]現(xiàn)有技術(shù)中,在應(yīng)用重復(fù)數(shù)據(jù)刪除技術(shù)進(jìn)行數(shù)據(jù)備份時,每條備份數(shù)據(jù)流占用一個線程直至該數(shù)據(jù)流備份完成,該方法中單個線程CPU運(yùn)算不夠充分,導(dǎo)致重復(fù)數(shù)據(jù)刪除性能無法提升。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例中提供了一種數(shù)據(jù)處理方法及重刪引擎,能夠高效利用CPU,提升重復(fù)數(shù)據(jù)刪除性能。
[0006]為了解決上述技術(shù)問題,本發(fā)明實施例公開了如下技術(shù)方案:
[0007]第一方面,提供一種數(shù)據(jù)處理方法,所述方法應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立至少兩個線程;所述重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),所述方法包括:
[0008]所述重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);
[0009]釋放調(diào)取的所述至少一個線程;
[0010]并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0011]結(jié)合上述第一方面,在第一種可能的實現(xiàn)方式中,所述方法還包括:
[0012]所述存儲節(jié)點調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲;
[0013]存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
[0014]結(jié)合上述第一方面,和/或第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),包括:
[0015]所述重刪引擎將所述數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),所述三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù);
[0016]所述重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),包括:
[0017]所述重刪引擎對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
[0018]結(jié)合上述第一方面,和/或第一種可能的實現(xiàn)方式,和/或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述重刪引擎調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)中的一個子任務(wù)的過程包括:
[0019]所述重刪引擎生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列;
[0020]當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,調(diào)取所述線程池中的一個線程執(zhí)行所述子任務(wù),并在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程;
[0021]其中,所述子任務(wù)為所述數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
[0022]第二方面,提供一種重刪引擎,所述重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括所述重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;所述重刪引擎包括:
[0023]劃分單元,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù);
[0024]線程處理單元,用于調(diào)取所述線程池中的至少一個線程;在查重單元執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù)后,釋放調(diào)取的所述至少一個線程;
[0025]所述查重單元,用于占用所述線程處理單元調(diào)取的線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);
[0026]數(shù)據(jù)發(fā)送單元,用于當(dāng)所述查重單元沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0027]結(jié)合上述第二方面,在第一種可能的實現(xiàn)方式中,所述劃分單元,具體用于將所述數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),所述三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù);
[0028]所述查重單元,具體用于對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
[0029]結(jié)合上述第二方面,和/或第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述查重單元包括:
[0030]生成子單元,用于生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列;
[0031]執(zhí)行子單元,用于當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,占用所述線程處理單元調(diào)取的所述線程池中的一個線程執(zhí)行所述子任務(wù);
[0032]所述線程處理單元,具體用于在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程;
[0033]其中,所述子任務(wù)為所述數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
[0034]結(jié)合上述第二方面,和/或第一種可能的實現(xiàn)方式,和/或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,
[0035]第三方面,還提供一種數(shù)據(jù)備份系統(tǒng),包括重刪引擎和存儲節(jié)點,其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;
[0036]所述重刪引擎,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);釋放調(diào)取的所述至少一個線程;并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0037]結(jié)合上述第三方面,在第一種可能的實現(xiàn)方式中,所述存儲節(jié)點,用于調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲;存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
[0038]第四方面,還提供一種重刪引擎,所述重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;所述重刪引擎包括處理器和存儲器;
[0039]所述存儲器中存儲有一段程序代碼,所述處理器用于讀取所述存儲器中的程序代碼,并執(zhí)行以下步驟:
[0040]將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù);
[0041]調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);
[0042]釋放調(diào)取的所述至少一個線程;
[0043]并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0044]本發(fā)明實施例通過將主要消耗CPU資源的數(shù)據(jù)查重任務(wù)獨立占用至少一個線程,從而在進(jìn)行數(shù)據(jù)備份時,避免了線程長時間等待IO返回,在對某一數(shù)據(jù)占用一線程執(zhí)行存儲任務(wù)時,可以對另一數(shù)據(jù)占用另一線程執(zhí)行數(shù)據(jù)查重任務(wù),從而實現(xiàn)了對CPU充分高效的利用,以及對重復(fù)數(shù)據(jù)刪除性能的提升。
【專利附圖】
【附圖說明】
[0045]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0046]圖1為本發(fā)明實施例一種數(shù)據(jù)處理的方法流程圖;
[0047]圖2為本發(fā)明實施例另一種數(shù)據(jù)處理的方法流程圖;
[0048]圖3為本發(fā)明實施例中對第一文件數(shù)據(jù)進(jìn)行數(shù)據(jù)分塊的方法流程圖;
[0049]圖4為本發(fā)明實施例中對第一數(shù)據(jù)塊進(jìn)行指紋計算的方法流程圖;
[0050]圖5為本發(fā)明實施例中對第一數(shù)據(jù)塊的指紋信息進(jìn)行查重的方法流程圖;
[0051]圖6為本發(fā)明實施例一種重刪引擎的結(jié)構(gòu)示意圖;[0052]圖7為本發(fā)明實施例中查重單元的結(jié)構(gòu)示意圖。
【具體實施方式】
[0053]為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明實施例中技術(shù)方案作進(jìn)一步詳細(xì)的說明。
[0054]現(xiàn)有技術(shù)中,數(shù)據(jù)流的備份包含重復(fù)數(shù)據(jù)刪除過程以及數(shù)據(jù)存儲過程,其中,重復(fù)數(shù)據(jù)刪除過程也即數(shù)據(jù)查重包括數(shù)據(jù)分塊、指紋計算和查重(查詢重復(fù)數(shù)據(jù))子流程,數(shù)據(jù)存儲包括對去重后的數(shù)據(jù)下盤存儲的子流程。每條備份數(shù)據(jù)流占用一個線程直至該數(shù)據(jù)流備份完成。在備份過程中,重復(fù)數(shù)據(jù)刪除過程中的數(shù)據(jù)分塊、指紋計算和查重(查詢重復(fù)數(shù)據(jù))三個子流程消耗主要的CPU資源,而對去重后的數(shù)據(jù)下盤存儲的子流程幾乎不消耗CPU資源,然而,在對去重后的數(shù)據(jù)下盤存儲的子流程占了整個數(shù)據(jù)備份流程的較多時間,在該存儲過程中CPU幾乎閑置,因此,采用如此按照每條備份流占用一個線程直至該流備份完成的方法,會使得線程長時間等待IO返回,CPU使用不充分,導(dǎo)致重復(fù)數(shù)據(jù)刪除性能無法提升,尤其是在高并發(fā)備份的場景下以上問題更為突出,會導(dǎo)致并發(fā)度不足,影響整體備份性能,且備份性能不能做到按預(yù)期的線性度提升的問題。
[0055]基于此,本發(fā)明實施例提供了一種新的數(shù)據(jù)處理方法及重刪引擎,通過將主要消耗CPU資源的數(shù)據(jù)查重任務(wù)獨立占用至少一個線程,從而可以充分高效的利用CPU,增強(qiáng)任務(wù)間并發(fā)能力,提升了重復(fù)數(shù)據(jù)刪除性能。
[0056]參見圖1,為本發(fā)明實施例一種數(shù)據(jù)處理方法流程圖。
[0057]本發(fā)明實施例應(yīng)用于數(shù)據(jù)備份系統(tǒng),該數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立至少兩個線程,該數(shù)據(jù)處理方法可以包括:
[0058]步驟101,重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù)。
[0059]重刪引擎可以將數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),該三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)。
[0060]其中,數(shù)據(jù)分塊即將數(shù)據(jù)進(jìn)行分塊獲得一個或多個數(shù)據(jù)塊,指紋計算即對一個或多個數(shù)據(jù)塊分別進(jìn)行指紋計算獲得每個數(shù)據(jù)塊的指紋信息,查重即查詢各存儲節(jié)點中是否與各數(shù)據(jù)塊的指紋信息相同的指紋信息。本發(fā)明實施例中數(shù)據(jù)分塊、指紋計算和查重的方法分別與現(xiàn)有技術(shù)中的數(shù)據(jù)分塊、指紋計算和查重方法相同,此處不再贅述。該步驟無需在每次對數(shù)據(jù)進(jìn)行處理時重復(fù)執(zhí)行,可以在將數(shù)據(jù)重刪任務(wù)劃分成上述三個子任務(wù)后,對每個需要進(jìn)行處理的數(shù)據(jù)依次執(zhí)行上述子任務(wù)。
[0061]當(dāng)然,在其它實施例中,該重刪引擎還可以將數(shù)據(jù)重刪任務(wù)劃分為其它子任務(wù),例如,還可以包括網(wǎng)絡(luò)互連子任務(wù)等,不局限于上述三個子任務(wù)。
[0062]步驟102,重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)。
[0063]當(dāng)線程池中具有空閑線程時,重刪引擎即可調(diào)取至少一個線程對需要進(jìn)行數(shù)據(jù)處理的第一文件的數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù),其中,第一文件的數(shù)據(jù)僅為舉例,并非限定或特指。[0064]該數(shù)據(jù)查重任務(wù)所包含的子任務(wù)可以占用一個線程,也可以占用多個線程,例如,數(shù)據(jù)查重任務(wù)中的數(shù)據(jù)分塊、指紋計算和查重三個子任務(wù)共占用一個線程,或者數(shù)據(jù)分塊和指紋計算兩個子任務(wù)占用一個線程,查重子任務(wù)占用另一個線程,或者數(shù)據(jù)分塊、指紋計算和查重三個子任務(wù)各自占用一個線程,對于同一備份數(shù)據(jù)的數(shù)據(jù)分塊、指紋計算、查重以及存儲需要順序執(zhí)行。對于非同一備份數(shù)據(jù),上述子任務(wù)可以并行執(zhí)行。
[0065]在另一實施例中,若數(shù)據(jù)分塊、指紋計算和查重三個子任務(wù)各自占用一個線程,則該重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),具體可以包括:
[0066]重刪引擎對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
[0067]在具體執(zhí)行某一子任務(wù)時,該重刪引擎具體可以執(zhí)行以下過程:
[0068]重刪引擎生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列;
[0069]當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,調(diào)取所述線程池中的一個線程執(zhí)行所述子任務(wù),并在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程;
[0070]其中,所述子任務(wù)可以是數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
[0071]在對第一文件的數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù),查詢存儲節(jié)點是否存在第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)后,無論結(jié)果如何,均執(zhí)行步驟103,并在沒有查詢到第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,執(zhí)行步驟104。
[0072]步驟103,釋放調(diào)取的所述至少一個線程。
[0073]在數(shù)據(jù)查重任務(wù)包含的所有子任務(wù)完成后,無論是否在各存儲節(jié)點查詢到第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù),均釋放數(shù)據(jù)查重任務(wù)占用的線程。由于數(shù)據(jù)查重為主要消耗CPU資源的過程,而后續(xù)存儲過程中CPU幾乎閑置,所以,通過讓數(shù)據(jù)查重占用的線程與后續(xù)存儲子任務(wù)占用的線程相互獨立,可以使得在對第二文件的數(shù)據(jù)進(jìn)行備份,尤其是對第二文件的數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù)時,可以復(fù)用對第一文件的數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù)后所釋放的線程,從而避免CPU的閑置,實現(xiàn)充分高效的利用CPU。
[0074]步驟104,當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0075]當(dāng)查詢到第一文件數(shù)據(jù)的重復(fù)數(shù)據(jù)時,例如,在各存儲節(jié)點查詢不到與第一文件數(shù)據(jù)的任一數(shù)據(jù)塊的指紋信息相同的指紋信息時,或者,只查詢到與第一文件數(shù)據(jù)的部分?jǐn)?shù)據(jù)塊的指紋信息相同的指紋信息時,將沒有查詢到的第一文件數(shù)據(jù)的數(shù)據(jù)塊及其指紋信息發(fā)送到存儲節(jié)點進(jìn)行存儲。若查詢到與第一文件數(shù)據(jù)的所有數(shù)據(jù)塊的指紋信息完全相同的指紋信息時,不再存儲第一文件的數(shù)據(jù),直接修改已存儲的第一文件數(shù)據(jù)的重復(fù)數(shù)據(jù)的引用計數(shù)。
[0076]在存儲節(jié)點進(jìn)行存儲時執(zhí)行步驟105?106。
[0077]步驟105,存儲節(jié)點調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲。
[0078]在具體的存儲過程中,當(dāng)線程池中存在空閑線程時,即可調(diào)取線程存儲各存儲節(jié)點中不存在的所有第一文件數(shù)據(jù)的數(shù)據(jù)塊及其指紋信息。
[0079]步驟106,存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
[0080]本發(fā)明實施例通過將主要消耗CPU資源的數(shù)據(jù)查重任務(wù)和幾乎不消耗CPU資源的數(shù)據(jù)存儲任務(wù)分別通過相互獨立的線程執(zhí)行,這樣在對第一文件的數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù)后即可釋放其占用的線程,在對第一文件的數(shù)據(jù)采用另一線程執(zhí)行數(shù)據(jù)存儲任務(wù)時,可以復(fù)用數(shù)據(jù)查重任務(wù)釋放的線程對其他數(shù)據(jù)進(jìn)行備份,尤其是對其他數(shù)據(jù)執(zhí)行數(shù)據(jù)查重任務(wù),這樣就可以避免CPU的閑置,避免線程長時間等待IO返回,從而實現(xiàn)了對CPU充分高效的利用,以及對重復(fù)數(shù)據(jù)刪除性能的提升。
[0081]參見圖2,為本發(fā)明實施例另一種數(shù)據(jù)處理的方法流程圖。
[0082]該方法可以包括:
[0083]步驟201,將第一文件的數(shù)據(jù)寫入緩沖區(qū),并對第一文件的數(shù)據(jù)進(jìn)行分塊獲得至少
一個第一數(shù)據(jù)塊。
[0084]本發(fā)明實施例中可以在系統(tǒng)中預(yù)先建立一個線程池,在沒有待執(zhí)行任務(wù)前,所有線程空閑,等待調(diào)度。將數(shù)據(jù)備份過程劃分為多個獨立的子任務(wù),由多線程執(zhí)行,每個子任務(wù)對應(yīng)一個隊列,如數(shù)據(jù)分塊、指紋計算、查重和存儲。其中,數(shù)據(jù)查重任務(wù)中包含的子任務(wù)包括數(shù)據(jù)分塊、指紋計算、查重,數(shù)據(jù)存儲任務(wù)中包含存儲子任務(wù)。
[0085]在對第一文件數(shù)據(jù)的備份任務(wù)啟動時,首先將第一文件的數(shù)據(jù)寫入緩沖區(qū)中,寫入緩沖區(qū)成功后,如圖3所示,執(zhí)行以下步驟:
[0086]步驟301,對第一文件數(shù)據(jù)生成第一分塊任務(wù),并將第一分塊任務(wù)添加至分塊任務(wù)隊列。
[0087]步驟302,當(dāng)分塊任務(wù)隊列中的第一分塊任務(wù)被調(diào)度執(zhí)行時,所述第一分塊任務(wù)占用一個線程,對第一文件數(shù)據(jù)分塊獲得至少一個第一數(shù)據(jù)塊,并釋放第一分塊任務(wù)占用的線程。
[0088]例如,可以首先將待備份的第一文件數(shù)據(jù)固定組織成小于等于9MB大小的大塊數(shù)據(jù),然后對上述9MB數(shù)據(jù)執(zhí)行步驟302,劃分為4?12K大小的第一數(shù)據(jù)塊。具體的,可以采用現(xiàn)有的定長或變長分塊算法對第一數(shù)據(jù)進(jìn)行分塊。當(dāng)然,上述“9MB”及“4?12K”僅是舉例,具體大小數(shù)值可以根據(jù)需要設(shè)置。在分塊完成后,或在釋放第一分塊任務(wù)占用的線程后,執(zhí)行步驟202。
[0089]步驟202,對所述至少一個第一數(shù)據(jù)塊進(jìn)行指紋計算,獲得所述至少一個第一數(shù)據(jù)塊的指紋信息。
[0090]分別對第一數(shù)據(jù)塊進(jìn)行指紋計算,獲得各第一數(shù)據(jù)塊的指紋信息。如圖4所示,該過程可以包括:
[0091]步驟401,對所述至少一個第一數(shù)據(jù)塊生成第一指紋計算任務(wù),并將第一指紋計算任務(wù)添加至指紋計算任務(wù)隊列。
[0092]步驟402,當(dāng)指紋計算任務(wù)隊列中第一指紋計算任務(wù)被調(diào)度執(zhí)行時,所述第一指紋計算任務(wù)占用一個線程,對所述至少一個第一數(shù)據(jù)塊進(jìn)行指紋計算,獲得所述至少一個第一數(shù)據(jù)塊的指紋信息,并釋放第一指紋計算任務(wù)占用的線程。[0093]具體的,可以采用如SHA1、MD5等強(qiáng)哈希(hash)算法對一個或多個第一數(shù)據(jù)塊分別進(jìn)行指紋計算,在計算完成后,或在釋放第一指紋計算任務(wù)占用的線程后,執(zhí)行步驟203。
[0094]步驟203,在各存儲節(jié)點查詢是否存在至少一個與所述第一數(shù)據(jù)塊的指紋信息重復(fù)的指紋信息。
[0095]查詢各存儲節(jié)點是否存在與一個或多個第一數(shù)據(jù)塊的指紋信息相同的指紋信息,如圖5所示,該過程進(jìn)一步包括:
[0096]步驟501,對所述至少一個第一數(shù)據(jù)塊的指紋信息生成第一重復(fù)塊查詢?nèi)蝿?wù),并將第一重復(fù)塊查詢?nèi)蝿?wù)添加至查詢?nèi)蝿?wù)隊列。
[0097]步驟502,當(dāng)查詢?nèi)蝿?wù)隊列中第一重復(fù)塊查詢?nèi)蝿?wù)被調(diào)度執(zhí)行時,所述第一重復(fù)塊查詢?nèi)蝿?wù)占用一個線程,在各節(jié)點查詢是否存在至少一個與第一數(shù)據(jù)塊的指紋信息重復(fù)的指紋信息,并在查詢完成后釋放第一重復(fù)塊查詢?nèi)蝿?wù)占用的線程。
[0098]在上述查重過程中,為了便于快速查找重復(fù)的指紋信息,還可以執(zhí)行以下過程:
[0099]首先,當(dāng)連續(xù)的第一數(shù)據(jù)塊大小累加最接近或達(dá)到IMB的時候,則認(rèn)為當(dāng)前該部分連續(xù)的第一數(shù)據(jù)塊屬于一個segment,然后在該segment的各第一數(shù)據(jù)塊的指紋信息中選擇最小的指紋信息作為該segment的segment id ;后續(xù)對其他第一數(shù)據(jù)塊依次按照上述過程劃分,該過程即為segment劃分。
[0100]按照上述segment劃分,備份進(jìn)入的9MB數(shù)據(jù)必然會有9個Segment id。(后續(xù)經(jīng)過重刪存到磁盤上的單一實例也可以按照小于等于9MB的大小進(jìn)行組織稱為一個容器(Container),每個Container也包含9個Segment id。當(dāng)然,容器的大小不一定為9MB,其大小也可以根據(jù)實際情況進(jìn)行設(shè)定。)
[0101]在步驟502進(jìn)行查重時,將備份進(jìn)來的9MB數(shù)據(jù)的Segment id與各節(jié)點容器中存儲的Segment id全集做相似性分析,選出命中Segment id個數(shù)最高的6個容器,并在這6個容器中進(jìn)行重復(fù)塊查詢。若各節(jié)點無符合的容器,則不會加載任何的容器進(jìn)行查重,僅在本次9MB (或其他大小)的數(shù)據(jù)內(nèi)部進(jìn)行查重。
[0102]前面的劃分segment的個數(shù)以及查重選中的容器個數(shù),如前述的6個容器,不做限制,可根據(jù)具體的實現(xiàn)進(jìn)行調(diào)整,不是固定不變的值。其中,容器的個數(shù)可以減少或增加,只需保證小于等于segment的個數(shù)即可。上述方法主要目的是減小查重的范圍,將查重的范圍縮小到我們可接受的范圍內(nèi)。當(dāng)然也可以取消這個Segment id,直接做全局的數(shù)據(jù)塊的指紋信息的查重。
[0103]若在某存儲節(jié)點查詢到重復(fù)的第一數(shù)據(jù)塊的指紋信息,則直接修改已存儲的重復(fù)的第一數(shù)據(jù)塊的指紋信息的引用計數(shù)。對于沒有查詢到重復(fù)指紋信息的第一數(shù)據(jù)塊的指紋信息,執(zhí)行步驟204。
[0104]步驟204,存儲各存儲節(jié)點中不存在的第一數(shù)據(jù)塊及其指紋信息,完成備份。
[0105]具體的,可以是生成第一存儲任務(wù),并將該第一存儲任務(wù)添加至存儲任務(wù)隊列,當(dāng)該存儲任務(wù)隊列中的第一存儲任務(wù)被調(diào)度執(zhí)行時,第一存儲任務(wù)占用一個線程,對各節(jié)點中均不存在的第一數(shù)據(jù)塊及其指紋信息進(jìn)行存儲,并可更新對應(yīng)的文件元數(shù)據(jù)信息。在存儲完成后,釋放第一存儲任務(wù)所占用的線程,完成備份。
[0106]該方法在進(jìn)行數(shù)據(jù)備份時,避免了線程長時間等待IO返回,在對某一數(shù)據(jù)占用一線程執(zhí)行存儲任務(wù)時,可以對另一數(shù)據(jù)調(diào)用另一線程執(zhí)行數(shù)據(jù)分塊、指紋計算或重查任務(wù),從而實現(xiàn)了對CPU充分高效的利用,以及對重復(fù)數(shù)據(jù)刪除性能的提升。在多并發(fā)備份流時,可以最快的將行,提升并發(fā)備份性能。
[0107]例如:多個用戶在同一時間段內(nèi)備份文件,則會存在多個備份任務(wù)處于不同的重刪過程的情況,如A文件在數(shù)據(jù)分塊,B文件在寫磁盤保存單一實例數(shù)據(jù),C文件在計算指紋,D文件在寫磁盤保存單一實例數(shù)據(jù),E、F文件待啟動備份,若采用現(xiàn)有技術(shù)方法,則會導(dǎo)致B文件和D文件占用的線程處于空閑等待寫磁盤的IO返回狀態(tài),但CPU資源無法釋放給其他需要CPU運(yùn)算的任務(wù)使用,導(dǎo)致E文件必須等到A?D其中一個任務(wù)完成后才可以開始備份;而采用本發(fā)明實施例的方法,在B和D文件開始寫盤操作后,該IO操作交由文件系統(tǒng)處理,而B和D文件占用的線程得以釋放,同時可以發(fā)現(xiàn)E、F文件急需進(jìn)行分塊、計算指紋等操作,因此可以即刻啟動備份操作,從而使整體系統(tǒng)呈流水線方式工作,使吞吐量提升,達(dá)到提升備份性能的目的。
[0108]以上是對本發(fā)明方法實施例的描述,下面對實現(xiàn)上述方法的裝置進(jìn)行介紹。
[0109]參見圖6,為本發(fā)明實施例一種重刪引擎的結(jié)構(gòu)示意圖。
[0110]該重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括所述重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程。該重刪引擎可以包括:
[0111]劃分單元601,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù);
[0112]線程處理單元602,用于調(diào)取所述線程池中的至少一個線程;在查重單元603執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù)后,釋放調(diào)取的所述至少一個線程;
[0113]查重單元603,用于占用所述線程處理單元602調(diào)取的線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);
[0114]數(shù)據(jù)發(fā)送單元604,用于當(dāng)所述查重單元603沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0115]在劃分單元601將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù)后,線程處理單元602調(diào)取所述線程池中的至少一個線程,由查重單元603占用所述線程處理單元調(diào)取的線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù),在查重單元603執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù)后,線程處理單元603釋放調(diào)取的所述至少一個線程,并當(dāng)所述查重單元603沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,數(shù)據(jù)發(fā)送單元604將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0116]本發(fā)明實施例通過上述單元將主要消耗CPU資源的數(shù)據(jù)查重任務(wù)占用獨立的線程,從而在進(jìn)行數(shù)據(jù)備份時,避免了線程長時間等待IO返回,在對某一數(shù)據(jù)占用一線程執(zhí)行第二階段任務(wù)時,可以對另一數(shù)據(jù)占用另一線程執(zhí)行第一階段任務(wù),從而實現(xiàn)了對CPU充分高效的利用,以及對重復(fù)數(shù)據(jù)刪除性能的提升。
[0117]在本發(fā)明的另一實施例中,所述劃分單元,具體用于將所述數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),所述三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù);所述查重單元,具體用于對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
[0118]在另一實施例中,如圖7所示,該查重單元603可以進(jìn)一步包括:
[0119]生成子單元701,用于生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列;
[0120]執(zhí)行子單元702,用于當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,占用所述線程處理單元調(diào)取的所述線程池中的一個線程執(zhí)行所述子任務(wù);
[0121]所述線程處理單元,具體用于在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程;
[0122]其中,所述子任務(wù)為所述數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
[0123]本發(fā)明實施例還提供了另一種重刪引擎,該重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;所述重刪引擎包括處理器和存儲器;
[0124]其中,存儲器中存儲有一段程序代碼,處理器用于讀取該程序代碼,執(zhí)行以下步驟:
[0125]將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù);
[0126]調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);
[0127]釋放調(diào)取的所述至少一個線程;
[0128]并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0129]本發(fā)明實施例還提供了一種數(shù)據(jù)備份系統(tǒng),包括重刪引擎和存儲節(jié)點,其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;
[0130]重刪引擎,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);釋放調(diào)取的所述至少一個線程;并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
[0131]在另一實施例中,存儲節(jié)點,用于調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲;存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
[0132]本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機(jī)軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0133]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
[0134]在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0135]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
[0136]另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
[0137]所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(R0M,Read-Only Memory)、隨機(jī)存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0138]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種數(shù)據(jù)處理方法,其特征在于,所述方法應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立至少兩個線程;所述重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),所述方法包括: 所述重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù); 釋放調(diào)取的所述至少一個線程; 并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 所述存儲節(jié)點調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲; 存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述重刪引擎將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),包括: 所述重刪引擎將所述數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),所述三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù); 所述重刪引擎調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),包括: 所述重刪引擎對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述重刪引擎調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)中的一個子任務(wù)的過程包括: 所述重刪引擎生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列; 當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,調(diào)取所述線程池中的一個線程執(zhí)行所述子任務(wù),并在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程; 其中,所述子任務(wù)為所述數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
5.一種重刪引擎,其特征在于,所述重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括所述重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;所述重刪引擎包括: 劃分單元,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù); 線程處理單元,用于調(diào)取所述線程池中的至少一個線程;在查重單元執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù)后,釋放調(diào)取的所述至少一個線程; 所述查重單元,用于占用所述線程處理單元調(diào)取的線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù); 數(shù)據(jù)發(fā)送單元,用于當(dāng)所述查重單元沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
6.根據(jù)權(quán)利要求5所述的重刪引擎,其特征在于, 所述劃分單元,具體用于將所述數(shù)據(jù)查重任務(wù)劃分為三個子任務(wù),所述三個子任務(wù)依次為數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù); 所述查重單元,具體用于對輸入第一線程的所述第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)分塊子任務(wù),并輸出處理后數(shù)據(jù)至第二線程,在所述第二線程對所述第一線程處理后的數(shù)據(jù)執(zhí)行所述指紋計算子任務(wù),并輸出處理后數(shù)據(jù)至所述第三線程,在所述第三線程對所述第二線程處理后的數(shù)據(jù)執(zhí)行所述重復(fù)塊查詢子任務(wù),其中,所述第一線程、第二線程和第三線程分別為所述線程池中的任意一個線程。
7.根據(jù)權(quán)利要求6所述的重刪引擎,其特征在于,所述查重單元包括: 生成子單元,用于生成子任務(wù),并將所述子任務(wù)添加至所述子任務(wù)對應(yīng)的任務(wù)隊列; 執(zhí)行子單元,用于當(dāng)所述任務(wù)隊列中的所述子任務(wù)被調(diào)度執(zhí)行時,占用所述線程處理單元調(diào)取的所述線程池中的一個線程執(zhí)行所述子任務(wù); 所述線程處理單元,具體用于在所述子任務(wù)完成后釋放所述子任務(wù)占用的線程; 其中,所述子任務(wù)為所述數(shù)據(jù)分塊子任務(wù)、指紋計算子任務(wù)和重復(fù)塊查詢子任務(wù)中的任一子任務(wù)。
8.一種數(shù)據(jù)備份系統(tǒng),其特征在于,包括重刪引擎和存儲節(jié)點,其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;` 所述重刪引擎,用于將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù),調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù);釋放調(diào)取的所述至少一個線程;并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述存儲節(jié)點,用于調(diào)取所述線程池中的一個線程對所述第一文件的數(shù)據(jù)進(jìn)行存儲;存儲結(jié)束后,釋放所述存儲節(jié)點調(diào)取的所述線程。
10.一種重刪引擎,其特征在于,所述重刪引擎應(yīng)用于數(shù)據(jù)備份系統(tǒng),所述數(shù)據(jù)備份系統(tǒng)包括重刪引擎和存儲節(jié)點;其中,所述數(shù)據(jù)備份系統(tǒng)預(yù)先在線程池中建立有至少兩個線程;所述重刪引擎包括處理器和存儲器; 所述存儲器中存儲有一段程序代碼,所述處理器用于讀取所述存儲器中的程序代碼,并執(zhí)行以下步驟: 將數(shù)據(jù)查重任務(wù)劃分為至少一個子任務(wù); 調(diào)取所述線程池中的至少一個線程對第一文件的數(shù)據(jù)執(zhí)行所述數(shù)據(jù)查重任務(wù)包含的子任務(wù),以查詢所述存儲節(jié)點是否存在所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù); 釋放調(diào)取的所述至少一個線程; 并當(dāng)沒有查詢到所述第一文件的數(shù)據(jù)的重復(fù)數(shù)據(jù)時,將所述第一文件的數(shù)據(jù)發(fā)送到所述存儲節(jié)點進(jìn)行存儲。
【文檔編號】G06F17/30GK103488734SQ201310425874
【公開日】2014年1月1日 申請日期:2013年9月17日 優(yōu)先權(quán)日:2013年9月17日
【發(fā)明者】付旭東 申請人:華為技術(shù)有限公司