[0111]在本發(fā)明的一種優(yōu)選實(shí)施例中,當(dāng)待上傳文件的全部文件分片的內(nèi)容數(shù)據(jù)上傳完成后,還可以對(duì)該文件進(jìn)行校驗(yàn)。根據(jù)接收到的該文件的內(nèi)容數(shù)據(jù)計(jì)算文件的指紋,并將該計(jì)算的指紋與步驟201中接收到的文件上傳請(qǐng)求中包括的指紋進(jìn)行比較;若相同,則確定該文件上傳正確,可以繼續(xù)執(zhí)行后續(xù)步驟;若不同,則該文件在上傳過(guò)程中可能出現(xiàn)錯(cuò)誤(如文件內(nèi)容被篡改),此時(shí)可以向客戶端返回提示信息,以通知客戶端上傳的文件出現(xiàn)錯(cuò)誤。
[0112]本實(shí)施例中,可以采用以下方式計(jì)算該文件的指紋:當(dāng)該文件的大小小于或等于預(yù)設(shè)閾值(例如512KB)時(shí),針對(duì)文件的內(nèi)容數(shù)據(jù)計(jì)算唯一 HASH(哈希)值,該唯一 HASH值即可以作為該文件指紋;當(dāng)該文件的大小大于預(yù)設(shè)閾值時(shí),從該文件的內(nèi)容數(shù)據(jù)中提取多個(gè)數(shù)據(jù)塊,該多個(gè)數(shù)據(jù)塊的總大小等于預(yù)設(shè)閾值,將該多個(gè)數(shù)據(jù)塊按照原有順序拼接成一個(gè)拼接數(shù)據(jù)塊,針對(duì)該拼接數(shù)據(jù)塊和該文件的大小的組合計(jì)算唯一 HASH值,該唯一 HASH值即可以作為該文件指紋。
[0113]其中,可以米用MD5算法(Message Digest Algorithm MD5,消息摘要算法第五版)等計(jì)算出內(nèi)容數(shù)據(jù)的唯一 HASH值。通過(guò)計(jì)算HASH值的方式可以進(jìn)一步提高處理效率。
[0114]其中,從該文件的內(nèi)容數(shù)據(jù)中提取多個(gè)數(shù)據(jù)塊可以采用如下方式:將該文件的內(nèi)容數(shù)據(jù)平均劃分為m個(gè)數(shù)據(jù)塊,從每個(gè)數(shù)據(jù)塊中分別提取大小為η的數(shù)據(jù)塊(可以從第一個(gè)字節(jié)開(kāi)始提取連續(xù)的大小為η的數(shù)據(jù)塊,也可以從其他字節(jié)開(kāi)始提取連續(xù)的大小為η的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊的提取方式可以相同,也可以不同),m與η的乘積等于上述預(yù)設(shè)閾值。例如,預(yù)設(shè)閾值為512ΚΒ,文件的大小為800ΚΒ,則將該文件的內(nèi)容數(shù)據(jù)平均劃分為8個(gè)大小為100ΚΒ的數(shù)據(jù)塊,從每個(gè)數(shù)據(jù)塊中分別提取大小為64ΚΒ的數(shù)據(jù)塊。當(dāng)然,該提取多個(gè)數(shù)據(jù)塊的方式只是用于舉例,本實(shí)施例中還可以采用其他方式提取,例如,按照預(yù)設(shè)間隔提取,其中的預(yù)設(shè)間隔可以根據(jù)該文件的大小、上述預(yù)設(shè)閾值和每個(gè)數(shù)據(jù)塊的大小進(jìn)行計(jì)算,每個(gè)數(shù)據(jù)塊的大小可以相同,也可以不同,本發(fā)明實(shí)施例對(duì)此并不加以限制。
[0115]步驟208,將元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中。
[0116]本實(shí)施例中,為了降低對(duì)內(nèi)存的占有率,還進(jìn)一步將上述文件的元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中,即不再采用內(nèi)存數(shù)據(jù)庫(kù)存儲(chǔ)文件的元信息。但是,由于磁盤(pán)數(shù)據(jù)庫(kù)不支持原子性操作,訪問(wèn)效率較低,因此為了支持原子性操作,提高文件的上傳效率,在文件上傳過(guò)程中還是采用內(nèi)存數(shù)據(jù)庫(kù)存儲(chǔ)分片描述信息。也即,本實(shí)施例中采用內(nèi)存數(shù)據(jù)庫(kù)和磁盤(pán)數(shù)據(jù)庫(kù)兩種結(jié)合的形式進(jìn)行處理,從而既保證了文件上傳過(guò)程的效率,又避免了對(duì)內(nèi)存的過(guò)多占用。
[0117]經(jīng)過(guò)上述過(guò)程,在后續(xù)查詢文件時(shí),接收客戶端發(fā)送的文件查詢請(qǐng)求,首先根據(jù)該文件查詢請(qǐng)求從磁盤(pán)數(shù)據(jù)庫(kù)中查詢?cè)撐募脑畔?;若從磁盤(pán)數(shù)據(jù)庫(kù)中查找到,則根據(jù)查找到的元信息從分布式存儲(chǔ)空間中查找對(duì)應(yīng)文件的內(nèi)容數(shù)據(jù);若從磁盤(pán)數(shù)據(jù)庫(kù)中未查找到,再根據(jù)該文件查詢請(qǐng)求從內(nèi)存數(shù)據(jù)庫(kù)中查詢?cè)撐募脑畔?該種情況對(duì)應(yīng)于在生成文件的元信息并存儲(chǔ)至內(nèi)存數(shù)據(jù)庫(kù)后,還未將該元信息存儲(chǔ)至磁盤(pán)數(shù)據(jù)庫(kù)之前的情況);若從內(nèi)存數(shù)據(jù)庫(kù)中查找到,則根據(jù)查找到的元信息從分布式存儲(chǔ)空間中查找對(duì)應(yīng)文件的內(nèi)容數(shù)據(jù);若從內(nèi)存數(shù)據(jù)庫(kù)中未查找到,則確定客戶端并未上傳該文件,因此可以返回未查找到等提示信息。
[0118]本發(fā)明實(shí)施例中,利用內(nèi)存種數(shù)據(jù)庫(kù)的優(yōu)勢(shì)進(jìn)行文件上傳過(guò)程中的操作,支持高效的原子性操作,效率較高;利用磁盤(pán)數(shù)據(jù)庫(kù)保存元信息,降低了內(nèi)存的使用率,將消耗內(nèi)存的操作轉(zhuǎn)變?yōu)槭褂么疟P(pán)的解決方案,降低海量數(shù)據(jù)檢索的存儲(chǔ)成本,同時(shí)利用原子性操作保證檢索信息的準(zhǔn)確性。
[0119]對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
[0120]實(shí)施例三
[0121]參照?qǐng)D3,示出了本發(fā)明實(shí)施例三的一種文件處理裝置的結(jié)構(gòu)框圖。
[0122]本實(shí)施例的文件處理裝置可以包括以下模塊:
[0123]上傳確定模塊301,用于檢測(cè)到客戶端開(kāi)始上傳待上傳文件的文件分片時(shí),根據(jù)存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的分片描述信息確定允許上傳文件分片的內(nèi)容數(shù)據(jù);
[0124]內(nèi)容接收模塊302,用于接收客戶端上傳的文件分片的內(nèi)容數(shù)據(jù);
[0125]信息生成模塊303,用于當(dāng)上傳待上傳文件的全部文件分片的內(nèi)容數(shù)據(jù)后,生成存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的文件的元信息;
[0126]信息轉(zhuǎn)存模塊304,用于將元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中。
[0127]本發(fā)明實(shí)施例中檢測(cè)到客戶端開(kāi)始上傳待上傳文件的文件分片時(shí),根據(jù)存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的分片描述信息確定允許上傳該文件分片的內(nèi)容數(shù)據(jù),接收客戶端上傳的文件分片的內(nèi)容數(shù)據(jù);然后,當(dāng)上傳待上傳文件的全部文件分片的內(nèi)容數(shù)據(jù)后,生成存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的文件的元信息;最后,將元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中。因此,一方面,在上傳文件分片的過(guò)程中采用內(nèi)存數(shù)據(jù)庫(kù)保存相關(guān)信息,從而提高了文件的處理效率;另一方面,在文件的內(nèi)容數(shù)據(jù)上傳完成后,最終將文件的元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中,從而降低了內(nèi)存占有率,避免對(duì)數(shù)據(jù)庫(kù)性能產(chǎn)生影響,降低成本。
[0128]實(shí)施例四
[0129]參照?qǐng)D4,示出了本發(fā)明實(shí)施例四的一種文件處理裝置的結(jié)構(gòu)框圖。
[0130]本實(shí)施例的文件處理裝置可以包括以下模塊:
[0131]請(qǐng)求接收模塊401,用于在信息確定模塊根據(jù)客戶端發(fā)送的文件上傳請(qǐng)求確定待上傳文件對(duì)應(yīng)的文件分片的分片描述信息之前,接收客戶端發(fā)送的文件上傳請(qǐng)求,并檢測(cè)文件上傳請(qǐng)求為合法請(qǐng)求;若為合法請(qǐng)求,則調(diào)用信息確定模塊;
[0132]信息確定模塊402,用于在上傳確定模塊檢測(cè)到客戶端開(kāi)始上傳待上傳文件的文件分片時(shí),根據(jù)存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的分片描述信息確定允許上傳文件分片的內(nèi)容數(shù)據(jù)之前,根據(jù)客戶端發(fā)送的文件上傳請(qǐng)求確定待上傳文件對(duì)應(yīng)的文件分片的分片描述信息,并將分片描述信息存儲(chǔ)至內(nèi)存數(shù)據(jù)庫(kù)中;
[0133]信息返回模塊403,用于根據(jù)文件上傳請(qǐng)求將分片描述信息返回至客戶端,以使客戶端根據(jù)分片描述信息上傳待上傳文件的文件分片;
[0134]上傳確定模塊404,用于檢測(cè)到客戶端開(kāi)始上傳待上傳文件的文件分片時(shí),根據(jù)存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的分片描述信息確定允許上傳文件分片的內(nèi)容數(shù)據(jù);
[0135]內(nèi)容接收模塊405,用于接收客戶端上傳的文件分片的內(nèi)容數(shù)據(jù);
[0136]狀態(tài)更新模塊406,用于在內(nèi)容接收模塊接收客戶端上傳的文件分片的內(nèi)容數(shù)據(jù)之前,將分片描述信息中包括的文件分片的分片標(biāo)識(shí)對(duì)應(yīng)的分片狀態(tài)更新為正在上傳;當(dāng)文件分片的內(nèi)容數(shù)據(jù)上傳完成時(shí),將分片描述信息中包括的文件分片的分片標(biāo)識(shí)對(duì)應(yīng)的分片狀態(tài)更新為已上傳;
[0137]信息生成模塊407,用于當(dāng)上傳待上傳文件的全部文件分片的內(nèi)容數(shù)據(jù)后,生成存儲(chǔ)于內(nèi)存數(shù)據(jù)庫(kù)中的文件的元信息;
[0138]信息轉(zhuǎn)存模塊408,用于將元信息從內(nèi)存數(shù)據(jù)庫(kù)轉(zhuǎn)存至磁盤(pán)數(shù)據(jù)庫(kù)中。
[0139]在本發(fā)明的一種優(yōu)選實(shí)施例中,文件分片包括分片標(biāo)識(shí)和內(nèi)容數(shù)據(jù),分片描述信息包括分片標(biāo)識(shí)和分片狀態(tài),其中,分片狀態(tài)包括未上傳、正在上傳和已上傳。上傳確定模塊可以包括以下子模塊:
[0140]狀態(tài)查找子模塊,用于從文件分片的分片描述信息中查找文件分片的分片標(biāo)識(shí)對(duì)應(yīng)的分片狀態(tài);
[0141]上傳確定子模塊,用于當(dāng)分片狀態(tài)為未上傳時(shí),確定允許上傳文件分片的內(nèi)容數(shù)據(jù);當(dāng)分片狀態(tài)為正在上傳或已上傳時(shí),確定不允許上傳文件分片的內(nèi)容數(shù)據(jù)。
[0142]在本發(fā)明的一種優(yōu)選實(shí)施例中,分片描述信息還包括分