亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

數(shù)據(jù)存儲方法和裝置的制造方法

文檔序號:10569680閱讀:1015來源:國知局
數(shù)據(jù)存儲方法和裝置的制造方法
【專利摘要】本發(fā)明實施例公開了一種數(shù)據(jù)存儲方法和裝置。所述數(shù)據(jù)存儲方法包括:將至少兩條鍵值對形式的待存儲數(shù)據(jù)的鍵轉換為定長標準鍵,其中,所述待存儲數(shù)據(jù)的各值中包括用于區(qū)分不同值的字段信息;將第一數(shù)值空間的標準鍵變換為第二數(shù)值空間的變換鍵,其中,第二數(shù)值空間的數(shù)值范圍小于第一數(shù)值空間的數(shù)值范圍;將變換鍵中相同的目標鍵合并為一個新的變換鍵,并將與目標鍵分別對應的值歸并入一個值集合中,作為與新的變換鍵對應的值;將變換鍵存儲于設定存儲系統(tǒng)的內存空間中,將與變換鍵對應的值存儲于存儲系統(tǒng)的磁盤空間中。本發(fā)明的技術方案優(yōu)化了現(xiàn)有的鍵值對形式的數(shù)據(jù)存儲技術,減少了存儲于內存中的Key對內存的占用量。
【專利說明】
數(shù)據(jù)存儲方法和裝置
技術領域
[0001 ]本發(fā)明實施例涉及信息處理技術,尤其涉及一種數(shù)據(jù)存儲方法和裝置。
【背景技術】
[0002]目前,功能強大的互聯(lián)網(wǎng)綜合服務提供商可以為廣大網(wǎng)民提供信息檢索、社區(qū)服務、云存儲以及開發(fā)者平臺等多種綜合性服務,一般來說,用戶基于不同類型的互聯(lián)網(wǎng)服務會申請相同或者不同的服務賬號(例如百度賬號等),服務器針對不同的服務賬號會存儲不同的用戶信息(例如,姓名、年齡以及職業(yè)等),因此,如何將服務賬號以及與服務賬號對應的用戶信息(后文將上述兩者簡稱用戶賬號關聯(lián)信息)進行存儲,并提供高可用、高并發(fā)的查詢服務變得非常重要。
[0003]目前,基于用戶賬號關聯(lián)信息的比較普遍的信息存儲方式是鍵值對(也稱為Key-Value)形式的信息存儲方式,S卩:將用戶賬號關聯(lián)信息中的服務賬號作為Key(也稱為鍵),將用戶信息作為Value(也稱為值),進行對應存儲。同時,為了減少Key-Value形式的用戶賬號關聯(lián)信息對內存的占用,現(xiàn)有技術提出一種將Key-Value中的Key存儲于內存中,將Key-Value中的Value存儲于磁盤中的數(shù)據(jù)存儲方法(例如,百度的Mola存儲系統(tǒng))以減少對內存資源的占用。
[0004]上述方法雖然可以緩解用戶賬號關聯(lián)信息對內存的占用,但是,隨著用戶數(shù)據(jù)規(guī)模的不斷擴大,內存使用必將成為瓶頸。

【發(fā)明內容】

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