專利名稱:海量片段數(shù)據(jù)匯聚的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及一種對(duì)海量片段數(shù)據(jù)進(jìn)行處理,對(duì)其合并和匯聚的系統(tǒng)和方法。
背景技術(shù):
在計(jì)算機(jī)領(lǐng)域中有這樣一類文件,稱其為片段,它們是某個(gè)整體文件或數(shù)據(jù)的一部分。且分為兩種
1、片段自身無獨(dú)立意義,必須完全合并后,組成的整體才有意義。例如多媒體文件圖片、視頻、音樂。當(dāng)上傳時(shí),為了上傳速度快,以及少占用網(wǎng)絡(luò)帶寬,將其拆分為若干個(gè)小文件片段,然后分別上傳這個(gè)文件片段,服務(wù)器端接收片段后,將其按照一定的規(guī)則合并。將合并后的完整文件保存在服務(wù)器端。此類片段是
先有整體——切割為個(gè)體——上傳到服務(wù)器端——服務(wù)器端將其重新匯聚為整體
2、片段自身可以有獨(dú)立意義,合并成后的完整文件也有意義。如包含數(shù)據(jù)信息的文本文件(xml格式等),這些文本文件可以單獨(dú)產(chǎn)生,可以單獨(dú)閱讀和使用,而將其合并后,合并后的完整文本則是其它信息的合集??梢哉w使用。此類片段是
先有個(gè)體——上傳到服務(wù)器端——服務(wù)器端將其匯聚為整體以上兩種片段文件的數(shù)量都是不定的,由于上傳片段的客戶端不同,以及網(wǎng)絡(luò)延時(shí)等原因,服務(wù)器端也是無序接收到這些片段的。因此對(duì)于此類文件,不僅其片段需要統(tǒng)計(jì)分析和保存,還需將其按照一定規(guī)則進(jìn)行合并。對(duì)合并后的最終結(jié)果再進(jìn)行相應(yīng)處理和保存。當(dāng)海量該類無序片段數(shù)據(jù)需要處理時(shí),不僅需要處理的單個(gè)片段多,而且涉及到片段的合并規(guī)則,合并后的二次分析、統(tǒng)計(jì)以及保存,并且需要保證合并的正確性,單個(gè)片段需要驗(yàn)重,保證相同的片段只能被合并一次。不能將不是一個(gè)整體的片段合并為一體,因此這是一個(gè)復(fù)雜的處理過程,因此需要一種高效、快速、邏輯清晰的方法或框架。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本發(fā)明提供了一種海量片段數(shù)據(jù)匯聚的系統(tǒng)和方法,本發(fā)明采用消息隊(duì)列服務(wù)、內(nèi)存庫(kù)、文件型數(shù)據(jù)庫(kù)及守護(hù)進(jìn)程等多種技術(shù),能夠高效的處理和合并海量片段數(shù)據(jù)。并采用嚴(yán)謹(jǐn)?shù)暮喜⒉呗?,保證合并的正確性。首先是針對(duì)第一種(片段自身無獨(dú)立意義)海量片段數(shù)據(jù)的處理
1、由于片段是某一文件的一部分,因此要帶有此文件的唯一標(biāo)識(shí),好能通過此唯一標(biāo)識(shí)識(shí)別出此片段屬于哪個(gè)文件。本文稱其為父ID,將父ID作為上傳的片段文件名,每個(gè)片段上傳時(shí)都帶有此父ID。此ID將伴隨片段數(shù)據(jù)走完整個(gè)處理流程。2、對(duì)于第一種片段(片段自身無獨(dú)立意義),即被切割為片段的,將被切割的原始文件的MD5值作為文件的唯一標(biāo)識(shí),即片段的父ID
3、服務(wù)器端接收到片段后,按照片段的MD5值到片段緩存庫(kù)中進(jìn)行驗(yàn)重,如果此片段在緩存庫(kù)中已有,則不處理。即節(jié)省了服務(wù)器資源,又保證了不重復(fù)合并。合并時(shí)按照父ID 進(jìn)行合并,即將具有相同父ID的片段合并在一起。對(duì)于第一種海量片段數(shù)據(jù),本發(fā)明提供了一種海量片段數(shù)據(jù)匯聚的系統(tǒng),包括客戶端的片段上傳模塊,服務(wù)器端的緩存模塊、驗(yàn)證庫(kù)模塊、文件存儲(chǔ)模塊、片段接收模塊、片段處理模塊、片段合并模塊、片段匯聚模塊;
所述片段上傳模塊將片段數(shù)據(jù)上傳到服務(wù)器端,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID,所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)所屬文件的HASH值;
其中,此模塊部署在客戶端,按照策略,每個(gè)片段都帶有父ID,然后將片段上傳到服務(wù)器端。所述緩存模塊包括3個(gè)消息隊(duì)列,片段數(shù)據(jù)隊(duì)列、待合并片段隊(duì)列和合并結(jié)果待處理隊(duì)列;所述消息隊(duì)列采用后進(jìn)先出的原則。其中,
片段數(shù)據(jù)隊(duì)列片段數(shù)據(jù)隊(duì)列存放接收后未作任何處理的片段數(shù)據(jù),隊(duì)列采用后進(jìn)先出的原則。待合并片段隊(duì)列待合并片段隊(duì)列存放驗(yàn)重后,等待合并操作的片段數(shù)據(jù)。隊(duì)列采用后進(jìn)先出的原則。合并結(jié)果待處理隊(duì)列隊(duì)列存放已合并后的數(shù)據(jù)信息,隊(duì)列采用后進(jìn)先出的原則。為了提高隊(duì)列的讀取和寫入速度,此處可使用內(nèi)存級(jí)緩存庫(kù)。所述驗(yàn)證庫(kù)模塊存放已接收片段數(shù)據(jù)的HASH值; 其中,此處存放的是驗(yàn)重后的。數(shù)據(jù)不會(huì)有冗余。所述文件存儲(chǔ)模塊包括三部分,文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)庫(kù);
所述文件位置庫(kù)記錄已接收到的片段數(shù)據(jù)信息,以及合并后的文件存放的位置是在文件緩存庫(kù)中或者在文件最終存儲(chǔ)中;文件緩存庫(kù)存放尚未包含所有片段的文件;文件最終存儲(chǔ)庫(kù)保存包含所有片段的文件;
其中,片段最終處理結(jié)果都是文件,互相之間都是獨(dú)立的,沒有復(fù)雜的關(guān)系,且是海量級(jí)別的數(shù)據(jù),因而不適合存儲(chǔ)在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中。所以將其存儲(chǔ)于文件型數(shù)據(jù)庫(kù)中。文件可以按訪問頻度分為兩種,一種是尚未合并完全部片段的文件,這樣的文件在之后的處理過程中會(huì)被經(jīng)常的讀取和更新,通常稱之為熱數(shù)據(jù)。另一種是合并完全部片段的文件,以后讀取和更新的頻度較低,稱之為冷數(shù)據(jù)。熱數(shù)據(jù)在所有文件數(shù)據(jù)中所占的比率較低,且讀寫頻繁,所以將其存放在速度較快但空間有限的緩存庫(kù)中較好。冷數(shù)據(jù)比率較高,讀寫次數(shù)有限,所以將其存放在速度一般但空間充足的文件級(jí)存儲(chǔ)中較好。因此文件存儲(chǔ)模塊分三部分文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)。文件位置庫(kù)記錄已接收到的文件的片段信息,以及合并后的文件存放的位置,是存放在文件緩存庫(kù)中還是文件最終存儲(chǔ)中。文件緩存庫(kù)存放尚未包含所有片段的文件,即熱數(shù)據(jù)。
文件最終存儲(chǔ)上保存包含所有片段的文件,即冷數(shù)據(jù)。所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾;
也就是說,片段接收模塊主要是接收上傳的片段,接收的片段的接口可以采用http、 https、ssh、ftp、smb等服務(wù)。服務(wù)接收到片段后,將此片段存入片段數(shù)據(jù)隊(duì)列隊(duì)尾。片段接收模塊不做其它工作,保證接收模塊的高效性,能夠?qū)崟r(shí)接收所有其它服務(wù)傳送過來的片段,將其放入隊(duì)列中緩存并等待被處理。不會(huì)造成因?yàn)槠翁幚聿贿^來,而無法接收新的片段。所述片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并計(jì)算所述片段數(shù)據(jù)的 HASH值,驗(yàn)證所述HASH值是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則丟棄所述片段數(shù)據(jù),否則將所述片段數(shù)據(jù)的HASH值存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;
例如,從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段,并對(duì)片段數(shù)據(jù)做MD5,將其MD5值向片段驗(yàn)證庫(kù)驗(yàn)證該片段是否已經(jīng)接收過,如果片段驗(yàn)證庫(kù)中有此MD5值,則此片段已經(jīng)接收過,則不再重復(fù)處理此片段。減少冗余數(shù)據(jù)對(duì)系統(tǒng)的壓力。若無此MD5值,則此片段沒有接收過,先將此片段的MD5值存入片段驗(yàn)證庫(kù),以便下次驗(yàn)證,然后將此片段存入待合并片段隊(duì)列隊(duì)尾。所述片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;
也就是說,從待合并片段隊(duì)列隊(duì)頭獲取數(shù)據(jù),先從文件位置庫(kù)(內(nèi)存庫(kù))查看此片段的父ID是否存在,若不存在,則表明此文件的片段第一次來,因而此文件只有一個(gè)片段,不需要合并操作,將片段作為初始文件存入文件緩存庫(kù)。若此片段的父ID存在,則從文件緩存庫(kù)中將此文件已合并的結(jié)果取出,并和剛從隊(duì)列取出的片段進(jìn)行合并,并將結(jié)果存入合并結(jié)果待處理隊(duì)列隊(duì)尾。所述片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),計(jì)算所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID不相等, 則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID相等, 則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信肩、ο例如,從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取數(shù)據(jù),將合并結(jié)果數(shù)據(jù)做MD5運(yùn)算,然后跟父ID進(jìn)行對(duì)比,若此MD5值和父ID不相等,則說明還有片段沒有合并,所以此文件合并尚未完成,將此數(shù)據(jù)存入文件緩存庫(kù)。若MD5值跟父ID相同,則表明文件的所有片段都以合并完成,將此數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并將最終結(jié)果數(shù)據(jù)存入數(shù)據(jù)庫(kù)。并更新文件位置庫(kù)中該父文件的位置。相應(yīng)的本發(fā)明還提供了一種海量片段數(shù)據(jù)匯聚的方法,適用上述的系統(tǒng),所述方法包括
片段上傳模塊將片段數(shù)據(jù)上傳給片段接收模塊,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID,所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)所屬文件的HASH值; 片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾;片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并計(jì)算所述片段數(shù)據(jù)的HASH值,驗(yàn)證所述HASH值是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則丟棄所述片段數(shù)據(jù),否則將所述片段數(shù)據(jù)的HASH值存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;
片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;
片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),計(jì)算所述文件數(shù)據(jù)的HASH 與文件數(shù)據(jù)的父ID進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。進(jìn)一步的,所述消息隊(duì)列采用后進(jìn)先出的原則。進(jìn)一步的,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。進(jìn)一步的,所述片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括 http、https、ssh、ftp、smbo其次針對(duì)第二種(片段自身可以有獨(dú)立意義,合并成后的完整文件也有意義)海量片段數(shù)據(jù)的處理
1、由于片段是某一文件的一部分,因此要帶有此文件的唯一標(biāo)識(shí),好能通過此唯一標(biāo)識(shí)識(shí)別出此片段屬于哪個(gè)文件。本文稱其為父ID,將父ID作為上傳的片段文件名,每個(gè)片段上傳時(shí)都帶有此父ID。此ID將伴隨片段數(shù)據(jù)走完整個(gè)處理流程。2、對(duì)于第二種片段(片段自身可以有獨(dú)立意義,合并成后的完整文件也有意義), 是先有片段后有整體文件的,可以按照一定策略來生成父ID,例如浪型時(shí)間或者其它能保證唯一性的HASH值。同時(shí)有獨(dú)立意義的片段也有其片段標(biāo)識(shí),例如xml格式的片段,其內(nèi)容是文件的基本信息,可將此類片段的片段標(biāo)識(shí)命名為identify_haSh,因此一個(gè)文件可能包含有若干個(gè)片段標(biāo)識(shí)為identify_a,identify_b。。。identify_n的片段。此片段文件上傳時(shí)也許將此片段標(biāo)識(shí)信息附帶上傳。同時(shí)一個(gè)文件可能上傳了多個(gè)具有相同片段標(biāo)識(shí)的片段,此時(shí)可以根據(jù)預(yù)定的重復(fù)片段處理策略來處理這些具有相同片段標(biāo)識(shí)的片段,重復(fù)片段處理策略有以下三種
A、 覆蓋新來片段的片段標(biāo)識(shí)和已有的重復(fù),則覆蓋掉原有的片段,保證每個(gè)片段標(biāo)識(shí)的片段在每個(gè)文件中唯一。B、過濾新來片段的片段標(biāo)識(shí)和已有的重復(fù),直接丟棄,不處理。C、合并新來片段的片段標(biāo)識(shí)和已有的重復(fù),將新片段也合并到文件中,這樣一個(gè)文件中可能具有多個(gè)具有相同片段標(biāo)識(shí)的片段
3、服務(wù)器端接收到片段后,按照片段的片段標(biāo)識(shí)到片段緩存庫(kù)中進(jìn)行驗(yàn)重,同時(shí)根據(jù)驗(yàn)重策略進(jìn)行處理。可以靈活處理多種情況,保證最終合并結(jié)果的正確性。合并時(shí)按照父 ID進(jìn)行合并,即將具有相同父ID的片段合并在一起。為此本發(fā)明提供了一種海量片段數(shù)據(jù)匯聚的系統(tǒng),包括客戶端的片段上傳模塊, 服務(wù)器端的緩存模塊、驗(yàn)證庫(kù)模塊、文件存儲(chǔ)模塊、片段接收模塊、片段處理模塊、片段合并模塊、片段匯聚模塊;所述片段上傳模塊將片段數(shù)據(jù)上傳到服務(wù)器端,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID和片段數(shù)據(jù)標(biāo)識(shí),所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)可形成的整體文件的HASH值,所述數(shù)據(jù)片段標(biāo)識(shí)為每個(gè)整體文件中包含的片段數(shù)據(jù)的唯一標(biāo)識(shí);
其中,此模塊部署在客戶端,按照策略,每個(gè)片段都帶有父ID,然后將片段上傳到服務(wù)器端。所述緩存模塊包括3個(gè)消息隊(duì)列,片段數(shù)據(jù)隊(duì)列、待合并片段隊(duì)列和合并結(jié)果待處理隊(duì)列;
其中,
片段數(shù)據(jù)隊(duì)列片段數(shù)據(jù)隊(duì)列存放接收后未作任何處理的片段數(shù)據(jù),隊(duì)列采用后進(jìn)先出的原則。待合并片段隊(duì)列待合并片段隊(duì)列存放驗(yàn)重后,等待合并操作的片段數(shù)據(jù)。隊(duì)列采用后進(jìn)先出的原則。合并結(jié)果待處理隊(duì)列隊(duì)列存放已合并后的數(shù)據(jù)信息,隊(duì)列采用后進(jìn)先出的原則。為了提高隊(duì)列的讀取和寫入速度,此處可使用內(nèi)存級(jí)緩存庫(kù)。所述驗(yàn)證庫(kù)模塊存放已接收片段數(shù)據(jù)的片段數(shù)據(jù)標(biāo)識(shí)以及片段數(shù)據(jù)標(biāo)識(shí)合集,所述合集是指一定數(shù)量的可合并為完整的整體文件的片段數(shù)據(jù)的片段數(shù)據(jù)標(biāo)識(shí);
其中,此處存放的是驗(yàn)重后的。數(shù)據(jù)不會(huì)有冗余。驗(yàn)證庫(kù)還存放所有片段標(biāo)識(shí)的合集, 即一個(gè)文件應(yīng)該有多少個(gè)不同片段標(biāo)識(shí)的片段才算完整,如果一個(gè)文件接收到了片段標(biāo)識(shí)合集里的所有片段,則表明此文件合并完成。所述文件存儲(chǔ)模塊包括三部分,文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)庫(kù);
所述文件位置庫(kù)記錄已接收到的片段數(shù)據(jù)信息,以及合并后的文件存放的位置是在文件緩存庫(kù)中或者在文件最終存儲(chǔ)中;文件緩存庫(kù)存放尚未包含所有片段的文件;文件最終存儲(chǔ)庫(kù)保存包含所有片段的文件;
其中,片段最終處理結(jié)果都是文件,互相之間都是獨(dú)立的,沒有復(fù)雜的關(guān)系,且是海量級(jí)別的數(shù)據(jù),因而不適合存儲(chǔ)在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中。所以將其存儲(chǔ)于文件型數(shù)據(jù)庫(kù)中。文件可以按訪問頻度分為兩種,一種是尚未合并完全部片段的文件,這樣的文件在之后的處理過程中會(huì)被經(jīng)常的讀取和更新,通常稱之為熱數(shù)據(jù)。另一種是合并完全部片段的文件,以后讀取和更新的頻度較低,稱之為冷數(shù)據(jù)。熱數(shù)據(jù)在所有文件數(shù)據(jù)中所占的比率較低,且讀寫頻繁,所以將其存放在速度較快但空間有限的緩存庫(kù)中較好。冷數(shù)據(jù)比率較高,讀寫次數(shù)有限,所以將其存放在速度一般但空間充足的文件級(jí)存儲(chǔ)中較好。因此文件存儲(chǔ)模塊分三部分文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)。文件位置庫(kù)記錄已接收到的文件的片段信息,以及合并后的文件存放的位置,是存放在文件緩存庫(kù)中還是文件最終存儲(chǔ)中。文件緩存庫(kù)存放尚未包含所有片段的文件,即熱數(shù)據(jù)。文件最終存儲(chǔ)上保存包含所有片段的文件,即冷數(shù)據(jù)。所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾;
也就是說,片段接收模塊主要是接收上傳的片段,接收的片段的接口可以采用http、https、ssh、ftp、smb等服務(wù)。服務(wù)接收到片段后,將此片段存入片段數(shù)據(jù)隊(duì)列隊(duì)尾。片段接收模塊不做其它工作,保證接收模塊的高效性,能夠?qū)崟r(shí)接收所有其它服務(wù)傳送過來的片段,將其放入隊(duì)列中緩存并等待被處理。不會(huì)造成因?yàn)槠翁幚聿贿^來,而無法接收新的片段。所述片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并驗(yàn)證片段數(shù)據(jù)標(biāo)識(shí)是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則根據(jù)重復(fù)片段數(shù)據(jù)處理策略,進(jìn)行相應(yīng)處理,否則將所述片段數(shù)據(jù)標(biāo)識(shí)存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;
也就是說,從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段,并將附帶的片段標(biāo)識(shí)向片段驗(yàn)證庫(kù)驗(yàn)證該片段是否已經(jīng)接收過,如果片段驗(yàn)證庫(kù)中該父ID的文件有此片段標(biāo)識(shí),則此片段標(biāo)識(shí)的片段已經(jīng)接收過,然后根據(jù)重復(fù)片段處理策略,進(jìn)行相應(yīng)處理。若此片段沒有接收過,先將此片段的片段標(biāo)識(shí)存入片段驗(yàn)證庫(kù),以便下次驗(yàn)證,然后將此片段存入待合并片段隊(duì)列隊(duì)尾。所述片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;
也就是說,從待合并片段隊(duì)列隊(duì)頭獲取數(shù)據(jù),先從文件位置庫(kù)(內(nèi)存庫(kù))查看此片段的父ID是否存在,若不存在,則表明此文件的片段第一次來,因而此文件只有一個(gè)片段,不需要合并操作,將片段作為初始文件存入文件緩存庫(kù)。若此片段的父ID存在,則從文件緩存庫(kù)中將此文件已合并的結(jié)果取出,并和剛從隊(duì)列取出的片段進(jìn)行合并,并將結(jié)果存入合并結(jié)果待處理隊(duì)列隊(duì)尾。所述片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),將所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。也就是說,從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取數(shù)據(jù),將該文件的所有片段的片段標(biāo)識(shí)合集跟緩存庫(kù)中片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若兩者不相等,則說明還有片段沒有合并,所以此文件合并尚未完成,將此數(shù)據(jù)存入文件緩存庫(kù)。若兩者相同,則表明文件的所有片段都以合并完成,將此數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并將最終結(jié)果數(shù)據(jù)存入數(shù)據(jù)庫(kù)。并更新文件位置庫(kù)中該父文件的位置。相應(yīng)的本發(fā)明還提供了一種海量片段數(shù)據(jù)匯聚的方法,適用于上述的系統(tǒng),所述方法包括
片段上傳模塊將片段數(shù)據(jù)上傳給片段接收模塊,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID和片段數(shù)據(jù)標(biāo)識(shí),所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)可形成的整體文件的HASH值,所述數(shù)據(jù)片段標(biāo)識(shí)為每個(gè)整體文件中包含的片段數(shù)據(jù)的唯一標(biāo)識(shí); 片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾; 片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并驗(yàn)證片段數(shù)據(jù)標(biāo)識(shí)是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則根據(jù)重復(fù)片段數(shù)據(jù)處理策略,進(jìn)行相應(yīng)處理,否則將所述片段數(shù)據(jù)標(biāo)識(shí)存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;
片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),將所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。
進(jìn)一步的,所述消息隊(duì)列采用后進(jìn)先出的原則。
進(jìn)一步的,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。進(jìn)一步的,所述片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括 http、https、ssh、ftp、smbo進(jìn)一步的,所述重復(fù)片段數(shù)據(jù)處理策略包括覆蓋重復(fù)的片段數(shù)據(jù)、丟棄復(fù)的片段數(shù)據(jù)、合并重復(fù)的片段數(shù)據(jù)。本發(fā)明的有益效果是
本系統(tǒng)的合并策略簡(jiǎn)單、高效,能夠保證海量片段數(shù)據(jù)匯聚的正確性。系統(tǒng)各個(gè)模塊之間通過消息隊(duì)列來傳遞數(shù)據(jù),不直接通信,當(dāng)單個(gè)模塊節(jié)點(diǎn)出錯(cuò)或停止工作時(shí),各個(gè)模塊從消息隊(duì)列實(shí)時(shí)讀寫數(shù)據(jù),如果兩者處理速度不同,則數(shù)據(jù)只是暫時(shí)積壓在消息隊(duì)列中。這樣整個(gè)處理流程可以不間斷的進(jìn)行,且讀寫的各個(gè)模塊互不干擾, 不會(huì)影響到其它模塊的正常工作。同時(shí)可以根據(jù)監(jiān)控各個(gè)消息隊(duì)列的隊(duì)列信息來獲取當(dāng)前系統(tǒng)的運(yùn)行情況。片段處理模塊、片段合并模塊和片段匯聚模塊的數(shù)量不是固定的,可以動(dòng)態(tài)增加和減少。通過實(shí)時(shí)的監(jiān)控各個(gè)消息隊(duì)列的長(zhǎng)度來動(dòng)態(tài)的增加和減少相應(yīng)模塊的數(shù)量。增加了系統(tǒng)的靈活性,并可動(dòng)態(tài)提高整個(gè)系統(tǒng)的處理性能。文件存儲(chǔ)模塊采用位置庫(kù)記錄文件存儲(chǔ)位置及相應(yīng)信息,讀寫性能高文件緩存庫(kù)存放熱數(shù)據(jù),讀寫性能稍差的文件最終存儲(chǔ)存放冷數(shù)據(jù)。即提升了各個(gè)模塊讀取和寫入文件的效率,提升了整個(gè)系統(tǒng)的功能,并最大程度上有效的利用了服務(wù)器資源。節(jié)約了成本。系統(tǒng)的存儲(chǔ)和緩存庫(kù)都使用非關(guān)系型數(shù)據(jù)庫(kù)替代傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),非關(guān)系型數(shù)據(jù)庫(kù)相比于關(guān)系型數(shù)據(jù)庫(kù),讀寫性能優(yōu)越很多。
為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明一種海量片段數(shù)據(jù)匯聚的系統(tǒng)示意圖2為本發(fā)明針對(duì)第一種片段數(shù)據(jù)的海量片段數(shù)據(jù)匯聚的方法流程圖; 圖3為本發(fā)明針對(duì)第二種片段數(shù)據(jù)的海量片段數(shù)據(jù)匯聚的方法流程圖。
具體實(shí)施例方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例中的技術(shù)方案,并使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對(duì)本發(fā)明中技術(shù)方案作進(jìn)一步詳細(xì)的說明。如圖1所示,為本發(fā)明一種海量片段數(shù)據(jù)匯聚的系統(tǒng)示意圖,包括客戶端的片段上傳模塊101,服務(wù)器端的緩存模塊102、驗(yàn)證庫(kù)模塊103、文件存儲(chǔ)模塊104、片段接收模塊 105、片段處理模塊106、片段合并模塊107、片段匯聚模塊108 ;
其中,文件存儲(chǔ)模塊104包括三部分,文件位置庫(kù)1041、文件緩存庫(kù)1042和文件最終存儲(chǔ)庫(kù)1043。本說明書中方法的實(shí)施例采用遞進(jìn)的方式描述,對(duì)于系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,針對(duì)兩種海量片段數(shù)據(jù)的情況,系統(tǒng)的具體內(nèi)容前文已經(jīng)闡述的很清楚,所以描述的比較簡(jiǎn)單,相關(guān)之處參見前文的描述和方法實(shí)施例的部分說明即可。下面針對(duì)兩種海量片段數(shù)據(jù)的情況,詳細(xì)說明方法實(shí)施例的流程
如圖2所示,為本發(fā)明針對(duì)第一種片段數(shù)據(jù)的海量片段數(shù)據(jù)匯聚的方法實(shí)施例流程圖,包括
S201 上傳片段上傳模塊將帶有父ID信息的片段上傳給接收模塊,可以通過http、 https、ssh、ftp、smb 等服務(wù)上傳。S202 接收片段接收模塊接收到片段后,將此片段存入片段數(shù)據(jù)隊(duì)列隊(duì)尾。S203 初步處理片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段。S204 片段驗(yàn)證對(duì)片段數(shù)據(jù)做MD5值計(jì)算,將MD5值結(jié)果向片段驗(yàn)證庫(kù)驗(yàn)證該片段是否已經(jīng)接收過,
如果片段驗(yàn)證庫(kù)中有此MD5值,則此片段已經(jīng)接收過,則不再重復(fù)處理此片段。轉(zhuǎn)至 S212,此片段處理結(jié)束,減少冗余數(shù)據(jù)對(duì)系統(tǒng)的壓力。若無此MD5值,則此片段沒有接收過,先將此片段的MD5值存入片段驗(yàn)證庫(kù),以便下次驗(yàn)證,然后將此片段存入待合并片段隊(duì)列隊(duì)尾。S205 合并片段片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取數(shù)據(jù)。S206 查詢父ID是否存在片段合并模塊從文件位置庫(kù)查看此片段的父ID是否存在。若不存在,則表明此文件的片段第一次來,因而此文件只有一個(gè)片段,不需要合并操作,轉(zhuǎn)至S210。若此片段的父ID存在,轉(zhuǎn)至S207。S207 從文件緩存庫(kù)取數(shù)據(jù),進(jìn)行合并片段合并模塊從文件緩存庫(kù)中將此文件已合并的結(jié)果取出,并和剛從隊(duì)列取出的片段進(jìn)行合并,并將結(jié)果存入合并結(jié)果待處理隊(duì)列隊(duì)尾。S208 片段匯聚片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取數(shù)據(jù)。S209 判斷合并后的MD5值與父ID是否相等片段匯聚模塊將合并結(jié)果數(shù)據(jù)做 MD5運(yùn)算,然后跟父ID進(jìn)行對(duì)比。若此MD5值和父ID不相等,則說明還有片段沒有合并,所以此文件合并尚未完成,轉(zhuǎn)至S210。若MD5值跟父ID相同,則表明文件的所有片段都以合并完成,轉(zhuǎn)至S211。S210 存入文件緩存庫(kù)將合并完的文件或片段存入文件緩存庫(kù)。S211 存入文件最終存儲(chǔ)將此數(shù)據(jù)存入文件最終存儲(chǔ),并更新文件位置庫(kù)中該父文件的位置。S212 片段處理完成.
如圖3所示,為本發(fā)明針對(duì)第二種片段數(shù)據(jù)的海量片段數(shù)據(jù)匯聚的方法實(shí)施例流程圖,具體包括
S301 上傳片段上傳模塊將帶有父ID信息和片段標(biāo)識(shí)信息的片段上傳給接收模塊, 可以通過http、https、ssh、ftp、smb等服務(wù)上傳。S302 接收片段接收模塊接收到片段后,將此片段存入片段數(shù)據(jù)隊(duì)列隊(duì)尾。S303 初步處理片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段。S304 查詢父ID是否存在片段合并模塊從文件位置庫(kù)查看此片段的父ID是否存在。若不存在,則表明此文件的片段第一次來,因而此文件只有一個(gè)片段,不需要合并操作,轉(zhuǎn)至S312。若此片段的父ID存在,轉(zhuǎn)至S305。S305 片段驗(yàn)證將片段標(biāo)識(shí)信息向片段驗(yàn)證庫(kù)驗(yàn)證該片段是否已經(jīng)接收過,若接收過,轉(zhuǎn)至S306。若沒有接收過,轉(zhuǎn)至S310。S306 查看并加載重復(fù)片段處理策略
若策略為合并,則轉(zhuǎn)至S308。若策略為覆蓋,則轉(zhuǎn)至S309。若策略為過濾,則轉(zhuǎn)至S314。S307 合并片段片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取數(shù)據(jù)。S308 從文件緩存庫(kù)取數(shù)據(jù),進(jìn)行合并片段合并模塊從文件緩存庫(kù)中將此文件已合并的結(jié)果取出,并和剛從隊(duì)列取出的片段進(jìn)行合并,并將結(jié)果存入合并結(jié)果待處理隊(duì)列隊(duì)尾。S309 從文件緩存庫(kù)取數(shù)據(jù),進(jìn)行覆蓋片段合并模塊從文件緩存庫(kù)中將此文件已合并的結(jié)果取出,并用從隊(duì)列取出的片段替換已合并結(jié)果中之前相同片段的信息,并將結(jié)果存入合并結(jié)果待處理隊(duì)列隊(duì)尾。S310 片段匯聚片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取數(shù)據(jù)。S311 判斷文件是否完全合并將該文件的所有片段的片段標(biāo)識(shí)合集跟緩存庫(kù)中片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若兩者不相等,則說明還有片段沒有合并,所以此文件合并尚未完成,轉(zhuǎn)至S312。若兩者相同,則表明文件的所有片段都以合并完成,轉(zhuǎn)至S313。S312 存入文件緩存庫(kù)將合并完的文件或片段存入文件緩存庫(kù)。雖然通過實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1.一種海量片段數(shù)據(jù)匯聚的系統(tǒng),其特征在于,包括客戶端的片段上傳模塊,服務(wù)器端的緩存模塊、驗(yàn)證庫(kù)模塊、文件存儲(chǔ)模塊、片段接收模塊、片段處理模塊、片段合并模塊、片段匯聚模塊;所述片段上傳模塊將片段數(shù)據(jù)上傳到服務(wù)器端,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID,所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)所屬文件的HASH值;所述緩存模塊包括3個(gè)消息隊(duì)列,片段數(shù)據(jù)隊(duì)列、待合并片段隊(duì)列和合并結(jié)果待處理隊(duì)列;所述驗(yàn)證庫(kù)模塊存放已接收片段數(shù)據(jù)的HASH值;所述文件存儲(chǔ)模塊包括三部分,文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)庫(kù); 所述文件位置庫(kù)記錄已接收到的片段數(shù)據(jù)信息,以及合并后的文件存放的位置是在文件緩存庫(kù)中或者在文件最終存儲(chǔ)中;文件緩存庫(kù)存放尚未包含所有片段的文件;文件最終存儲(chǔ)庫(kù)保存包含所有片段的文件;所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾; 所述片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并計(jì)算所述片段數(shù)據(jù)的HASH 值,驗(yàn)證所述HASH值是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則丟棄所述片段數(shù)據(jù),否則將所述片段數(shù)據(jù)的HASH值存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;所述片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID 未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;所述片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),計(jì)算所述文件數(shù)據(jù)的 HASH與文件數(shù)據(jù)的父ID進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述消息隊(duì)列采用后進(jìn)先出的原則。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括http、https、ssh、ftp、smb。
5.一種海量片段數(shù)據(jù)匯聚的方法,其特征在于,適用于權(quán)利要求1所述的系統(tǒng),所述方法包括片段上傳模塊將片段數(shù)據(jù)上傳給片段接收模塊,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID,所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)所屬文件的HASH值; 片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾; 片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并計(jì)算所述片段數(shù)據(jù)的HASH值,驗(yàn)證所述HASH值是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則丟棄所述片段數(shù)據(jù),否則將所述片段數(shù)據(jù)的HASH值存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),計(jì)算所述文件數(shù)據(jù)的HASH 與文件數(shù)據(jù)的父ID進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的HASH與文件數(shù)據(jù)的父ID相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。
6.如權(quán)利要求5所述的方法,其特征在于,所述消息隊(duì)列采用后進(jìn)先出的原則。
7.如權(quán)利要求5所述的方法,其特征在于,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。
8.如權(quán)利要求5所述的方法,其特征在于,所述片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括http、https、ssh、ftp、smb。
9.一種海量片段數(shù)據(jù)匯聚的系統(tǒng),其特征在于,包括客戶端的片段上傳模塊,服務(wù)器端的緩存模塊、驗(yàn)證庫(kù)模塊、文件存儲(chǔ)模塊、片段接收模塊、片段處理模塊、片段合并模塊、片段匯聚模塊;所述片段上傳模塊將片段數(shù)據(jù)上傳到服務(wù)器端,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID和片段數(shù)據(jù)標(biāo)識(shí),所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)可形成的整體文件的HASH值,所述數(shù)據(jù)片段標(biāo)識(shí)為每個(gè)整體文件中包含的片段數(shù)據(jù)的唯一標(biāo)識(shí);所述緩存模塊包括3個(gè)消息隊(duì)列,片段數(shù)據(jù)隊(duì)列、待合并片段隊(duì)列和合并結(jié)果待處理隊(duì)列;所述驗(yàn)證庫(kù)模塊存放已接收片段數(shù)據(jù)的片段數(shù)據(jù)標(biāo)識(shí)以及片段數(shù)據(jù)標(biāo)識(shí)合集,所述合集是指一定數(shù)量的可合并為完整的整體文件的片段數(shù)據(jù)的片段數(shù)據(jù)標(biāo)識(shí);所述文件存儲(chǔ)模塊包括三部分,文件位置庫(kù)、文件緩存庫(kù)和文件最終存儲(chǔ)庫(kù); 所述文件位置庫(kù)記錄已接收到的片段數(shù)據(jù)信息,以及合并后的文件存放的位置是在文件緩存庫(kù)中或者在文件最終存儲(chǔ)中;文件緩存庫(kù)存放尚未包含所有片段的文件;文件最終存儲(chǔ)庫(kù)保存包含所有片段的文件;所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾; 所述片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并驗(yàn)證片段數(shù)據(jù)標(biāo)識(shí)是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則根據(jù)重復(fù)片段數(shù)據(jù)處理策略,進(jìn)行相應(yīng)處理,否則將所述片段數(shù)據(jù)標(biāo)識(shí)存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;所述片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID 未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;所述片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),將所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述消息隊(duì)列采用后進(jìn)先出的原則。
11.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。
12.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述片段接收模塊接收客戶端上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括http、https、ssh、ftp、smb。
13.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述重復(fù)片段數(shù)據(jù)處理策略包括覆蓋重復(fù)的片段數(shù)據(jù)、丟棄重復(fù)的片段數(shù)據(jù)、合并重復(fù)的片段數(shù)據(jù)。
14.一種海量片段數(shù)據(jù)匯聚的方法,其特征在于,適用于權(quán)利要求9所述的系統(tǒng),所述方法包括片段上傳模塊將片段數(shù)據(jù)上傳給片段接收模塊,所述片段數(shù)據(jù)帶有片段數(shù)據(jù)信息,包括片段數(shù)據(jù)的父ID和片段數(shù)據(jù)標(biāo)識(shí),所述片段數(shù)據(jù)的父ID為片段數(shù)據(jù)可形成的整體文件的HASH值,所述數(shù)據(jù)片段標(biāo)識(shí)為每個(gè)整體文件中包含的片段數(shù)據(jù)的唯一標(biāo)識(shí);片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)并存入片段數(shù)據(jù)隊(duì)列隊(duì)尾;片段處理模塊從片段數(shù)據(jù)隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),并驗(yàn)證片段數(shù)據(jù)標(biāo)識(shí)是否已經(jīng)存放在驗(yàn)證庫(kù)模塊中,如果是則根據(jù)重復(fù)片段數(shù)據(jù)處理策略,進(jìn)行相應(yīng)處理,否則將所述片段數(shù)據(jù)標(biāo)識(shí)存入驗(yàn)證庫(kù)模塊,并將所述片段數(shù)據(jù)存入待合并片段隊(duì)列隊(duì)尾;片段合并模塊從待合并片段隊(duì)列隊(duì)頭獲取片段數(shù)據(jù),如果所獲取的片段數(shù)據(jù)父ID未存在于文件位置庫(kù)中,則將所述片段數(shù)據(jù)存入文件緩存庫(kù)、文件位置庫(kù)記錄所述片段數(shù)據(jù)信息;否則從文件緩存庫(kù)中取出與所述片段數(shù)據(jù)父ID相同的文件數(shù)據(jù)和所述片段數(shù)據(jù)進(jìn)行合并,并將合并后的文件數(shù)據(jù)存入合并結(jié)果待處理隊(duì)列隊(duì)尾;片段匯聚模塊從合并結(jié)果待處理隊(duì)列隊(duì)頭獲取文件數(shù)據(jù),將所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集進(jìn)行對(duì)比,若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集不相等,則將所述文件數(shù)據(jù)存入文件緩存庫(kù);否則若所述文件數(shù)據(jù)的所有片段數(shù)據(jù)標(biāo)識(shí)與驗(yàn)證庫(kù)模塊中的片段標(biāo)識(shí)合集相等,則將所述文件數(shù)據(jù)存入文件最終存儲(chǔ)庫(kù),并更新所述文件數(shù)據(jù)在文件位置庫(kù)中的位置信息。
15.如權(quán)利要求14所述的方法,其特征在于,所述消息隊(duì)列采用后進(jìn)先出的原則。
16.如權(quán)利要求14所述的方法,其特征在于,所述文件存儲(chǔ)模塊為文件型數(shù)據(jù)庫(kù)。
17.如權(quán)利要求14所述的方法,其特征在于,所述片段接收模塊接收片段上傳模塊上傳的片段數(shù)據(jù)的接口采用的服務(wù)包括http、https、ssh、ftp、smb。
18.如權(quán)利要求14所述的方法,其特征在于,所述重復(fù)片段數(shù)據(jù)處理策略包括覆蓋重復(fù)的片段數(shù)據(jù)、丟棄重復(fù)的片段數(shù)據(jù)、合并重復(fù)的片段數(shù)據(jù)。
全文摘要
本發(fā)明針對(duì)兩種海量片段數(shù)據(jù)分別公開了海量片段數(shù)據(jù)匯聚的系統(tǒng),包括客戶端的片段上傳模塊,服務(wù)器端的緩存模塊、驗(yàn)證庫(kù)模塊、文件存儲(chǔ)模塊、片段接收模塊、片段處理模塊、片段合并模塊、片段匯聚模塊;相應(yīng)的本發(fā)明還分別公開了海量片段數(shù)據(jù)匯聚的方法。本發(fā)明采用消息隊(duì)列服務(wù)、內(nèi)存庫(kù)、文件型數(shù)據(jù)庫(kù)及守護(hù)進(jìn)程等多種技術(shù),能夠高效的處理和合并海量片段數(shù)據(jù)。并采用嚴(yán)謹(jǐn)?shù)暮喜⒉呗?,保證合并的正確性。
文檔編號(hào)G06F17/30GK102456076SQ20111037516
公開日2012年5月16日 申請(qǐng)日期2011年11月23日 優(yōu)先權(quán)日2011年11月23日
發(fā)明者孫晉超, 張栗偉, 楊祖明, 王亮 申請(qǐng)人:北京安天電子設(shè)備有限公司