本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種數(shù)據(jù)存儲方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,數(shù)據(jù)存儲技術(shù)也得到了快速發(fā)展,出現(xiàn)了許多基于鍵值(Key-Value)的存儲方案,例如,Redis存儲方案和LevelDB存儲方案等。這些存儲方案的基本原理都是使用哈希、跳表、紅黑樹等數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)快速查找。
在實(shí)際應(yīng)用中,可能會出現(xiàn)具有較長的數(shù)據(jù)鍵的數(shù)據(jù),然而利用現(xiàn)有的Key-Value存儲方案,對這類數(shù)據(jù)的數(shù)據(jù)鍵進(jìn)行插入、查找或索引處理時,都會造成很多的性能損耗。因此,現(xiàn)有的Key-Value存儲方案中存在著數(shù)據(jù)處理效率較低的問題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)存儲方法及裝置。
根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)存儲方法,該方法包括:
獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù);
截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;
截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;
將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中;
得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵;
根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)存儲裝置,該裝置包括:
獲取模塊,適于獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù);
第一確定模塊,適于截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;
第二確定模塊,適于截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;
存儲模塊,適于將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中;
生成模塊,適于得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵;
第一寫入模塊,適于根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
根據(jù)本發(fā)明提供的技術(shù)方案,獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),接著截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識,截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中,然后得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵,根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。利用本發(fā)明提供的技術(shù)方案,根據(jù)與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵,從而節(jié)省了存儲空間,優(yōu)化了存儲方式,提高了數(shù)據(jù)處理效率。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個實(shí)施例的數(shù)據(jù)存儲方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明另一個實(shí)施例的數(shù)據(jù)存儲方法的流程示意圖;
圖3示出了根據(jù)本發(fā)明一個實(shí)施例的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖;
圖4示出了根據(jù)本發(fā)明另一個實(shí)施例的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
鍵值存儲數(shù)據(jù)庫,這是一種NoSQL(非關(guān)系型數(shù)據(jù)庫)模型,其數(shù)據(jù)按照數(shù)據(jù)鍵值對的形式進(jìn)行組織、索引和存儲。KV存儲非常適合不涉及過多數(shù)據(jù)關(guān)系業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù),同時能有效減少讀寫磁盤的次數(shù),比SQL數(shù)據(jù)庫存儲擁有更好的讀寫性能。
目前在生產(chǎn)環(huán)境,使用較多的K-V存儲有Memcached,Redis,LevelDB等。在通信方面,主要使用專有的二進(jìn)制協(xié)議,這樣做的好處是協(xié)議解析的的性能比較高,不足的地方在于通用性差,需要為不同的語言實(shí)現(xiàn)專門的客戶端,開發(fā)成本高,同時二進(jìn)制協(xié)議的可調(diào)試性差,導(dǎo)致定位問題困難;在架構(gòu)設(shè)計方面,上述存儲的分布式基本都需要客戶端來實(shí)現(xiàn),Redis從3.0之后開始支持集群,但從生產(chǎn)環(huán)境中的測試情況來看,單點(diǎn)故障導(dǎo)致集群不可用的情況依然存在,且Redis的定位是緩存,對于持久化的支持程度有限。
針對以上傳統(tǒng)方法的不足,本發(fā)明的發(fā)明人提出了一種新的分布式數(shù)據(jù)存儲系統(tǒng)架構(gòu),并基于此系統(tǒng)進(jìn)一步提出了一種數(shù)據(jù)存儲方法及裝置。該分布式數(shù)據(jù)存儲系統(tǒng)包括:客戶端、Linux虛擬服務(wù)器集群、分布式組件和存儲引擎,如下所介紹的數(shù)據(jù)存儲方法具體為存儲引擎中各個存儲節(jié)點(diǎn)所采用的數(shù)據(jù)存儲方案。
在分布式數(shù)據(jù)存儲系統(tǒng)中,將分布式組件與存儲引擎分離,存儲引擎只負(fù)責(zé)數(shù)據(jù)存儲,以及對外提供http接口,以供分布式組件根據(jù)所提供的http接口向?qū)?yīng)的存儲節(jié)點(diǎn)寫入數(shù)據(jù),其中,存儲引擎包括多個存儲節(jié)點(diǎn),各個存儲節(jié)點(diǎn)是相互獨(dú)立的,存儲節(jié)點(diǎn)彼此之間不會直接進(jìn)行通信,從而降低了存儲引擎的復(fù)雜度。
本系統(tǒng)中,分布式組件向存儲引擎寫入數(shù)據(jù)時,能夠根據(jù)Key來進(jìn)行負(fù)載均衡,將數(shù)據(jù)寫入指定的存儲節(jié)點(diǎn)。分布式組件作為客戶端與存儲引擎之間的反向代理,對客戶端屏蔽負(fù)載均衡的細(xì)節(jié),保證存儲節(jié)點(diǎn)的http接口的透明性。當(dāng)某一個存儲節(jié)點(diǎn)宕機(jī)時,分布式組件會自動對數(shù)據(jù)寫請求進(jìn)行負(fù)載均衡,保證整個系統(tǒng)依然可用,從而解決KV存儲的單點(diǎn)限制。
另外,分布式組件中的每個節(jié)點(diǎn)都是獨(dú)立的,當(dāng)某一節(jié)點(diǎn)宕機(jī)時,服務(wù)器集群會自動將數(shù)據(jù)寫請求發(fā)送至分布式組件中的其他可用的節(jié)點(diǎn),從而解決了單點(diǎn)限制。當(dāng)需要提高系統(tǒng)的吞吐率時,也只需要簡單地增加節(jié)點(diǎn)即可實(shí)現(xiàn)。
目前業(yè)界主流的存儲對于replica的實(shí)現(xiàn)存在兩種模式:
模式一:1Primary-1Replica Shard
模式二:1Primary-N Replica Shards
分布式組件選用了工程上更加可行的模式一。模式二由于一份數(shù)據(jù)具有更多的備份,因此具備更高的的可用性,但同時帶來了更多的數(shù)據(jù)一致性問題和實(shí)現(xiàn)的復(fù)雜度。模式一在高可用性方面不如模式二,但在實(shí)現(xiàn)難度方面要小很多,且分布式組件自身的定位是分布式kv存儲,而不是分布式數(shù)據(jù)庫,因此相對而言,模式一更加適用。
在本發(fā)明中,分布式組件為反向代理服務(wù)器,具體可以是Nginx服務(wù)器,nginx是高吞吐高并發(fā)的http反向代理,由于分布式組件并不需要對存儲節(jié)點(diǎn)上的數(shù)據(jù)進(jìn)行合并(merge),因此為了提高系統(tǒng)的吞吐量和并發(fā)量,分布式組件的進(jìn)程模型為1master-N worker,其中master進(jìn)程會對worker進(jìn)程進(jìn)行自動?;?,這一點(diǎn)保證了分布式組件單個節(jié)點(diǎn)的高可用性和高吞吐性。由于各個進(jìn)程是獨(dú)立的,因此對于少部分用到共享數(shù)據(jù)的接口,需要利用共享內(nèi)存來進(jìn)行通信。
Nginx服務(wù)器現(xiàn)有的負(fù)載均衡策略將存儲節(jié)點(diǎn)地址等細(xì)節(jié)完全對外屏蔽了,也就是說,對于開發(fā)者來說這些細(xì)節(jié)是透明的,因此,無法將數(shù)據(jù)寫入指定的存儲節(jié)點(diǎn),從而限定了定制化的負(fù)載均衡的實(shí)現(xiàn),本發(fā)明提供的數(shù)據(jù)存儲方法及裝置能夠?qū)崿F(xiàn)定制化的負(fù)載均衡,實(shí)現(xiàn)將數(shù)據(jù)寫入指定的存儲節(jié)點(diǎn)。
下面通過幾個具體的實(shí)施例對本發(fā)明提出的存儲引擎內(nèi)部使用的數(shù)據(jù)存儲方法進(jìn)行詳細(xì)描述。需要說明的是,本發(fā)明提供的數(shù)據(jù)存儲方法不局限于上述系統(tǒng)框架,也可以在其它類似的系統(tǒng)框架中實(shí)現(xiàn)。
圖1示出了根據(jù)本發(fā)明一個實(shí)施例的數(shù)據(jù)存儲方法的流程示意圖,如圖1所示,如圖1所示,該方法包括如下步驟:
步驟S100,獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)。
待存儲數(shù)據(jù)具體為K-V存儲數(shù)據(jù),其包含數(shù)據(jù)鍵key和數(shù)據(jù)值value。存儲引擎接收到待存儲數(shù)據(jù)的寫入請求后,首先獲取待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),該加密數(shù)據(jù)為利用預(yù)設(shè)加密算法對待存儲數(shù)據(jù)的原數(shù)據(jù)鍵進(jìn)行處理得到的。具體地,與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值。
其中,本發(fā)明提供的數(shù)據(jù)存儲方案可以用于查殺惡意文件的系統(tǒng)和服務(wù)中,也可以用于檢測和收集惡意網(wǎng)址的系統(tǒng)和服務(wù)中。具體地,在查殺惡意文件的系統(tǒng)和服務(wù)中,可利用本發(fā)明提供的數(shù)據(jù)存儲方案對數(shù)據(jù)鍵值對形式的安全文件樣本或灰文件樣本進(jìn)行存儲,其中,灰文件樣本為安全性未知的文件樣本。例如,當(dāng)對灰文件樣本進(jìn)行存儲時,待存儲灰文件樣本即為本發(fā)明所述的待存儲數(shù)據(jù),待存儲灰文件樣本的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲灰文件樣本的原數(shù)據(jù)鍵計算得到的MD5值;當(dāng)對安全文件樣本進(jìn)行存儲時,待存儲安全文件樣本即為本發(fā)明所述的待存儲數(shù)據(jù),待存儲安全文件樣本的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲安全文件樣本的原數(shù)據(jù)鍵計算得到的MD5值。
步驟S101,截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識。
步驟S102,截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識。
步驟S103,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
其中,第一存儲文件包括多個第一文件塊,第二存儲文件包括多個第二文件塊。本領(lǐng)域技術(shù)人員可根據(jù)實(shí)際需要設(shè)置第一預(yù)設(shè)位置、第二預(yù)設(shè)位置和第三預(yù)設(shè)位置,此處不做限定。
假設(shè)步驟S100獲取得到的與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值,該MD5值包括128位數(shù)據(jù),其中,第一預(yù)設(shè)位置可為前8位,位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-255,用于確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;第二預(yù)設(shè)位置可為第9位至第28位,一共20位,位于第9位至第28位的第二子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-1048575,用于確定在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;第三預(yù)設(shè)位置為第25位至第128位,一共104位,將位于第25位至第128位的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
例如,位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值為215,位于第9位至第28位的第二子數(shù)據(jù)所對應(yīng)的數(shù)值為5200,那么在步驟S101中,所確定的第一存儲文件的第一文件標(biāo)識為215,所確定的第二存儲文件的第二文件標(biāo)識也為215,所確定的第一存儲文件的第一文件標(biāo)識和所確定的第二存儲文件的第二文件標(biāo)識相對應(yīng);在步驟S102中,在第一文件標(biāo)識為215的第一存儲文件中確定第一文件塊的塊標(biāo)識為5200;在步驟S103中,將位于第25位至第128位的第三子數(shù)據(jù)存儲至第二文件標(biāo)識為215的第二存儲文件中的第二文件塊中。
步驟S104,得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵。
其中,新數(shù)據(jù)鍵包括:第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識。利用該方法,能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵。
步驟S105,根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
具體地,可將新數(shù)據(jù)鍵作為數(shù)據(jù)鍵,將待存儲數(shù)據(jù)的原數(shù)據(jù)鍵、原數(shù)據(jù)鍵對應(yīng)的原數(shù)據(jù)值和原數(shù)據(jù)鍵的長度信息作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),即將新key作為數(shù)據(jù)鍵,將待存儲數(shù)據(jù)的原key、原value和原key的長度信息作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù)。在構(gòu)建了實(shí)例數(shù)據(jù)之后,將所構(gòu)建的實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。由于新數(shù)據(jù)鍵所占空間小于待存儲數(shù)據(jù)的原數(shù)據(jù)鍵所占空間,利用新數(shù)據(jù)鍵作為數(shù)據(jù)鍵,能夠節(jié)省存儲空間,便于進(jìn)行插入、查找或索引處理,有助于提高數(shù)據(jù)處理效率。
根據(jù)本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲方法,獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),接著截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識,截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中,然后得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵,根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。利用本發(fā)明提供的技術(shù)方案,根據(jù)與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵,從而節(jié)省了存儲空間,優(yōu)化了存儲方式,提高了數(shù)據(jù)處理效率。
圖2示出了根據(jù)本發(fā)明另一個實(shí)施例的數(shù)據(jù)存儲方法的流程示意圖,如圖2所示,如圖2所示,該方法包括如下步驟:
步驟S200,預(yù)先創(chuàng)建第一存儲文件、第二存儲文件和第三存儲文件,并在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊。
其中,第一存儲文件由第一文件塊組成;第二存儲文件由第二文件塊組成;第三存儲文件由第三文件塊組成。
在一個具體的示例中,創(chuàng)建256(16進(jìn)制FF)個第一存儲文件,每個第一存儲文件的大小為9437184字節(jié),同時在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建256個內(nèi)存塊,每個內(nèi)存塊大小為9437184字節(jié),256個內(nèi)存塊與256個第一存儲文件一一映射;其中,內(nèi)存塊和第一存儲文件的映射可以通過系統(tǒng)接口實(shí)現(xiàn),例如UNIX系統(tǒng)中的mmap接口。每個第一存儲文件分為1048576(即220)個第一文件塊,每個第一文件塊的大小為9字節(jié)。
創(chuàng)建256個第二存儲文件,每個第二存儲文件的初始大小為6800000字節(jié),同時在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建256個內(nèi)存塊,每個內(nèi)存塊大小為6800000字節(jié),256個內(nèi)存塊與256個第二存儲文件一一映射;每個初始的第二存儲文件分為400000個第二文件塊,每個第二文件塊的大小為17字節(jié)。對于一個第二存儲文件,每當(dāng)寫滿400000個第二文件塊時,將擴(kuò)充400000個第二文件塊,即第二存儲文件的大小增加6800000字節(jié),再在系統(tǒng)內(nèi)存中創(chuàng)建一個內(nèi)存塊與該第二存儲文件一一映射。
創(chuàng)建256個第三存儲文件,每個第三存儲文件的初始大小為2880000字節(jié),同時在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建256個內(nèi)存塊,每個內(nèi)存塊大小為2880000字節(jié),256個內(nèi)存塊與256個第三存儲文件一一映射;每個初始的第三存儲文件分為80000個第三文件塊,每個第三文件塊的大小為36字節(jié)。對于一個第三存儲文件,每當(dāng)寫滿80000個第三文件塊時,將擴(kuò)充80000個第三文件塊,即第三存儲文件的大小增加2880000字節(jié),再在系統(tǒng)內(nèi)存中創(chuàng)建一個內(nèi)存塊與該第三存儲文件一一映射。
由于第一存儲文件、第二存儲文件和第三存儲文件都具有與其相映射的內(nèi)存塊,那么讀寫文件操作就可通過讀寫內(nèi)存完成,將較慢的磁盤讀寫轉(zhuǎn)化為極快的內(nèi)存讀寫,從而有效地提高了讀寫性能。
步驟S201,獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)。
具體地,與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值。
步驟S202,截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識。
步驟S203,截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識。
其中,第二子數(shù)據(jù)對應(yīng)的數(shù)據(jù)范圍小于或等于第一文件塊的總數(shù)量,從而能夠根據(jù)第二子數(shù)據(jù)確定第一文件塊的塊標(biāo)識。
步驟S204,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
假設(shè)步驟S201獲取得到的與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值,該MD5值包括128位數(shù)據(jù),其中,第一預(yù)設(shè)位置為前8位,MD5值中位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-255,用于確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;第二預(yù)設(shè)位置為第9位至第28位,一共20位,MD5值中位于第9位至第28位的第二子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-1048575,用于在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;第三預(yù)設(shè)位置為第25位至第128位,一共104位,將MD5值中位于第25位至第128位的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。其中,將MD5值中位于第25位至第128位的第三子數(shù)據(jù)順序插入到所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
由于MD5值中位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-255,而預(yù)先創(chuàng)建了256個第一存儲文件和第二存儲文件,因此,能夠根據(jù)MD5值中位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識。又由于MD5值中位于第9位至第28位的第二子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-1048575,而每個第一存儲文件分為1048576個第一文件塊,第二子數(shù)據(jù)對應(yīng)的數(shù)據(jù)范圍等于第一文件塊的總數(shù)量,因此,能夠根據(jù)MD5值中位于第9位至第28位的第二子數(shù)據(jù)所對應(yīng)的數(shù)值,在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識。
具體地,在步驟S204中,通過系統(tǒng)接口,以內(nèi)存映射方式,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中,從而將較慢的磁盤讀寫轉(zhuǎn)化為極快的內(nèi)存讀寫,有效地提高了讀寫性能。
可選地,該方法還可包括:根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,計算長度取余結(jié)果;將計算得到的長度取余結(jié)果存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中;根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,確定冗余校驗(yàn)碼;將所確定的冗余校驗(yàn)碼存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中的步驟。
其中,將待存儲數(shù)據(jù)的原數(shù)據(jù)鍵的長度mod 0xFF,計算得到長度取余結(jié)果,另外,可利用預(yù)設(shè)算法,根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,確定冗余校驗(yàn)碼。第二文件塊的大小為17字節(jié),在每個第二文件塊中:(1)使用13字節(jié)的空間存儲待存儲數(shù)據(jù)的原數(shù)據(jù)鍵對應(yīng)的MD5值中位于第25位至第128位的第三子數(shù)據(jù);(2)為了防止加密數(shù)據(jù)存在沖突,使用2字節(jié)的空間存儲長度取余結(jié)果;(3)使用2字節(jié)的空間存儲冗余校驗(yàn)碼,以供校驗(yàn)時使用。
步驟S205,得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵。
利用該方法,能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵。
可選地,新數(shù)據(jù)鍵除了包括第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識,還可包括版本信息,利用版本信息能夠在并發(fā)請求讀寫數(shù)據(jù)時有效地保證數(shù)據(jù)的一致性。
步驟S206,根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
具體地,在步驟S206中,可將新數(shù)據(jù)鍵作為數(shù)據(jù)鍵,將待存儲數(shù)據(jù)的原數(shù)據(jù)鍵、原數(shù)據(jù)鍵對應(yīng)的原數(shù)據(jù)值和原數(shù)據(jù)鍵的長度信息作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),即將新key作為數(shù)據(jù)鍵,將待存儲數(shù)據(jù)的原key、原value和原key的長度信息作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù)。在構(gòu)建了實(shí)例數(shù)據(jù)之后,將所構(gòu)建的實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。由于新數(shù)據(jù)鍵所占空間小于待存儲數(shù)據(jù)的原數(shù)據(jù)鍵所占空間,利用新數(shù)據(jù)鍵作為數(shù)據(jù)鍵,能夠節(jié)省存儲空間,便于進(jìn)行插入、查找或索引處理,有助于提高數(shù)據(jù)處理效率。
步驟S207,根據(jù)第一子數(shù)據(jù)和第二子數(shù)據(jù),判斷待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突;若是,則執(zhí)行步驟S209;若否,則執(zhí)行步驟S208。
在步驟S207中,根據(jù)第一子數(shù)據(jù)和第二子數(shù)據(jù),對待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突進(jìn)行判斷。如果判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則執(zhí)行步驟S209;如果判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)不存在沖突,則執(zhí)行步驟S208。
當(dāng)步驟S201獲取得到的與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值,在本發(fā)明中,預(yù)先創(chuàng)建了256個第一存儲文件,每個第一存儲文件分為1048576個第一文件塊,那么利用第一存儲文件僅能精確到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵對應(yīng)的MD5值中的第28位,僅能存儲228(即268435456)個不同的數(shù)據(jù)。當(dāng)存在海量的待存儲數(shù)據(jù)時,很有可能會出現(xiàn)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的MD5值中的前28位的數(shù)據(jù)相同的情況,將這種情況稱為沖突,那么在步驟S207中,可根據(jù)MD5值中的前28位的數(shù)據(jù),判斷待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的MD5值是否存在沖突。
步驟S208,將新數(shù)據(jù)鍵寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
在經(jīng)步驟S207判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)不存在沖突的情況下,則將新數(shù)據(jù)鍵寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
步驟S209,判斷存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量;若是,則執(zhí)行步驟S210;若否,則執(zhí)行步驟S211。
在經(jīng)步驟S207判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突的情況下,在步驟S209中,還需判斷存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量。其中,預(yù)設(shè)數(shù)量是根據(jù)新數(shù)據(jù)鍵和第三文件塊的大小計算得到的,具體為第三文件塊所能容納新數(shù)據(jù)鍵的數(shù)量。
步驟S210,將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)作為數(shù)據(jù)鍵,將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第二數(shù)據(jù)庫中。
例如,存在沖突的待存儲數(shù)據(jù)的原key相對應(yīng)的加密數(shù)據(jù)為MD5值,則將該MD5值作為數(shù)據(jù)鍵,將存在沖突的待存儲數(shù)據(jù)的新key作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù)。在構(gòu)建了實(shí)例數(shù)據(jù)之后,將所構(gòu)建的實(shí)例數(shù)據(jù)寫入第二數(shù)據(jù)庫中。由于MD5值所占空間小于待存儲數(shù)據(jù)的原數(shù)據(jù)鍵所占空間,利用MD5值作為數(shù)據(jù)鍵,能夠節(jié)省存儲空間,便于進(jìn)行插入、查找或索引處理,有助于提高數(shù)據(jù)處理效率。
可選地,在判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量的情況下,還可將沖突標(biāo)記位寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
步驟S211,根據(jù)第一子數(shù)據(jù),確定第三存儲文件的第三文件標(biāo)識。
在經(jīng)步驟S209判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)未超過預(yù)設(shè)數(shù)量時,在步驟S211中,根據(jù)第一子數(shù)據(jù),確定第三存儲文件的第三文件標(biāo)識。由于MD5值中位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值范圍為0-255,而預(yù)先創(chuàng)建了256個第三存儲文件,因此,能夠根據(jù)MD5值中位于前8位的第一子數(shù)據(jù)所對應(yīng)的數(shù)值確定第三存儲文件的第三文件標(biāo)識。
步驟S212,將新數(shù)據(jù)鍵寫入所確定的第三文件標(biāo)識對應(yīng)的的第三存儲文件中的第三文件塊中。
由于待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,為了便于識別,存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵還包括沖突標(biāo)記位。根據(jù)沖突標(biāo)記位可知該原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突。
另外,為了能夠在并發(fā)請求讀寫數(shù)據(jù)時有效地保證數(shù)據(jù)的一致性,新數(shù)據(jù)鍵還包括版本信息,那么新數(shù)據(jù)鍵共包括第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識、版本信息以及沖突標(biāo)記位。在本發(fā)明實(shí)施例中,新數(shù)據(jù)鍵的大小為9字節(jié),其中,使用1字節(jié)的空間存儲第一文件標(biāo)識,使用4字節(jié)的空間存儲第二文件塊的塊標(biāo)識,使用3.5字節(jié)的空間存儲版本信息,使用0.5字節(jié)的空間存儲沖突標(biāo)記位。
在本發(fā)明中,利用同一個第三文件塊存儲一組存在沖突的待存儲數(shù)據(jù)的新數(shù)據(jù)鍵。例如,待存儲數(shù)據(jù)1、待存儲數(shù)據(jù)2和待存儲數(shù)據(jù)3存在沖突,待存儲數(shù)據(jù)4、待存儲數(shù)據(jù)5和待存儲數(shù)據(jù)6存在沖突,則可稱待存儲數(shù)據(jù)1、待存儲數(shù)據(jù)2和待存儲數(shù)據(jù)3為一組存在沖突的待存儲數(shù)據(jù),待存儲數(shù)據(jù)4、待存儲數(shù)據(jù)5和待存儲數(shù)據(jù)6為另一組存在沖突的待存儲數(shù)據(jù),那么將待存儲數(shù)據(jù)1的新數(shù)據(jù)鍵、待存儲數(shù)據(jù)2的新數(shù)據(jù)鍵和待存儲數(shù)據(jù)3的新數(shù)據(jù)鍵寫入至同一個第三文件塊,將待存儲數(shù)據(jù)4的新數(shù)據(jù)鍵、待存儲數(shù)據(jù)5的新數(shù)據(jù)鍵和待存儲數(shù)據(jù)6的新數(shù)據(jù)鍵寫入至另一個第三文件塊。
由于每個第三文件塊的大小有限,每個第三文件塊中只能夠被寫入預(yù)設(shè)數(shù)量的新數(shù)據(jù)鍵,例如,在本發(fā)明實(shí)施例中,每個第三文件塊的大小為36字節(jié),新數(shù)據(jù)鍵的大小為9字節(jié),那么第三文件塊中只能夠被寫入4個新數(shù)據(jù)鍵,此時,預(yù)設(shè)數(shù)量即為4,那么當(dāng)存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過4個時,將無法利用同一個第三文件塊存儲該組中所有的存在沖突的待存儲數(shù)據(jù)的新數(shù)據(jù)鍵。
因此,在經(jīng)步驟S207判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突的情況下,還需步驟S209對存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量進(jìn)行判斷,如果判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則執(zhí)行步驟S210。
步驟S213,將第一文件標(biāo)識和第三文件塊的塊標(biāo)識寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
在將存在沖突的待存儲數(shù)據(jù)的新數(shù)據(jù)鍵寫入所確定的第三文件標(biāo)識對應(yīng)的的第三存儲文件中的第三文件塊中之后,在步驟S213中,將第一文件標(biāo)識和第三文件塊的塊標(biāo)識寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
可選地,在步驟S213中,還可將沖突標(biāo)記位寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
根據(jù)本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲方法,查詢某條待查詢數(shù)據(jù)的具體過程如下:
(1)根據(jù)該條待查詢數(shù)據(jù)的原key,計算得到對應(yīng)的MD5值,其中,該MD5值包括128位數(shù)據(jù)。
(2)利用MD5值中位于前8位的數(shù)據(jù)所對應(yīng)的數(shù)值確定第一存儲文件的第一文件標(biāo)識、第二存儲文件的第二文件標(biāo)識和第三存儲文件的第三文件標(biāo)識,其中,第一文件標(biāo)識、第二文件標(biāo)識和第三文件標(biāo)識相對應(yīng),范圍為0-255;所確定的第三文件標(biāo)識在MD5值中的前28位的數(shù)據(jù)存在沖突時使用。
(3)利用MD5值中位于第9位至第28位的數(shù)據(jù)所對應(yīng)的數(shù)值在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識,第一文件塊的塊標(biāo)識范圍為0-1048575。
(4)查詢所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中是否存儲有新key。
(5)如果所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中存儲有新key,說明該條待查詢數(shù)據(jù)的原key對應(yīng)的MD5值不存在沖突,則從新key中獲取第二文件塊的塊標(biāo)識,接著查找第二文件塊的塊標(biāo)識對應(yīng)的第二文件塊,從該第二文件塊中獲取存儲的MD5值中位于第25位至第108位的數(shù)據(jù)、長度取余結(jié)果和冗余校驗(yàn)碼,判斷從該第二文件塊中所獲取的MD5值中位于第25位至第108位的數(shù)據(jù)是否與步驟(1)中計算得到的MD5值中位于第25位至第108位的數(shù)據(jù)相同,并根據(jù)待查詢數(shù)據(jù)的原key計算對應(yīng)的長度取余結(jié)果和冗余校驗(yàn)碼,將計算得到的長度取余結(jié)果和冗余校驗(yàn)碼分別與從該第二文件塊中所獲取的長度取余結(jié)果和冗余校驗(yàn)碼進(jìn)行比較,校驗(yàn)數(shù)據(jù)最終一致性。如果校驗(yàn)成功,則從第一數(shù)據(jù)庫中查找以新key為數(shù)據(jù)鍵的實(shí)例數(shù)據(jù),從查找到的實(shí)例數(shù)據(jù)中獲取存儲數(shù)據(jù)的原value。該原value即為該待查詢數(shù)據(jù)的原key對應(yīng)的數(shù)據(jù)值。
(6)如果所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中存儲有第一文件標(biāo)識、第三文件塊的塊標(biāo)識和沖突標(biāo)記位,說明該條待查詢數(shù)據(jù)的原key對應(yīng)的MD5值存在沖突,且存在沖突的存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)未超過預(yù)設(shè)數(shù)量,則查找第三文件塊的塊標(biāo)識對應(yīng)的第三文件塊,從該第三文件塊中逐個獲取新key,接著針對每一個新key,從新key中獲取第二文件塊的塊標(biāo)識,查找第二文件塊的塊標(biāo)識對應(yīng)的第二文件塊,利用該第二文件塊中存儲的MD5值中位于第25位至第108位的數(shù)據(jù)、長度取余結(jié)果和冗余校驗(yàn)碼進(jìn)行校驗(yàn)。如果經(jīng)校驗(yàn)發(fā)現(xiàn)根據(jù)該第三文件塊中的某個新key能夠校驗(yàn)成功,則從第一數(shù)據(jù)庫中查找以該新key為數(shù)據(jù)鍵的實(shí)例數(shù)據(jù),從查找的實(shí)例數(shù)據(jù)中獲取存儲數(shù)據(jù)的原value。該原value即為該待查詢數(shù)據(jù)的原key對應(yīng)的數(shù)據(jù)值。
(7)如果所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中未存儲有數(shù)據(jù)或者僅存儲有沖突標(biāo)記位,說明該條待查詢數(shù)據(jù)的原key對應(yīng)的MD5值可能存在沖突,且存在沖突的存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則從第二數(shù)據(jù)庫中查找以該MD5值為數(shù)據(jù)鍵的實(shí)例數(shù)據(jù),那么根據(jù)該實(shí)例數(shù)據(jù)得到對應(yīng)的新key,接著從查找到的實(shí)例數(shù)據(jù)中獲取存儲數(shù)據(jù)的新key,然后從新key中獲取第二文件塊的塊標(biāo)識,查找第二文件塊的塊標(biāo)識對應(yīng)的第二文件塊,利用該第二文件塊中存儲的MD5值中位于第25位至第108位的數(shù)據(jù)、長度取余結(jié)果和冗余校驗(yàn)碼進(jìn)行校驗(yàn)。如果校驗(yàn)成功,則從第一數(shù)據(jù)庫中查找以該新key為數(shù)據(jù)鍵的實(shí)例數(shù)據(jù),從查找到的實(shí)例數(shù)據(jù)中獲取存儲數(shù)據(jù)的原value。該原value即為該待查詢數(shù)據(jù)的原key對應(yīng)的數(shù)據(jù)值。
另外,基于本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲方法,對于一些存儲服務(wù),無需訪問數(shù)據(jù)庫就可進(jìn)行。例如,當(dāng)需要查詢某條數(shù)據(jù)是否已存儲時,可根據(jù)該條數(shù)據(jù)的原數(shù)據(jù)鍵計算相對應(yīng)的加密數(shù)據(jù),按照獲取新數(shù)據(jù)鍵的步驟,如果能夠查找到對應(yīng)的新數(shù)據(jù)鍵,則說明該條數(shù)據(jù)已存儲;如果無法查找到對應(yīng)的新數(shù)據(jù)鍵,則說明該條數(shù)據(jù)未存儲。
根據(jù)本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲方法,在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建了分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊,因此可將讀寫文件操作通過讀寫內(nèi)存完成,將較慢的磁盤讀寫轉(zhuǎn)化為極快的內(nèi)存讀寫,從而有效地提高了讀寫性能;根據(jù)與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵,節(jié)省了存儲空間,優(yōu)化了存儲方式;并且將進(jìn)行插入、查找、索引處理的處理對象由原數(shù)據(jù)鍵轉(zhuǎn)變?yōu)樾聰?shù)據(jù)鍵,有效地縮減了耗時,提高了數(shù)據(jù)處理效率。
本發(fā)明提供的數(shù)據(jù)存儲方案還可以用于查殺惡意文件的系統(tǒng)和服務(wù)中,例如,利用云端查殺惡意文件的服務(wù)中,也可以用于檢測和收集惡意網(wǎng)址的系統(tǒng)和服務(wù)中。
例如,查殺惡意文件的系統(tǒng)包括:樣本存儲裝置、查殺引擎、掃描調(diào)度裝置和包含多個鑒定器的樣本掃描裝置。該系統(tǒng)可以是系統(tǒng)中各個裝置位于同一個物理設(shè)備中,也可以是系統(tǒng)中各個裝置位于不同的物理設(shè)備中。
其中,樣本存儲裝置,適于存儲文件樣本。具體地,該樣本存儲裝置利用本發(fā)明提供的數(shù)據(jù)存儲方案對數(shù)據(jù)鍵值對形式的灰文件樣本進(jìn)行存儲。
掃描調(diào)度裝置,適于對于文件樣本中的灰文件樣本,根據(jù)預(yù)設(shè)的策略從樣本存儲裝置存儲的灰文件樣本中選取待掃描的灰文件樣本,并根據(jù)各個鑒定器的更新記錄和/或鑒定器的掃描記錄選取用于掃描灰文件樣本的鑒定器。其中,鑒定器可以為用于檢測文件樣本安全性的殺毒應(yīng)用,例如bitdefender(比特梵德,來自羅馬尼亞的一種殺毒應(yīng)用),以及QVM(奇虎支持向量機(jī))提供的殺毒應(yīng)用,以及云殺毒引擎等。
圖3示出了根據(jù)本發(fā)明一個實(shí)施例的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖,如圖3所示,該裝置包括:獲取模塊301、第一確定模塊302、第二確定模塊303、存儲模塊304、生成模塊305和第一寫入模塊306。
獲取模塊301適于:獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)。
其中,與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值。
第一確定模塊302適于:截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識。
第二確定模塊303適于:截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識。
本領(lǐng)域技術(shù)人員可根據(jù)實(shí)際需要設(shè)置第一預(yù)設(shè)位置和第二預(yù)設(shè)位置,此處不做限定。
存儲模塊304適于:將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
生成模塊305適于:得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵。
其中,新數(shù)據(jù)鍵包括:第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識。利用該裝置,能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵。
第一寫入模塊306適于:根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
根據(jù)本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲裝置,獲取模塊獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),第一確定模塊截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識,第二確定模塊截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識,存儲模塊將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中,生成模塊得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵,第一寫入模塊根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。利用本發(fā)明提供的技術(shù)方案,根據(jù)與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵,從而節(jié)省了存儲空間,優(yōu)化了存儲方式,提高了數(shù)據(jù)處理效率。
圖4示出了根據(jù)本發(fā)明另一個實(shí)施例的數(shù)據(jù)存儲裝置的結(jié)構(gòu)框圖,如圖4所示,該裝置包括:創(chuàng)建模塊401、獲取模塊402、第一確定模塊403、第二確定模塊404、存儲模塊405、生成模塊406、第一寫入模塊407、第一判斷模塊408、第二寫入模塊409和第三寫入模塊410。
創(chuàng)建模塊401適于:預(yù)先創(chuàng)建第一存儲文件、第二存儲文件和第三存儲文件,并在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊。
第一存儲文件由第一文件塊組成;第二存儲文件由第二文件塊組成;第三存儲文件由第三文件塊組成。具體地,可通過系統(tǒng)接口,在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊。由于第一存儲文件、第二存儲文件和第三存儲文件都具有與其相映射的內(nèi)存塊,那么讀寫文件操作就可通過讀寫內(nèi)存完成,將較慢的磁盤讀寫轉(zhuǎn)化為極快的內(nèi)存讀寫,從而有效地提高了讀寫性能。
獲取模塊402適于:獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)。
其中,獲取模塊402所獲取的與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)可為根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵計算得到的MD5值。
第一確定模塊403適于:截取加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識。
第二確定模塊404適于:截取加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識。
其中,第二子數(shù)據(jù)對應(yīng)的數(shù)值范圍小于或等于第一文件塊的總數(shù)量。
存儲模塊405適于:將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
其中,存儲模塊進(jìn)一步適于:通過系統(tǒng)接口,以內(nèi)存映射方式,將加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
生成模塊406適于:得到包含第一文件標(biāo)識和第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵。
可選地,新數(shù)據(jù)鍵除了包括第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識,還可包括版本信息,利用版本信息能夠在并發(fā)請求讀寫數(shù)據(jù)時有效地保證數(shù)據(jù)的一致性。
第一寫入模塊407適于:根據(jù)新數(shù)據(jù)鍵和待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
第一判斷模塊408適于:根據(jù)第一子數(shù)據(jù)和第二子數(shù)據(jù),判斷待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突。
第二寫入模塊409適于:若第一判斷模塊408判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)不存在沖突,則將新數(shù)據(jù)鍵寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
第一確定模塊403進(jìn)一步適于:若第一判斷模塊408判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則根據(jù)第一子數(shù)據(jù),確定第三存儲文件的第三文件標(biāo)識。
第三寫入模塊410適于:若第一判斷模塊408判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則將新數(shù)據(jù)鍵寫入所確定的第三文件標(biāo)識對應(yīng)的的第三存儲文件中的第三文件塊中;將第一文件標(biāo)識和第三文件塊的塊標(biāo)識寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
由于待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,為了便于識別,存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵還包括沖突標(biāo)記位。根據(jù)沖突標(biāo)記位可知該原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突。
另外,為了能夠在并發(fā)請求讀寫數(shù)據(jù)時有效地保證數(shù)據(jù)的一致性,新數(shù)據(jù)鍵還包括版本信息,那么新數(shù)據(jù)鍵共包括第一文件標(biāo)識和存儲有第三子數(shù)據(jù)的第二文件塊的塊標(biāo)識、版本信息以及沖突標(biāo)記位。
在本發(fā)明中,利用同一個第三文件塊存儲一組存在沖突的待存儲數(shù)據(jù)的新數(shù)據(jù)鍵。由于每個第三文件塊的大小有限,每個第三文件塊中只能夠被寫入預(yù)設(shè)數(shù)量的新數(shù)據(jù)鍵,因此,該裝置還包括:第二判斷模塊411和第四寫入模塊412。
第二判斷模塊411適于:若第一判斷模塊408判斷得到待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則判斷存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量。
如果第二判斷模塊411判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則觸發(fā)第四寫入模塊412;如果第二判斷模塊411判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)未超過預(yù)設(shè)數(shù)量,則觸發(fā)第三寫入模塊410。
第四寫入模塊412適于:若第二判斷模塊411判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)作為數(shù)據(jù)鍵,將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將實(shí)例數(shù)據(jù)寫入第二數(shù)據(jù)庫中。
可選地,第四寫入模塊412進(jìn)一步適于:若第二判斷模塊411判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則將沖突標(biāo)記位寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
其中,創(chuàng)建模塊401與第一確定模塊403、第二確定模塊404、存儲模塊405、第二寫入模塊409、第三寫入模塊410以及第四寫入模塊412均有連接關(guān)系,為了便于查看,圖中并未示出全部的連接關(guān)系。
該裝置還可包括:計算模塊413和第三確定模塊414。
計算模塊413適于:根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,計算長度取余結(jié)果。
具體地,計算模塊413將待存儲數(shù)據(jù)的原數(shù)據(jù)鍵的長度mod 0xFF,計算得到長度取余結(jié)果。
第三確定模塊414適于:根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,確定冗余校驗(yàn)碼。
具體地,第三確定模塊414利用預(yù)設(shè)算法,根據(jù)待存儲數(shù)據(jù)的數(shù)據(jù)鍵,確定冗余校驗(yàn)碼。
存儲模塊405進(jìn)一步適于:將計算模塊413計算得到的長度取余結(jié)果和第三確定模塊414所確定的冗余校驗(yàn)碼存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
根據(jù)本發(fā)明實(shí)施例提供的數(shù)據(jù)存儲裝置,在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建了分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊,因此可將讀寫文件操作通過讀寫內(nèi)存完成,將較慢的磁盤讀寫轉(zhuǎn)化為極快的內(nèi)存讀寫,從而有效地提高了讀寫性能;根據(jù)與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù),能夠?qū)⒋鎯?shù)據(jù)的原數(shù)據(jù)鍵轉(zhuǎn)化為所占空間較小的新數(shù)據(jù)鍵,節(jié)省了存儲空間,優(yōu)化了存儲方式;并且將進(jìn)行插入、查找、索引處理的處理對象由原數(shù)據(jù)鍵轉(zhuǎn)變?yōu)樾聰?shù)據(jù)鍵,有效地縮減了耗時,提高了數(shù)據(jù)處理效率。
在此提供的算法和顯示不與任何特定計算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個或多個設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個或者多個處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機(jī)程序和計算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲在計算機(jī)可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了:A1、一種數(shù)據(jù)存儲方法,包括:
獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù);
截取所述加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;
截取所述加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;
將所述加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中;
得到包含所述第一文件標(biāo)識和所述第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵;
根據(jù)所述新數(shù)據(jù)鍵和所述待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將所述實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
A2、根據(jù)A1所述的方法,所述方法還包括:
根據(jù)所述第一子數(shù)據(jù)和所述第二子數(shù)據(jù),判斷所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突;
若判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)不存在沖突,則將所述新數(shù)據(jù)鍵寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
A3、根據(jù)A2所述的方法,所述方法還包括:
若判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則根據(jù)所述第一子數(shù)據(jù),確定第三存儲文件的第三文件標(biāo)識;
將所述新數(shù)據(jù)鍵寫入所確定的第三文件標(biāo)識對應(yīng)的的第三存儲文件中的第三文件塊中;
將所述第一文件標(biāo)識和所述第三文件塊的塊標(biāo)識寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
A4、根據(jù)A3所述的方法,所述新數(shù)據(jù)鍵還包括:沖突標(biāo)記位。
A5、根據(jù)A1所述的方法,在所述獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)之前,所述方法還包括:
預(yù)先創(chuàng)建第一存儲文件、第二存儲文件和第三存儲文件,并在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊;
其中,所述第一存儲文件由第一文件塊組成,所述第二子數(shù)據(jù)對應(yīng)的數(shù)值范圍小于或等于所述第一文件塊的總數(shù)量;所述第二存儲文件由第二文件塊組成;所述第三存儲文件由第三文件塊組成。
A6、根據(jù)A1所述的方法,所述將所述加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中進(jìn)一步包括:
通過系統(tǒng)接口,以內(nèi)存映射方式,將所述加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
A7、根據(jù)A2所述的方法,所述方法還包括:
若判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則判斷存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量;
若是,則將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)作為數(shù)據(jù)鍵,將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將所述實(shí)例數(shù)據(jù)寫入第二數(shù)據(jù)庫中。
A8、根據(jù)A1-A7任一項(xiàng)所述的方法,所述方法還包括:
根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,計算長度取余結(jié)果;
將計算得到的長度取余結(jié)果存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
A9、根據(jù)A1-A7任一項(xiàng)所述的方法,所述方法還包括:
根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,確定冗余校驗(yàn)碼;
將所確定的冗余校驗(yàn)碼存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
本發(fā)明還公開了:B10、一種數(shù)據(jù)存儲裝置,包括:
獲取模塊,適于獲取與待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù);
第一確定模塊,適于截取所述加密數(shù)據(jù)中位于第一預(yù)設(shè)位置的第一子數(shù)據(jù),確定第一存儲文件的第一文件標(biāo)識以及第二存儲文件的第二文件標(biāo)識;
第二確定模塊,適于截取所述加密數(shù)據(jù)中位于第二預(yù)設(shè)位置的第二子數(shù)據(jù),在所確定的第一文件標(biāo)識對應(yīng)的第一存儲文件中確定第一文件塊的塊標(biāo)識;
存儲模塊,適于將所述加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中;
生成模塊,適于得到包含所述第一文件標(biāo)識和所述第二文件塊的塊標(biāo)識的新數(shù)據(jù)鍵;
第一寫入模塊,適于根據(jù)所述新數(shù)據(jù)鍵和所述待存儲數(shù)據(jù),構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將所述實(shí)例數(shù)據(jù)寫入第一數(shù)據(jù)庫中。
B11、根據(jù)B10所述的裝置,所述裝置還包括:
第一判斷模塊,適于根據(jù)所述第一子數(shù)據(jù)和所述第二子數(shù)據(jù),判斷所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)是否存在沖突;
第二寫入模塊,適于若所述第一判斷模塊判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)不存在沖突,則將所述新數(shù)據(jù)鍵寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
B12、根據(jù)B11所述的裝置,所述第一確定模塊進(jìn)一步適于:若所述第一判斷模塊判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則根據(jù)所述第一子數(shù)據(jù),確定第三存儲文件的第三文件標(biāo)識;
所述裝置還包括:
第三寫入模塊,適于若所述第一判斷模塊判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則將所述新數(shù)據(jù)鍵寫入所確定的第三文件標(biāo)識對應(yīng)的的第三存儲文件中的第三文件塊中;將所述第一文件標(biāo)識和所述第三文件塊的塊標(biāo)識寫入所確定的第一文件塊的塊標(biāo)識對應(yīng)的第一文件塊中。
B13、根據(jù)B12所述的裝置,所述新數(shù)據(jù)鍵還包括:沖突標(biāo)記位。
B14、根據(jù)B10所述的裝置,所述裝置還包括:
創(chuàng)建模塊,適于預(yù)先創(chuàng)建第一存儲文件、第二存儲文件和第三存儲文件,并在系統(tǒng)內(nèi)存中預(yù)先創(chuàng)建分別與第一存儲文件、第二存儲文件和第三存儲文件相映射的內(nèi)存塊;
其中,所述第一存儲文件由第一文件塊組成,所述第二子數(shù)據(jù)對應(yīng)的數(shù)值范圍小于或等于所述第一文件塊的總數(shù)量;所述第二存儲文件由第二文件塊組成;所述第三存儲文件由第三文件塊組成。
B15、根據(jù)B10所述的裝置,所述存儲模塊進(jìn)一步適于:
通過系統(tǒng)接口,以內(nèi)存映射方式,將所述加密數(shù)據(jù)中位于第三預(yù)設(shè)位置的第三子數(shù)據(jù)存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
B16、根據(jù)B11所述的裝置,所述裝置還包括:
第二判斷模塊,適于若所述第一判斷模塊判斷得到所述待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)存在沖突,則判斷存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)是否超過預(yù)設(shè)數(shù)量;
第四寫入模塊,適于若所述第二判斷模塊判斷得到存在沖突的待存儲數(shù)據(jù)的數(shù)據(jù)條數(shù)超過預(yù)設(shè)數(shù)量,則將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)的加密數(shù)據(jù)作為數(shù)據(jù)鍵,將存在沖突的待存儲數(shù)據(jù)的原數(shù)據(jù)鍵相對應(yīng)新數(shù)據(jù)鍵作為數(shù)據(jù)鍵對應(yīng)的數(shù)據(jù)值,構(gòu)建數(shù)據(jù)鍵值對形式的實(shí)例數(shù)據(jù),將所述實(shí)例數(shù)據(jù)寫入第二數(shù)據(jù)庫中。
B17、根據(jù)B10-B16任一項(xiàng)所述的裝置,所述裝置還包括:計算模塊,適于根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,計算長度取余結(jié)果;
所述存儲模塊進(jìn)一步適于:將所述計算模塊計算得到的長度取余結(jié)果存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。
B18、根據(jù)B10-B16任一項(xiàng)所述的裝置,所述裝置還包括:第三確定模塊,適于根據(jù)待存儲數(shù)據(jù)的原數(shù)據(jù)鍵,確定冗余校驗(yàn)碼;
所述存儲模塊進(jìn)一步適于:將所述第三確定模塊所確定的冗余校驗(yàn)碼存儲至所確定的第二文件標(biāo)識對應(yīng)的第二存儲文件中的第二文件塊中。