無變形的鍵值對數據存儲結 構的LevelDB存儲系統,實現了在保證較高的數據存儲處理效率的前提下,將受物理內存限 制的存儲方式轉換為以磁盤為數據存儲目標的、不受物理內存限制的存儲方式。通過本發 明,最終可實現一種數據存儲處理效率較高、既支持多種類型的數據存儲結構、又不受物理 內存限制的存儲系統,由于該存儲系統可對多種數據結構類型的海量數據進行高效存儲, 從而使得本方案的數據存儲方式擁有較強的業務擴展性。
[0058]步驟S110:提取基于原始存儲結構的待轉換數據中的第一數據單元、第二數據單 元及第三數據單元,并將第一數據單元、第二數據單元及第三數據單元進行合并以確定為 轉換存儲結構中的第一類鍵。
[0059] 例如,以原始存儲結構為zset存儲結構為例,zset是string類型的集合,通過hash 表實現數據的關聯,如存在一組zset數據集合,即為多個待轉換數據,其zset數據存儲結構 具體為:key-score-member,一個key對應一有序數據集合,在該有序數據集合中,唯一的 member對應一個score;在本方案的實施例中,key為第一數據單元,score為第二數據單元, member為第三數據單元。首先,提取待轉換數據中的第一數據單元key,如"classi",第二數 據單元score,如"60"以及第三數據單元member,如"namei",并將第一數據單元、第二數據 單元及第三數據單元進行合并以確定為轉換存儲結構中的第一類鍵如"classi60namei" ;
[0060]步驟S120:將轉換存儲結構中的第一類值設為空值。
[0061 ]例如,接上例,將轉換的zset數據存儲結構中的第一類值設為空值。
[0062]步驟S130:將第一類鍵及第一類值組成的第一類數據鍵值對存儲至鍵值數據庫 中。
[0063] 例如,接上例,將第一類鍵及第一類值組成的第一類數據鍵值對"claSS160namei-' '(空值)"存儲至鍵值數據庫中。
[0064]在一優選實施例圖2中,當原始存儲結構為zset存儲結構時,步驟S210:提取待轉 換數據中的第一數據單元及第三數據單元,并將第一數據單元及第三數據單元進行合并以 確定為轉換存儲結構中的第二類鍵;步驟S220:將提取到的待轉換數據中的第二數據單元 確定為轉換存儲結構中的第二類值;步驟S230:將第二類鍵及第二類值組成的第二類數據 鍵值對存儲至鍵值數據庫中。
[0065]例如,Redis存儲系統中的zset數據存儲結構,zset數據存儲結構具體為:key-score-member,其中,member為字段,score為int數據類型的數據值,一個key對應一有序數 據集合,其中包括多個具有唯一性的member,一個member對應一個score。在本方案的實施 例中,key為第一數據單元,score為第二數據單元,member為第三數據單元。如下表1所示, 該表示出了key值為"class2"的zset存儲結構的數據集合中的存儲對象: rrww>i Luuo/j 衣丄
[0068]首先,提取上表1所示以zset為存儲結構的數據集合中的第一數據單元為 "class〗",及第三數據單元分別為"namei"、"name2"和"name3",并將第一數據單元及第三數 據單元分別進行合并得到轉換存儲結構中的第二類鍵"class2namei"、"class2name2"和 "class2name3",由于該數據集合中的member值具有唯一 1性,因此合并得到轉換存儲結構中 的第二類鍵也具有唯一性,隨后,提取第二數據單元"60"、"85"和"90",并將第二數據單元 確定為轉換存儲結構中的第二類值,根據轉換存儲結構Key-Value存儲結構,將第二類鍵及 第二類值組成的第二類數據鍵值對,即第二類數據鍵值對1: "claSS:mamei-60",第二類數據 鍵值對2: "class2name285"和第二類數據鍵值對3: "classaiame3_90"存儲至鍵值數據庫中, 確保了第二類數據鍵值對存儲的唯一性。
[0069] 優選地(參照圖1),該方法還包括步驟S 160(圖中未示出)和步驟S170(圖中未示 出);步驟S 160:確定具有相同第一數據單元的待轉換數據的數量;步驟S 170:將以預定的 數量標識為鍵、以具有相同第一數據單元的待轉換數據的數量為值組成的數量鍵值對與待 轉換數據相關聯地存儲至鍵值數據庫中。
[0070]其中,預定的數量標識至少包括:
[0071 ]第一數據單元;可變量標識。
[0072]例如,Redis存儲系統中的zset數據存儲結構的多個待轉換數據,包含有兩個key 值"classi"和"class2",key值為"classi"的集合中包含有1條數據:member為"namei", score為"20",轉換存儲后的第一類鍵值對為"classi20namei_' '",轉換存儲后的第二類鍵 值對為"classmamei-20" ;key值為"class〗"的集合中包含有2條數據:member為"name2i" score為"45"和member為"name22" score為"48",轉換存儲后的第一類鍵值對為 "class245name2i - ' ' " 和 "class248name22- ' ,第二類鍵值對為 "class2name2i-45" 和 "class2name22_48" ;接著,確定key值為"classi"的待轉換數據的數量為1,key值為"class2" 的待轉換數據的數量為2,根據轉換存儲結構Key-Value,以預定義的數量標識位為鍵,如 "classi-size" 和 "claSS2-size",即確定數量鍵值對 "classi-size-l" 和 "claSS2-size-2" 并將其存 儲至鍵值數據庫中,其中,數量鍵值對"claSS1-size3-l"通過相同的" ClaSS1 "與第一類鍵值對 為"c lassi20namei_ ' ' "和第二類鍵值對為"c lassinamei-20"相關聯;數量鍵值對 "class〗-size-2"通過相同的"class2"與第一類鍵值對為"class245name2i-' '"和 "class248name22-' '",第二類鍵值對為 "class2name2i-45"和 "class2name22-48" 相關聯。其 中,待轉換數據的第一數據單元分別為"classi"和"class2",可變量標識為"size",貝lj預定 的數量標識位可設定為"cla SS1-size"和"claSS2-size"。根據可變量標識"size"則可識別該鍵 值對為數量鍵值對。
[0073] 優選地(參照圖1),該方法還包括步驟S180(圖中未示出);步驟S180:當對任一待 更新的第一類數據鍵值對進行更新操作時,對與該待更新的第一類數據鍵值對相關聯的第 二類數據鍵值及數量鍵值對進行相應更新;或當對任一待更新的第二類數據鍵值對進行更 新操作時,對與該待更新的第二類數據鍵值對相關聯的第一類數據鍵值及數量鍵值對進行 相應更新。
[0074]例如,接上例,若鍵值數據庫中存在原始存儲結構為zset存儲結構的第一類鍵值 對為"class277name23-' '",相應的第二類鍵值對為"ID2name23-77",與該第一類鍵值對和第 二類鍵值對相關聯存儲的數量鍵值對為"ID 2-slZ(3-2",如在鍵值數據庫中刪除該第一類鍵值 對時,將相應的將數量鍵值對"ID 2-Size3_2"修改為"ID2-Size3-1",同時,將相應的第二類鍵值對 為"ID 2name23-77"刪除;如在鍵值數據庫中修改該第一類鍵值對為"class290name 23-' 時, 同時修改相應的第二類鍵值對為"ID2name23-90"。如在鍵值數據庫中刪除該第二類鍵值對 時,將相應的將數量鍵值對"ID 2-size3-2"修改為"ID2-Size3-1",同時,將相應的第一類鍵值對為 "class 277name23-' 刪除;如在鍵值數據庫中修改該第二類鍵值對為"ID2name23-88"時,同 時修改相應的第一類鍵值對為"class288name23 -' '"。
[0075] 優選地(參照圖1),該方法還包括步驟S140(圖中未示出)和步驟S150(圖中未示 出);步驟S140:判斷第二數據單元是否為整數類型;步驟S150:當第二數據單元不為整數類 型時,將第二數據單元通過預設轉換算法轉換為整數類型。
[0076] 例如,Redis存儲系統中的zset數據存儲結構,zset數據存儲結構具體為:key-score-member,key為第一數據單元,score為第二數據單元,member為第三數據單元。在數 據存儲過程中,首先判斷第二數據單元score是否為整數類型,當score不為整數類型時,將 score通過預設轉換算法轉換為整數類型,如score為4.678,其不為整數類型,則將4.678乘 以105得到整數類型的值46780。
[0077] 在一具體應用場景中,Redis存儲系統中的zset數據存儲結構的一組多個待轉換 數據,包含有一個key值"語文",該集合中包含有5條數據,如下表2: ΓΛΛ~7〇? Luu/yj 衣 z
[0080] 該組zset數據存儲結構的待轉換數據的數據結構具體為:key-score-member,key 為第一數據單元,score為第二數據單元,member為第三數據單元。判斷第二數據單元score 的數據類型確定85.4和78.8為非整數,隨后將第二數據單元的數據分別乘以102得到整數 類型的值6000、8540、9000、7880和9900,提取待轉換數據中的第一數據單元即key為"語 文",第二數據單元即score以及第三數據單元member,并將第一數據單元、第二數據單元及 第三數據單元進行合并以確定為轉換存儲結構中的第一類鍵,將轉換的zset存儲結構中的 第一類值設為空值,得到第一類鍵及第一類值組成的第一類數據鍵值對以轉換存儲結構為 Key-Value存儲結構存儲至鍵值數據庫LevelDB中,基于LevelDB數據庫根據Key值以字典序 自排序的特性,該組第一類鍵值對以如下順序進行存儲:"語文6000Lily-''"、"語文 7880Andy- ' ' "、"語文8540Lucy- ' ' "、"語文9000Jerry- ' ' " 和"語文9900Tom- ' ' " ;同時,將第 一數據單元及第