一致的意義,并且除非像這里一樣被特定定義,否則不會用理想化或過于正式的含 義來解釋。
[0055] 圖1為本發(fā)明實施例的數(shù)據(jù)存儲結構的轉換方法的流程圖。
[0056] 步驟SllO :提取基于原始存儲結構的待轉換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二數(shù)據(jù) 單元,并將第一數(shù)據(jù)單元及第二數(shù)據(jù)單元進行合并以確定為轉換存儲結構中的鍵;步驟 S120 :基于待轉換數(shù)據(jù)的原始存儲結構,通過值設定規(guī)則確定轉換存儲結構中的值;步驟 Sl30 :根據(jù)轉換存儲結構,將鍵及值組成的數(shù)據(jù)鍵值對存儲至鍵值數(shù)據(jù)庫中。
[0057] 本發(fā)明的實施例中,提出了一種數(shù)據(jù)存儲結構的轉換方案,通過將基于原始存儲 結構的數(shù)據(jù)轉換存儲為基于轉換存儲結構中的數(shù)據(jù),實現(xiàn)對多種存儲數(shù)據(jù)類型以統(tǒng)一的 轉換存儲結構的方式進行數(shù)據(jù)存儲。進一步的,將支持多種value類型的數(shù)據(jù)存儲結構 的Redis存儲系統(tǒng)中的多種數(shù)據(jù)存儲結構的數(shù)據(jù),轉存至僅支持無變形的鍵值對數(shù)據(jù)存儲 結構的LevelDB存儲系統(tǒng),實現(xiàn)了在保證較高的數(shù)據(jù)存儲處理效率的前提下,將受物理內 存限制的存儲方式轉換為以磁盤為數(shù)據(jù)存儲目標的、不受物理內存限制的存儲方式。通過 本發(fā)明,最終可實現(xiàn)一種數(shù)據(jù)存儲處理效率較高、既支持多種類型的數(shù)據(jù)存儲結構、又不受 物理內存限制的存儲系統(tǒng),由于該存儲系統(tǒng)可對多種數(shù)據(jù)結構類型的海量數(shù)據(jù)進行高效存 儲,從而使得本方案的數(shù)據(jù)存儲方式擁有較強的業(yè)務擴展性。
[0058] 步驟SllO :提取基于原始存儲結構的待轉換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二數(shù)據(jù) 單元,并將第一數(shù)據(jù)單元及第二數(shù)據(jù)單元進行合并以確定為轉換存儲結構中的鍵。
[0059] 例如,以原始存儲結構為hash存儲結構為例,hash數(shù)據(jù)結構具體為: key-field-value, 一個key對應一張 hash表,在該hash表中,唯一的field對應一個 value ;key為第一數(shù)據(jù)單元,field為第二數(shù)據(jù)單元,首先,提取待轉換數(shù)據(jù)中的第一數(shù)據(jù) 單元即key,如"ID",以及第二數(shù)據(jù)單元即field,如"fl",并將key及value進行合并以確 定為轉換存儲結構中的鍵,得到" IDf 1"。
[0060] 又例如,以原始存儲結構為set存儲結構為例,set數(shù)據(jù)結構具體為:key-member, 一個key對應一個member集合,其中包括多個具有唯一性的member值;key為第一數(shù)據(jù)單 元,member為第二數(shù)據(jù)單元,首先,提取待轉換數(shù)據(jù)中的第一數(shù)據(jù)單元即key,如"ID",以及 第二數(shù)據(jù)單元即member,如"ml",并將key及member進行合并以確定為轉換存儲結構中的 鍵,得到" IDml "。
[0061] 步驟S120 :基于待轉換數(shù)據(jù)的原始存儲結構,通過值設定規(guī)則確定轉換存儲結構 中的值。
[0062] 其中,值設定規(guī)則具體包括:
[0063] 當待轉換數(shù)據(jù)的原始存儲結構中包括第三數(shù)據(jù)單元時,將第三數(shù)據(jù)單元確定為轉 換存儲結構中的值;
[0064] 當待轉換數(shù)據(jù)的原始存儲結構中不包括第三數(shù)據(jù)單元時,將轉換存儲結構中的值 設為空值。
[0065] 例如,若待轉換數(shù)據(jù)的原始數(shù)據(jù)結構中包含第三數(shù)據(jù)單元時,將第三數(shù)據(jù)單元所 對應的值確定為轉換存儲結構中的值,如hash數(shù)據(jù)結構中key為第一數(shù)據(jù)單元,field為 第二數(shù)據(jù)單元,value為第三數(shù)據(jù)單元,轉換存儲結構中的值即為value ;若得到待轉換數(shù) 據(jù)的原始數(shù)據(jù)結構中不包含第三數(shù)據(jù)單元,將轉換存儲結構中的值設為空值,如set數(shù)據(jù) 結構中不包含第三數(shù)據(jù)單元,轉換存儲結構中的值設為空值。
[0066] 步驟S130 :根據(jù)轉換存儲結構,將鍵及值組成的數(shù)據(jù)鍵值對存儲至鍵值數(shù)據(jù)庫 中。
[0067] 例如,對于hash存儲結構,根據(jù)轉換存儲結構Key-Value,將數(shù)據(jù)鍵值對 " IDf Ι-value (原h(huán)ash結構中的value) "存儲至鍵值數(shù)據(jù)庫中;對于set存儲結構,根據(jù)轉 換存儲結構Key-Value,將數(shù)據(jù)鍵值對" IDml- 空值)",存儲至鍵值數(shù)據(jù)庫中。
[0068] 在一優(yōu)選實施例圖2中,當原始存儲結構為hash存儲結構時,步驟S210 :提取基 于hash存儲結構的待轉換數(shù)據(jù)中的key數(shù)據(jù)單元及field數(shù)據(jù)單元,并將其進行合并以確 定為轉換存儲結構中的鍵;步驟S220 :提取待轉換數(shù)據(jù)中的value數(shù)據(jù)單元,并將其確定為 轉換存儲結構中的值;步驟S230 :根據(jù)轉換存儲結構,將鍵及值組成的數(shù)據(jù)鍵值對存儲至 鍵值數(shù)據(jù)庫中。
[0069] 例如,Redis存儲系統(tǒng)中的hash數(shù)據(jù)結構,hash數(shù)據(jù)結構具體為: key-field-value,其是一個string數(shù)據(jù)類型的field (字段)和value (數(shù)據(jù)值)的hash 映射表,一個key對應一張 hash映射表,其中包括多個具有唯一性的field,一個field對 應一個value。如下表1所示,該表示出了 key值為aID1 "的hash的存儲對象:
[0072] 首先,提取key值為aID1 "的hash結構數(shù)據(jù)中的key數(shù)據(jù)單元即aID1 ",及field 數(shù)據(jù)單元即" fl "、" f2 "和" f3 ",并將key數(shù)據(jù)單元及fieId數(shù)據(jù)單元進行合并得到轉換存 儲結構中的鍵"ID1H'"IDJ2"和"IDJ3",由于hash結構中的field值具有唯一性,因此 合并得到轉換存儲結構中的鍵也具有唯一 1性,hash存儲結構包含value數(shù)據(jù)單元,將value 數(shù)據(jù)單元"a"、"b"和"c"確定為轉換存儲結構中的值,根據(jù)轉換存儲結構Key-Value存儲 結構,將鍵及值組成的數(shù)據(jù)鍵值對,即鍵值對I 'IDifl-a",鍵值對2 和鍵值對 3 : " IDJ3-c "存儲至鍵值數(shù)據(jù)庫中,確保了數(shù)據(jù)鍵值對存儲的唯一性。
[0073] 在另一優(yōu)選實施例中,當原始存儲結構為set存儲結構時,步驟S310 :提取基于 set存儲結構的待轉換數(shù)據(jù)中的key數(shù)據(jù)單元及member數(shù)據(jù)單元,并將其進行合并以確定 為轉換存儲結構中的鍵;步驟S320 :將轉換存儲結構中的值設為空值;步驟S330 :根據(jù)轉 換存儲結構,將鍵及值組成的數(shù)據(jù)鍵值對存儲至鍵值數(shù)據(jù)庫中。
[0074] 例如,Redis存儲系統(tǒng)中的set數(shù)據(jù)結構具體為:key-member,其中,一個key對應 一個member集合,其中包括多個具有唯一"性的member值;首先,提取基于set存儲結構的 待轉換數(shù)據(jù)中的key數(shù)據(jù)單元"ID 3"及member數(shù)據(jù)單元"a"、"b",并將其進行合并以確定 為轉換存儲結構Key-Value中的鍵" ID3a"和" ID3b",由于set數(shù)據(jù)結構的member值具有 唯一性,因此,轉換存儲結構中的鍵"ID3a"及"ID 3b"也具有唯一性,由于set數(shù)據(jù)結構不存 在第三數(shù)據(jù)單元,因此將轉換存儲結構Key-Value中的值設為空值'',隨后將數(shù)據(jù)鍵值對 " ID3a_ ' '(空值)"及" ID3b_ ' '(空值)"存儲至鍵值數(shù)據(jù)庫中,確保了數(shù)據(jù)鍵值對存儲 的唯一性。
[0075] 優(yōu)選地(參照圖1),該方法還包括步驟S140 (圖中未示出)和步驟Sl50 (圖中未 示出);步驟S140 :確定具有相同第一數(shù)據(jù)單元的待轉換數(shù)據(jù)的數(shù)量;步驟S150 :根據(jù)轉換 存儲結構,將以預定的數(shù)量標識位為鍵、具有相同第一數(shù)據(jù)單元的待轉換數(shù)據(jù)的數(shù)量為值 組成的數(shù)量鍵值對與待轉換數(shù)據(jù)相關聯(lián)地存儲至所述鍵值數(shù)據(jù)庫中。
[0076] 其中,預定的數(shù)量標識位至少包括:
[0077] 第一數(shù)據(jù)單元;可變量標識;
[0078] 其中,數(shù)量標識位還可以包括其他相關信息,本發(fā)明對此不做限定。
[0079] 例如,Redis存儲系統(tǒng)中的hash數(shù)據(jù)結構的一組待轉換數(shù)據(jù),包含有兩個key值 "ID/'和"ID2",key 值為aID1"的 hash 表中包含有 1 條數(shù)據(jù):field 為"Π",value 為"a", key值為" ID2"的hash表中包含有2條數(shù)據(jù):field為"f21"、value為"b"和field為 "f22"、value為"c" ;接著確定key值為"ID/'的待轉換數(shù)據(jù)的數(shù)量為1,key值為"ID2" 的待轉換數(shù)據(jù)的數(shù)量為2,根據(jù)轉換存儲結構Key-Value,以預定義的數(shù)量標識位為鍵,如 "ID 1 slz/和"ID2 _",將數(shù)據(jù)鍵值對"ID1 通過相同的"ID/'與key值為"ID/'的hash 表中的field為"Π "且value為"a"的一條待轉換數(shù)據(jù)關聯(lián)地存儲至鍵值數(shù)據(jù)庫中,并將 數(shù)據(jù)鍵值對" ID2 _-2"通過相同的" ID2"與key值為" ID2"的hash表中的field為"f21" 且value為"b"、field為"f22"且value為"c"的兩條數(shù)據(jù)關聯(lián)地存儲至鍵值數(shù)據(jù)庫中。
[0080] 例如,接上例,待轉換數(shù)據(jù)的第一數(shù)據(jù)單元分別為"ID/'和"ID2",可變量標識為 "size",則預定的數(shù)量標識位可設定為"取 slz/和"ID2 slz/。根據(jù)可變量標識"size"則可 識別該鍵值對為數(shù)量鍵值對。
[0081] 其中,數(shù)量鍵值對與各個待轉換數(shù)據(jù)相關聯(lián)地方式為,數(shù)量鍵值對的鍵"IDlslz/ 中包括元素" ID1 ",對應的待轉換數(shù)據(jù)的數(shù)據(jù)鍵值對" IDJ 1-a"、" ID^-b"和" IDJ3-C"的 各個鍵" IDlf 1"、" IDif 2 "和" IDif 3 "中均包括為元素" ID1 ",其通過" ID1 "可建立關聯(lián)關系。
[0082] 優(yōu)選地(參照圖1),該方法還包括步驟S160 (圖中未示出);步驟S160 :
[0083] 當對鍵值數(shù)據(jù)庫進行添加和/或刪除操作時,對與添加和/或刪除的數(shù)據(jù)鍵值對 相關聯(lián)的數(shù)量鍵值對進行相應更新。
[0084] 例如,接上例,在鍵值數(shù)據(jù)庫中加入兩條數(shù)據(jù)時,當前的數(shù)據(jù)鍵值對為 "ID2 slze_2",如添加兩條原始存儲結構為hash存儲結構的數(shù)據(jù),一條數(shù)據(jù)的hash存儲結 構 key-field-value 為:"ID2-f23_d",另一條數(shù)據(jù)的 hash 存儲結構 key-field-value 為: " ID2-f24-e";首先將該兩條數(shù)據(jù)轉換為Key-Value存儲結構,8卩" ID2f23-d"和" ID2f24-d"; 再將轉換后的" ID2f23-d"和" ID2f24-d"存儲