數(shù)據(jù)存儲(chǔ)方法和裝置的制造方法
【專利摘要】本發(fā)明實(shí)施例公開了一種數(shù)據(jù)存儲(chǔ)方法和裝置。所述數(shù)據(jù)存儲(chǔ)方法包括:將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵,其中,所述待存儲(chǔ)數(shù)據(jù)的各值中包括用于區(qū)分不同值的字段信息;將第一數(shù)值空間的標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,第二數(shù)值空間的數(shù)值范圍小于第一數(shù)值空間的數(shù)值范圍;將變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與新的變換鍵對(duì)應(yīng)的值;將變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與變換鍵對(duì)應(yīng)的值存儲(chǔ)于存儲(chǔ)系統(tǒng)的磁盤空間中。本發(fā)明的技術(shù)方案優(yōu)化了現(xiàn)有的鍵值對(duì)形式的數(shù)據(jù)存儲(chǔ)技術(shù),減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
【專利說明】
數(shù)據(jù)存儲(chǔ)方法和裝置
技術(shù)領(lǐng)域
[0001 ]本發(fā)明實(shí)施例涉及信息處理技術(shù),尤其涉及一種數(shù)據(jù)存儲(chǔ)方法和裝置。
【背景技術(shù)】
[0002]目前,功能強(qiáng)大的互聯(lián)網(wǎng)綜合服務(wù)提供商可以為廣大網(wǎng)民提供信息檢索、社區(qū)服務(wù)、云存儲(chǔ)以及開發(fā)者平臺(tái)等多種綜合性服務(wù),一般來說,用戶基于不同類型的互聯(lián)網(wǎng)服務(wù)會(huì)申請(qǐng)相同或者不同的服務(wù)賬號(hào)(例如百度賬號(hào)等),服務(wù)器針對(duì)不同的服務(wù)賬號(hào)會(huì)存儲(chǔ)不同的用戶信息(例如,姓名、年齡以及職業(yè)等),因此,如何將服務(wù)賬號(hào)以及與服務(wù)賬號(hào)對(duì)應(yīng)的用戶信息(后文將上述兩者簡(jiǎn)稱用戶賬號(hào)關(guān)聯(lián)信息)進(jìn)行存儲(chǔ),并提供高可用、高并發(fā)的查詢服務(wù)變得非常重要。
[0003]目前,基于用戶賬號(hào)關(guān)聯(lián)信息的比較普遍的信息存儲(chǔ)方式是鍵值對(duì)(也稱為Key-Value)形式的信息存儲(chǔ)方式,S卩:將用戶賬號(hào)關(guān)聯(lián)信息中的服務(wù)賬號(hào)作為Key(也稱為鍵),將用戶信息作為Value(也稱為值),進(jìn)行對(duì)應(yīng)存儲(chǔ)。同時(shí),為了減少Key-Value形式的用戶賬號(hào)關(guān)聯(lián)信息對(duì)內(nèi)存的占用,現(xiàn)有技術(shù)提出一種將Key-Value中的Key存儲(chǔ)于內(nèi)存中,將Key-Value中的Value存儲(chǔ)于磁盤中的數(shù)據(jù)存儲(chǔ)方法(例如,百度的Mola存儲(chǔ)系統(tǒng))以減少對(duì)內(nèi)存資源的占用。
[0004]上述方法雖然可以緩解用戶賬號(hào)關(guān)聯(lián)信息對(duì)內(nèi)存的占用,但是,隨著用戶數(shù)據(jù)規(guī)模的不斷擴(kuò)大,內(nèi)存使用必將成為瓶頸。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲(chǔ)方法和裝置,以優(yōu)選現(xiàn)有的Key-Value形式的數(shù)據(jù)存儲(chǔ)技術(shù),減少存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0006]在第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法,包括:
[0007]將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵其中,所述待存儲(chǔ)數(shù)據(jù)的值中包括用于區(qū)分不同值的字段信息;
[0008]將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍;
[0009]將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值;
[0010]將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0011]在第二方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)裝置,包括:
[0012]標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊,用于將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵,其中,所述待存儲(chǔ)數(shù)據(jù)的值中包括用于區(qū)分不同值的字段信息;
[0013]變換鍵生成模塊,用于將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍;
[0014]變換鍵合并模塊,用于將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值;
[0015]存儲(chǔ)模塊,用于將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0016]本發(fā)明實(shí)施例將Key-Value形式的待存儲(chǔ)數(shù)據(jù)中各Key的取值進(jìn)行設(shè)定的壓縮處理,使得壓縮處理后的待存儲(chǔ)數(shù)據(jù)中包括多個(gè)相同Key,將與相同Key對(duì)應(yīng)的Value的歸并,以及將多個(gè)相同Key合并為一個(gè)新的Key,并將經(jīng)過上述處理后的Key-Value中的Key存儲(chǔ)于內(nèi)存中,將Key-Value中的Value存儲(chǔ)于磁盤中,可以解決現(xiàn)有的基于Key-Value的數(shù)據(jù)存儲(chǔ)方法在數(shù)據(jù)規(guī)模不斷擴(kuò)大過程中,內(nèi)存使用中的瓶頸問題,優(yōu)化了現(xiàn)有的Key-Value形式的數(shù)據(jù)存儲(chǔ)技術(shù),減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
【附圖說明】
[0017]圖1是本發(fā)明第一實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
[0018]圖2是本發(fā)明第二實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
[0019]圖3是本發(fā)明第三實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
[0020]圖4是本發(fā)明第四實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖;
[0021 ]圖5a是使用本發(fā)明實(shí)施例的方法前的一種基于MapReduce的數(shù)據(jù)存儲(chǔ)過程的示意圖;
?0022] 圖5b是使用本發(fā)明實(shí)施例的方法后的一種基于MapReduce的數(shù)據(jù)存儲(chǔ)過程的示意圖;
[0023]圖6是本發(fā)明第五實(shí)施例的一種數(shù)據(jù)存儲(chǔ)裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0024]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例作進(jìn)一步的詳細(xì)描述??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。
[0025]另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部內(nèi)容。在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作(或步驟)描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對(duì)應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
[0026]第一實(shí)施例
[0027]圖1為本發(fā)明第一實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)方法的流程圖,本實(shí)施例的方法可以由數(shù)據(jù)存儲(chǔ)裝置來執(zhí)行,該裝置可通過硬件和/或軟件的方式實(shí)現(xiàn),并一般可集成于完成將待存儲(chǔ)數(shù)據(jù)存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的存儲(chǔ)服務(wù)器中,與存放待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)服務(wù)器配合使用,其中,存儲(chǔ)服務(wù)器和數(shù)據(jù)服務(wù)器可以是同一服務(wù)器或者屬于同一服務(wù)器集群,可以為不同的服務(wù)器,本實(shí)施例對(duì)此并不進(jìn)行限制。本實(shí)施例的方法具體包括:
[0028]110、將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0029]如【背景技術(shù)】所述,本發(fā)明實(shí)施例所適用的應(yīng)用場(chǎng)景為:基于Key-Value形式的數(shù)據(jù)的存儲(chǔ),其中,Key存放于存儲(chǔ)系統(tǒng)的內(nèi)存中,Value存放于存儲(chǔ)系統(tǒng)的磁盤中。
[0030]Key-Value是一個(gè)常用的數(shù)據(jù)結(jié)構(gòu)概念,通常又稱為字典(Dict1nary)或映射(Map)。每個(gè)存放到該數(shù)據(jù)結(jié)構(gòu)中的Value都對(duì)應(yīng)一個(gè)全局唯一的Key。該數(shù)據(jù)結(jié)構(gòu)的特征是以空間換時(shí)間,通過Key查詢Value通常是比較快速的過程。簡(jiǎn)言之,Key為存放數(shù)據(jù)的編號(hào)值,Value為存放的數(shù)據(jù)。
[0031]其中,Key可以為任何類型的數(shù)據(jù)格式,例如,文本型或者數(shù)值型等。
[0032]在本實(shí)施例的一個(gè)優(yōu)選的實(shí)施方式中,所述待存儲(chǔ)數(shù)據(jù)的Key可以包括用戶賬號(hào)標(biāo)識(shí),所述待存儲(chǔ)數(shù)據(jù)的Value可以包括與所述用戶賬號(hào)標(biāo)識(shí)對(duì)應(yīng)的用戶基本信息。
[0033]其中,用戶賬號(hào)標(biāo)識(shí)可以為文本形式的賬號(hào)名,例如:“AAA@baidu.com”,也可以為用戶在網(wǎng)站注冊(cè)時(shí),該網(wǎng)站基于注冊(cè)時(shí)間分配給用戶的唯一編號(hào),例如“0X12423”等。與用戶賬號(hào)信息對(duì)應(yīng)的用戶基本信息可以包括用戶在網(wǎng)站注冊(cè)時(shí)輸入的基本信息,例如,用戶名、姓名、年齡以及職業(yè)等。
[0034]相應(yīng)的,一條具體的待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)形式可以包括:“0X12423-〉用戶名:zhansanibaudu.con ;姓名:張三;年齡:23”。
[0035]理論上說,為了能夠唯一識(shí)別一個(gè)Value,Key應(yīng)該彼此互不相同,考慮到這樣一種特殊情況,Value中的某一個(gè)字段可以用來唯一區(qū)分該Value與其他Value,例如,用戶基本信息中的用戶名,也即:待存儲(chǔ)數(shù)據(jù)的Value中包括用于區(qū)分不同Value的字段信息。
[0036]此時(shí),如果將多個(gè)Value對(duì)應(yīng)于相同的Key,則通過遍歷這多個(gè)Value中的字段信息的方式,同樣可以將各個(gè)不同的Value進(jìn)行區(qū)分,也即:可以用較短的時(shí)間損耗,換來內(nèi)存空間的大大節(jié)約,這就是本發(fā)明技術(shù)方案的核心發(fā)明點(diǎn)。
[0037]在本實(shí)施例中,考慮到需要對(duì)不同的Key進(jìn)行合并,以生成相同Key。因此,在進(jìn)行生成相同Key的處理之前,需要將不同的Key轉(zhuǎn)換為具有設(shè)定取值范圍的數(shù)值型數(shù)據(jù),也即:定長標(biāo)準(zhǔn)鍵。
[0038]其中,所述設(shè)定取值范圍優(yōu)選可以為二進(jìn)制的取值范圍,例如,2°?28。
[0039]在本實(shí)施例的一個(gè)優(yōu)選的實(shí)施方式中,如果待存儲(chǔ)數(shù)據(jù)的Key為數(shù)值形式的數(shù)據(jù),則可以直接通過基于哈希(也稱為散列或者Hash)函數(shù)的運(yùn)算,將待存儲(chǔ)數(shù)據(jù)的Key轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0040]哈希函數(shù),就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間。
[0041]在本實(shí)施例的另一個(gè)優(yōu)選的實(shí)施方式中,如果待存儲(chǔ)數(shù)據(jù)的Key為文本形式的數(shù)據(jù),則可以通過與文本中各個(gè)字母對(duì)應(yīng)的ASCII (Amer i can Standard Code forInformat1n Interchange,美國信息互換標(biāo)準(zhǔn)代碼)碼,首先將文本形式的Key轉(zhuǎn)換為二進(jìn)制的數(shù)值,之后可以通過基于哈希函數(shù)的運(yùn)算,將待存儲(chǔ)數(shù)據(jù)的Key轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵;或者
[0042]也可以通過預(yù)設(shè)詞典將該文本形式的Key中的各字母映射為一個(gè)one-hot(獨(dú)熱)表征向量。例如:(…,0,...,1,…,0,...),該向量長度為詞典的大小,有一個(gè)兀素為I,其余兀素全部為0,元素I所在的位置序號(hào)對(duì)應(yīng)于該字母在詞典中的序號(hào)。由于詞典大小固定,因此與各字母對(duì)應(yīng)的表征向量的長度均相同,因此,可以根據(jù)該表征向量,將Key轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0043 ] 例如,Key為“abc”,與該Key對(duì)應(yīng)的表征向量為(I,O,I,O,I,O),則可將111作為與該Key對(duì)應(yīng)的定長標(biāo)準(zhǔn)鍵。
[0044]120、將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍。
[0045]如前所述,為了實(shí)現(xiàn)對(duì)不同的Key進(jìn)行合并,以生成相同Key,一個(gè)簡(jiǎn)單有效的方式就是壓縮定長標(biāo)準(zhǔn)鍵的取值范圍,例如,將定長標(biāo)準(zhǔn)鍵的取值范圍從2°?28壓縮至2^-26,那么可以理解的是,壓縮后的各變換鍵中存在了具有相同Key的可能性。
[0046]其中,可以通過將存儲(chǔ)單元存儲(chǔ)的定長標(biāo)準(zhǔn)鍵向右移位的方式,實(shí)現(xiàn)取值范圍的壓縮,也可以通過取模運(yùn)算的方式實(shí)現(xiàn)取值范圍的壓縮,還可以通過取整運(yùn)算(向下或者向上)方式實(shí)現(xiàn)取值范圍的壓縮,本實(shí)施例對(duì)此并不進(jìn)行限制。
[0047]例如,下述四個(gè)定長標(biāo)準(zhǔn)鍵:3.7、2.4、4.5以及2.8,通過向下取整運(yùn)算,可以將上述標(biāo)準(zhǔn)鍵變換為3、2、4以及2這四個(gè)變換鍵,出現(xiàn)兩個(gè)相同Key,2。
[0048]130、將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值。
[0049]在本實(shí)施例中,可以直接將該目標(biāo)鍵作為所述新的變換鍵,也可以通過其他的變換方式(例如,通過設(shè)定函數(shù)變換,或者累加一個(gè)足夠大的數(shù)值等),生成與目標(biāo)鍵對(duì)應(yīng)的新的變換鍵。
[0050]續(xù)前例,如果與定長標(biāo)準(zhǔn)鍵2.4對(duì)應(yīng)的Value為“姓名:張三”,與定長標(biāo)準(zhǔn)鍵2.8對(duì)應(yīng)的Value為“姓名:李四”。則通過向下取整運(yùn)算后,可以將2作為變換鍵,將“{姓名:張三,姓名:李四}”這一值集合,作為與2對(duì)應(yīng)的Value。
[0051 ] 140、將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0052]如前所述,基于Key-Value形式的數(shù)據(jù),為了提高數(shù)據(jù)查找速度,可以將變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,而將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0053]在存儲(chǔ)系統(tǒng)進(jìn)行數(shù)據(jù)查找時(shí),首先在內(nèi)存空間中快速查找到Key,之后根據(jù)設(shè)定的對(duì)應(yīng)關(guān)系在磁盤空間中獲取與Key對(duì)應(yīng)的Value。其中,如果查找到的Key對(duì)應(yīng)一個(gè)Value集合,則可以通過遍歷Value中包括用于區(qū)分不同Value的字段信息的方式,找到實(shí)際所需的Value0
[0054]典型的,所述存儲(chǔ)系統(tǒng)具體可以為百度公司的Mola存儲(chǔ)系統(tǒng),Mola存儲(chǔ)系統(tǒng)的特點(diǎn)是低延遲與高并發(fā),該存儲(chǔ)系統(tǒng)中存儲(chǔ)有海量的Key-Value形式的數(shù)據(jù),其中,Key被存儲(chǔ)于內(nèi)存空間中,Value被存儲(chǔ)于磁盤空間中。
[0055]本發(fā)明實(shí)施例將Key-Value形式的待存儲(chǔ)數(shù)據(jù)中各Key的取值進(jìn)行設(shè)定的壓縮處理,使得壓縮處理后的待存儲(chǔ)數(shù)據(jù)中包括多個(gè)相同Key,將與相同Key對(duì)應(yīng)的Value的歸并,以及將多個(gè)相同Key合并為一個(gè)新的Key,并將經(jīng)過上述處理后的Key-Value中的Key存儲(chǔ)于內(nèi)存中,將Key-Value中的Value存儲(chǔ)于磁盤中,可以解決現(xiàn)有的基于Key-Value的數(shù)據(jù)存儲(chǔ)方法在數(shù)據(jù)規(guī)模不斷擴(kuò)大過程中,內(nèi)存使用中的瓶頸問題,優(yōu)化了現(xiàn)有的Key-Value形式的數(shù)據(jù)存儲(chǔ)技術(shù),減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0056]第二實(shí)施例
[0057]圖2是本發(fā)明第二實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖。本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行優(yōu)化,在本實(shí)施例中,將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵具體優(yōu)化為:選取具有設(shè)定數(shù)據(jù)輸出長度的哈希函數(shù);將所述待存儲(chǔ)數(shù)據(jù)中的各鍵輸入至所述哈希函數(shù)中,生成所述定長標(biāo)準(zhǔn)鍵。
[0058]相應(yīng)的,本實(shí)施例的方法具體包括:
[0059]210、選取具有設(shè)定數(shù)據(jù)輸出長度的哈希函數(shù)。
[0060]如前所述,哈希函數(shù)可以實(shí)現(xiàn)把任意長度的輸入,通過散列算法,變換成固定長度的輸出。根據(jù)所需的數(shù)據(jù)輸出長度,可以選擇不同類型的哈希函數(shù)。例如,MD4(MeSSage-Digest algorithm 4,信息摘要算法4)函數(shù),可輸出128位的二進(jìn)制數(shù)據(jù)。
[0061]220、將所述待存儲(chǔ)數(shù)據(jù)的各鍵輸入至所述哈希函數(shù)中,生成定長標(biāo)準(zhǔn)鍵。
[0062]在本實(shí)施例中,所述待存儲(chǔ)數(shù)據(jù)的各Key可以為數(shù)值型的用戶賬號(hào)標(biāo)識(shí),也可以為將文本形式的用戶賬號(hào)標(biāo)識(shí)經(jīng)過數(shù)值轉(zhuǎn)換后生成的數(shù)據(jù)。
[0063]通過將待存儲(chǔ)數(shù)據(jù)的各Key輸入至所述哈希函數(shù)中,可以輸出設(shè)定數(shù)據(jù)長度的定長標(biāo)準(zhǔn)鍵,例如,128位的定長標(biāo)準(zhǔn)鍵。
[0064]230、將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍。
[0065]240、將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值。
[0066]250、將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0067]本實(shí)施例的技術(shù)方案通過使用哈希函數(shù),可以簡(jiǎn)單、高效的將待存儲(chǔ)數(shù)據(jù)中不同數(shù)據(jù)長度的Key,轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵,實(shí)現(xiàn)了將待存儲(chǔ)數(shù)據(jù)的各Key均限定在一個(gè)固定的數(shù)值區(qū)間范圍內(nèi)(例如,128位),通過對(duì)該固定的數(shù)據(jù)區(qū)間中的數(shù)據(jù)進(jìn)行壓縮,可以使得在該數(shù)據(jù)區(qū)間內(nèi)各不相同的Key,在壓縮后的數(shù)據(jù)區(qū)間內(nèi)出現(xiàn)相同Key,進(jìn)而可以通過將相同Key進(jìn)行合并的方式,減少存儲(chǔ)于內(nèi)存中的Key的數(shù)量,進(jìn)而減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0068]第三實(shí)施例
[0069]圖3是本發(fā)明第三實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖。本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行優(yōu)化,在本實(shí)施例中,將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵具體優(yōu)化為:根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定移位次數(shù);根據(jù)所述移位次數(shù),將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值進(jìn)行右移運(yùn)算;其中,與所述標(biāo)準(zhǔn)鍵對(duì)應(yīng)的數(shù)值存儲(chǔ)于設(shè)定大小的存儲(chǔ)單元中;將所述存儲(chǔ)單元中存儲(chǔ)的各右移運(yùn)算結(jié)果作為所述變換鍵。
[0070]相應(yīng)的,本實(shí)施例的方法具體包括:
[0071]310、將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0072 ] 320、根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定移位次數(shù)。
[0073]在本實(shí)施例中,主要通過右移運(yùn)算(除法)的方式,壓縮定長標(biāo)準(zhǔn)鍵的數(shù)值范圍。例如,定長標(biāo)準(zhǔn)鍵的數(shù)值范圍為2°?28,通過右移兩位的方式,可以將數(shù)值范圍壓縮至
[0074]為了實(shí)現(xiàn)上述壓縮效果,所選取的移位次數(shù)應(yīng)該小于定長標(biāo)準(zhǔn)鍵的長度,可以理解的是,移位次數(shù)的取值越小,壓縮結(jié)果中包括的相同Key的數(shù)量也就越少,但是在相同Key對(duì)應(yīng)的值集合中遍歷所需Value的時(shí)間也越短;移位次數(shù)的取值越大,壓縮結(jié)果中包括的相同Key的數(shù)量也就越大,但是在相同Key對(duì)應(yīng)的值集合中遍歷所需Value的時(shí)間也越長。
[0075]優(yōu)選的,可以根據(jù)定長標(biāo)準(zhǔn)鍵的長度,以及實(shí)際應(yīng)用中所需的壓縮幅度,選取所述移位次數(shù)。
[0076]例如,如果定長標(biāo)準(zhǔn)鍵的數(shù)據(jù)范圍為2°?28,所述的壓縮幅度為50%,可以選取移位次數(shù)為4。
[0077]330、根據(jù)所述移位次數(shù),將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值進(jìn)行右移運(yùn)算。其中,與所述標(biāo)準(zhǔn)鍵對(duì)應(yīng)的數(shù)值存儲(chǔ)于設(shè)定大小的存儲(chǔ)單元中;
[0078]可以理解的是,在計(jì)算機(jī)系統(tǒng)中,數(shù)據(jù)主要是以二進(jìn)制的形式存儲(chǔ)在存儲(chǔ)單元中的,位(也稱為Bit)是計(jì)算機(jī)中最小的信息存儲(chǔ)單位。一位只能存儲(chǔ)O或I中的一個(gè)二進(jìn)制位數(shù)據(jù);字節(jié)(也稱為Byte)是由相連8個(gè)位組成的信息存儲(chǔ)單位等。
[0079]在一個(gè)具體例子中,如果定長標(biāo)準(zhǔn)鍵的數(shù)據(jù)范圍為2°?28,則該定長標(biāo)準(zhǔn)鍵被存儲(chǔ)于一個(gè)8位的存儲(chǔ)單元中,在該大小的存儲(chǔ)單元中存儲(chǔ)的一個(gè)具體的定長標(biāo)準(zhǔn)鍵為10111000,通過右移兩位的操作后,該定長標(biāo)準(zhǔn)鍵被變換為00101110這一變換鍵。如果對(duì)全部定長標(biāo)準(zhǔn)鍵進(jìn)行上述右移處理后,相當(dāng)于將定長標(biāo)準(zhǔn)鍵的數(shù)據(jù)范圍壓縮至2°?26。
[0080]340、將所述存儲(chǔ)單元中存儲(chǔ)的各右移運(yùn)算結(jié)果作為所述變換鍵。
[0081]350、將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值。
[0082]360、將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0083]本實(shí)施例的技術(shù)方案通過執(zhí)行機(jī)器語言中簡(jiǎn)單的右移運(yùn)算,即可實(shí)現(xiàn)將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵的目的,進(jìn)而可以在各不相同的Key中變換出相同Key,進(jìn)而可以通過將相同Key進(jìn)行合并的方式,減少存儲(chǔ)于內(nèi)存中的Key的數(shù)量,進(jìn)而減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0084]第四實(shí)施例
[0085]圖4是本發(fā)明第四實(shí)施例的一種數(shù)據(jù)存儲(chǔ)方法的流程圖。本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行優(yōu)化,在本實(shí)施例中,將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵具體優(yōu)化為:根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定取?;鶖?shù);將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值基于所述取?;鶖?shù)進(jìn)行取模運(yùn)算;將各所述取模運(yùn)算的結(jié)果作為所述變換鍵。
[0086]相應(yīng)的,本實(shí)施例的方法具體包括:
[0087]410、將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0088]420、根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定取?;鶖?shù)。
[0089]在本實(shí)施例中,主要通過取模運(yùn)算(求余數(shù))的方式,壓縮定長標(biāo)準(zhǔn)鍵的數(shù)值范圍。例如,定長標(biāo)準(zhǔn)鍵的數(shù)值范圍為2°?28,通過模64運(yùn)算,可以將數(shù)值范圍壓縮至O?26_1。
[0090]其中,所述64即為取模基數(shù),也就是說,所述取模運(yùn)算中的除數(shù),本領(lǐng)域技術(shù)人員可以理解的是,通過選取合適的取模基數(shù),可以調(diào)整最終生成的變換鍵的取值范圍。例如,取?;鶖?shù)為6,變換鍵的取值范圍為O?5。
[0091]如前所述,可以根據(jù)定長標(biāo)準(zhǔn)鍵的長度,以及實(shí)際應(yīng)用中所需的壓縮幅度,選取所述取?;鶖?shù)。
[0092]430、將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值基于所述取?;鶖?shù)進(jìn)行取模運(yùn)算。
[0093]440、將各所述取模運(yùn)算的結(jié)果作為所述變換鍵。
[0094]450、將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值。
[0095]460、將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0096]本實(shí)施例的技術(shù)方案通過執(zhí)行機(jī)器語言中簡(jiǎn)單的取模運(yùn)算,即可實(shí)現(xiàn)將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵的目的,進(jìn)而可以在各不相同的Key中變換出相同Key,進(jìn)而可以通過將相同Key進(jìn)行合并的方式,減少存儲(chǔ)于內(nèi)存中的Key的數(shù)量,進(jìn)而減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0097]發(fā)明人通過實(shí)驗(yàn)發(fā)現(xiàn),本實(shí)施例的技術(shù)方案在應(yīng)用于基于內(nèi)存和磁盤的Key-Value存儲(chǔ)系統(tǒng)中后,通過哈希合并策略,可以減少65%的內(nèi)存的使用,應(yīng)用本發(fā)明實(shí)施例的技術(shù)方案的產(chǎn)品比同類產(chǎn)品在非常小的代價(jià)下獲得更為完備的數(shù)據(jù)基礎(chǔ),從而使得產(chǎn)品在數(shù)據(jù)的迭代和內(nèi)存資源的消耗上具有競(jìng)爭(zhēng)力。
[0098]在上述各實(shí)施例的基礎(chǔ)上,可以通過MapReduce模型框架執(zhí)行所述數(shù)據(jù)存儲(chǔ)方法,其中:
[0099]在Map階段執(zhí)行所述定長標(biāo)準(zhǔn)鍵的轉(zhuǎn)換、所述變換鍵的生成、所述相同目標(biāo)鍵的合并以及將與所述目標(biāo)鍵分別對(duì)應(yīng)的值的歸并;
[0100]在Reduce階段執(zhí)行將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0101]其中,MapReduce是一種編程模型,主要用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。通過應(yīng)用該編程模型,可以快速、高效的實(shí)現(xiàn)本發(fā)明各實(shí)施例所述的數(shù)據(jù)存儲(chǔ)方法。
[0102]為了便于理解,在圖5a中示出了使用本發(fā)明實(shí)施例的方法前的一種基于MapReduce的數(shù)據(jù)存儲(chǔ)過程的示意圖;在圖5b中示出了使用本發(fā)明實(shí)施例的方法后的一種基于MapReduce的數(shù)據(jù)存儲(chǔ)過程的示意圖。
[0103]如圖5a所不,在Map階段計(jì)算KeyI和Valuel,Key2和Value2,Key3和Value3以及Key4^PValue4,并計(jì)算Key 1、Key 2、Key 3 以及Key 4 的 Hash簽名:Key I ’、Key2 ’、Key3 ’ 以及Key4,。
[0104]在Reduce階段將Keyl’、Key2’、Key3 ’以及Key4 ’,以及對(duì)應(yīng)的Value值存儲(chǔ)于Mola存儲(chǔ)系統(tǒng)中。
[0105]其中,將數(shù)據(jù)存儲(chǔ)于Mola存儲(chǔ)系統(tǒng)時(shí),Key為Value具有一一對(duì)應(yīng)關(guān)系,在數(shù)據(jù)量不斷擴(kuò)張的時(shí)候,會(huì)對(duì)Mola存儲(chǔ)系統(tǒng)的內(nèi)存帶來巨大壓力;
[0106]如圖5b所示,通過使用本發(fā)明各實(shí)施例的方案,MapReduce的實(shí)現(xiàn)流程主要包括:
[0107]在Map階段計(jì)算Keyl和Valuel,Key2和Value2,Key3和Value3以及Key4和Value4,并計(jì)算Keyl、Key2、Key3以及Key4的Hash簽名,并通過移位的方式對(duì)該Hash簽名的結(jié)果進(jìn)行壓縮,最終生成KeyI”、Key2”、Key3”以及Key4” ;
[0?08]在Map發(fā)送數(shù)據(jù)之前,如果確定Keyl” =Key2” =Key3”,則將Keyl”、Key2”以及Key3”進(jìn)行合并,生成一個(gè)NewKey ’,并將Valuel、Value2以及Value3歸并入一個(gè)值集合[Value1、Value2、Value3]中,作為與NewKey ’ 對(duì)應(yīng)的值發(fā)送給Reduce ;
[0109]Reduce端接收到數(shù)據(jù)后,將NewKey ’ 和NewKey ’ 對(duì)應(yīng)的[Valuel、Value2、Value3],以及Key4”和Key4”對(duì)應(yīng)的Value4存儲(chǔ)到Mola存儲(chǔ)系統(tǒng)中,以供在線查詢系統(tǒng)使用。
[0110]第五實(shí)施例
[0111]圖6是本發(fā)明第五實(shí)施例的一種數(shù)據(jù)存儲(chǔ)裝置的結(jié)構(gòu)圖。如圖6所示,所述裝置包括:標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊61、變換鍵生成模塊62、變換鍵合并模塊63以及存儲(chǔ)模塊64。其中:
[0112]標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊61,用于將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵。
[0113]變換鍵生成模塊62,用于將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍。
[0114]變換鍵合并模塊63,用于將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值。
[0115]存儲(chǔ)模塊64,用于將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。
[0116]本發(fā)明實(shí)施例將Key-Value形式的待存儲(chǔ)數(shù)據(jù)中各Key的取值進(jìn)行設(shè)定的壓縮處理,使得壓縮處理后的待存儲(chǔ)數(shù)據(jù)中包括多個(gè)相同Key,將與相同Key對(duì)應(yīng)的Value的歸并,以及將多個(gè)相同Key合并為一個(gè)新的Key,并將經(jīng)過上述處理后的Key-Value中的Key存儲(chǔ)于內(nèi)存中,將Key-Value中的Value存儲(chǔ)于磁盤中,可以解決現(xiàn)有的基于Key-Value的數(shù)據(jù)存儲(chǔ)方法在數(shù)據(jù)規(guī)模不斷擴(kuò)大過程中,內(nèi)存使用中的瓶頸問題,優(yōu)化了現(xiàn)有的Key-Value形式的數(shù)據(jù)存儲(chǔ)技術(shù),減少了存儲(chǔ)于內(nèi)存中的Key對(duì)內(nèi)存的占用量。
[0117]在上述各實(shí)施例的基礎(chǔ)上,所述標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊,可以用于:
[0118]選取具有設(shè)定數(shù)據(jù)輸出長度的哈希函數(shù);將所述待存儲(chǔ)數(shù)據(jù)的各鍵輸入至所述哈希函數(shù)中,生成所述定長標(biāo)準(zhǔn)鍵。
[0119]在上述各實(shí)施例的基礎(chǔ)上,所述變換鍵生成模塊,可以用于:
[0120]根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定移位次數(shù);根據(jù)所述移位次數(shù),將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值進(jìn)行右移運(yùn)算;其中,與所述標(biāo)準(zhǔn)鍵對(duì)應(yīng)的數(shù)值存儲(chǔ)于設(shè)定大小的存儲(chǔ)單元中;將所述存儲(chǔ)單元中存儲(chǔ)的各右移運(yùn)算結(jié)果作為所述變換鍵。
[0121]在上述各實(shí)施例的基礎(chǔ)上,所述變換鍵生成模塊,可以用于:
[0122]根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定取?;鶖?shù);將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值基于所述取?;鶖?shù)進(jìn)行取模運(yùn)算;將各所述取模運(yùn)算的結(jié)果作為所述變換鍵。
[0123]在上述各實(shí)施例的基礎(chǔ)上,所述待存儲(chǔ)數(shù)據(jù)的鍵可以包括用戶賬號(hào)標(biāo)識(shí),所述待存儲(chǔ)數(shù)據(jù)中的值可以包括與所述用戶賬號(hào)標(biāo)識(shí)對(duì)應(yīng)的用戶基本信息。
[0124]在上述各實(shí)施例的基礎(chǔ)上,可以通過MapReduce模型框架執(zhí)行所述數(shù)據(jù)存儲(chǔ)裝置,其中:
[0125]在Map階段執(zhí)行所述標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊、所述變換鍵生成模塊以及所述變換鍵合并模塊;在Reduce階段執(zhí)行所述存儲(chǔ)模塊。
[0126]本發(fā)明實(shí)施例所提供的數(shù)據(jù)存儲(chǔ)裝置可用于執(zhí)行本發(fā)明任意實(shí)施例提供的數(shù)據(jù)存儲(chǔ)方法,具備相應(yīng)的功能模塊,實(shí)現(xiàn)相同的有益效果。
[0127]顯然,本領(lǐng)域技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以通過如上所述的服務(wù)器實(shí)施??蛇x地,本發(fā)明實(shí)施例可以用計(jì)算機(jī)裝置可執(zhí)行的程序來實(shí)現(xiàn),從而可以將它們存儲(chǔ)在存儲(chǔ)裝置中由處理器來執(zhí)行,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等;或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件的結(jié)合。
[0128]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域技術(shù)人員而言,本發(fā)明可以有各種改動(dòng)和變化。凡在本發(fā)明的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種數(shù)據(jù)存儲(chǔ)方法,其特征在于,包括: 將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵,其中,所述待存儲(chǔ)數(shù)據(jù)的值中包括用于區(qū)分不同值的字段信息; 將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍; 將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值; 將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵包括: 選取具有設(shè)定數(shù)據(jù)輸出長度的哈希函數(shù); 將所述待存儲(chǔ)數(shù)據(jù)的各鍵輸入至所述哈希函數(shù)中,生成所述定長標(biāo)準(zhǔn)鍵。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵包括: 根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定移位次數(shù); 根據(jù)所述移位次數(shù),將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值進(jìn)行右移運(yùn)算;其中,與所述標(biāo)準(zhǔn)鍵對(duì)應(yīng)的數(shù)值存儲(chǔ)于設(shè)定大小的存儲(chǔ)單元中; 將所述存儲(chǔ)單元中存儲(chǔ)的各右移運(yùn)算結(jié)果作為所述變換鍵。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵包括: 根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定取?;鶖?shù); 將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值基于所述取?;鶖?shù)進(jìn)行取模運(yùn)算; 將各所述取模運(yùn)算的結(jié)果作為所述變換鍵。5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于: 所述待存儲(chǔ)數(shù)據(jù)的鍵包括用戶賬號(hào)標(biāo)識(shí),所述待存儲(chǔ)數(shù)據(jù)的值包括與所述用戶賬號(hào)標(biāo)識(shí)對(duì)應(yīng)的用戶基本信息。6.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,通過MapReduce模型框架執(zhí)行所述數(shù)據(jù)存儲(chǔ)方法,其中: 在Map階段執(zhí)行所述定長標(biāo)準(zhǔn)鍵的轉(zhuǎn)換、所述變換鍵的生成、所述相同目標(biāo)鍵的合并以及將與所述目標(biāo)鍵分別對(duì)應(yīng)的值的歸并; 在Reduce階段執(zhí)行將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。7.一種數(shù)據(jù)存儲(chǔ)裝置,其特征在于,包括: 標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊,用于將至少兩條鍵值對(duì)形式的待存儲(chǔ)數(shù)據(jù)的鍵轉(zhuǎn)換為定長標(biāo)準(zhǔn)鍵,其中,所述待存儲(chǔ)數(shù)據(jù)的值中包括用于區(qū)分不同值的字段信息; 變換鍵生成模塊,用于將第一數(shù)值空間的所述標(biāo)準(zhǔn)鍵變換為第二數(shù)值空間的變換鍵,其中,所述第二數(shù)值空間的數(shù)值范圍小于所述第一數(shù)值空間的數(shù)值范圍; 變換鍵合并模塊,用于將所述變換鍵中相同的目標(biāo)鍵合并為一個(gè)新的變換鍵,并將與所述目標(biāo)鍵分別對(duì)應(yīng)的值歸并入一個(gè)值集合中,作為與所述新的變換鍵對(duì)應(yīng)的值; 存儲(chǔ)模塊,用于將所述變換鍵存儲(chǔ)于設(shè)定存儲(chǔ)系統(tǒng)的內(nèi)存空間中,將與所述變換鍵對(duì)應(yīng)的值存儲(chǔ)于所述存儲(chǔ)系統(tǒng)的磁盤空間中。8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊,用于: 選取具有設(shè)定數(shù)據(jù)輸出長度的哈希函數(shù); 將所述待存儲(chǔ)數(shù)據(jù)的各鍵輸入至所述哈希函數(shù)中,生成所述定長標(biāo)準(zhǔn)鍵。9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述變換鍵生成模塊,用于: 根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定移位次數(shù); 根據(jù)所述移位次數(shù),將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值進(jìn)行右移運(yùn)算;其中,與所述標(biāo)準(zhǔn)鍵對(duì)應(yīng)的數(shù)值存儲(chǔ)于設(shè)定大小的存儲(chǔ)單元中; 將所述存儲(chǔ)單元中存儲(chǔ)的各右移運(yùn)算結(jié)果作為所述變換鍵。10.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述變換鍵生成模塊,用于: 根據(jù)所述標(biāo)準(zhǔn)鍵的長度,選取設(shè)定取?;鶖?shù); 將與各所述標(biāo)準(zhǔn)鍵分別對(duì)應(yīng)的數(shù)值基于所述取?;鶖?shù)進(jìn)行取模運(yùn)算; 將各所述取模運(yùn)算的結(jié)果作為所述變換鍵。11.根據(jù)權(quán)利要求7-10任一項(xiàng)所述的裝置,其特征在于: 所述待存儲(chǔ)數(shù)據(jù)的鍵包括用戶賬號(hào)標(biāo)識(shí),所述待存儲(chǔ)數(shù)據(jù)的值包括與所述用戶賬號(hào)標(biāo)識(shí)對(duì)應(yīng)的用戶基本信息。12.根據(jù)權(quán)利要求7-10任一項(xiàng)所述的裝置,其特征在于,通過MapReduce模型框架執(zhí)行所述數(shù)據(jù)存儲(chǔ)裝置,其中: 在Map階段執(zhí)行所述標(biāo)準(zhǔn)鍵轉(zhuǎn)換模塊、所述變換鍵生成模塊以及所述變換鍵合并模塊; 在Reduce階段執(zhí)行所述存儲(chǔ)模塊。
【文檔編號(hào)】G06F3/06GK105930104SQ201610326720
【公開日】2016年9月7日
【申請(qǐng)日】2016年5月17日
【發(fā)明人】張釗, 熊云
【申請(qǐng)人】百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司