”,原第三節(jié)點的數(shù)據鍵值對更新為“K+3- ‘4、-l、c’ ”.’該鏈表相應的結構鍵值對也發(fā)生了變化,增加新節(jié)點后的鏈表中的待轉換數(shù)據的數(shù)量為4,鏈表中的下一可用的位置標識為5,鏈表的頭部數(shù)據的位置標識為1,鏈表的尾部數(shù)據的位置標識為3,以預定的鏈表信息標識“KMta”為鍵,結構相關信息“4,5,1,3”,因此相應的結構鍵值對更新為“KMta- ‘4,5,1,3’”,得到添加后的鏈表結構如圖7所示。
[0081]又例如,接上例,在圖7鏈表中刪除value數(shù)據單元為b的第二節(jié)點,貝第一節(jié)點的下一可用的位置標識與第三節(jié)點的前一可用的位置標識發(fā)生了變化,相應的數(shù)據鍵值對也需要進行相應的更新,此時原第一節(jié)點的數(shù)據鍵值對更新為“K+1 - ‘_1、4、a’”,原第三節(jié)點的數(shù)據鍵值對更新為“K+4- ‘1、3、d’”;相應的結構鍵值對也發(fā)生了變化,刪除第二節(jié)點后的鏈表中的待轉換數(shù)據的數(shù)量為3,鏈表中的下一可用的位置標識為5,鏈表的頭部數(shù)據的位置標識為1,鏈表的尾部數(shù)據的位置標識為3,以預定的鏈表信息標識“KMta”為鍵,結構相關信息“3,5,1,3”,因此相應的結構鍵值對更新為“KMta- ‘3,5,1,3’ ”,得到刪除后的鏈表結構如圖8所示。
[0082]圖3為本發(fā)明中另一實施例的數(shù)據存儲結構的轉換裝置的結構示意圖。
[0083]鍵確定模塊310提取基于原始鏈表存儲結構的同一鏈表中各個待轉換數(shù)據的位置標識以及鏈表的鏈表標識,并將鏈表標識及各個待轉換數(shù)據的位置標識分別進行合并,以確定與各個待轉換數(shù)據相應的轉換存儲結構中的鍵;值確定模塊320提取與各個待轉換數(shù)據在鏈表中左右相鄰兩個數(shù)據中的位置標識及各個待轉換數(shù)據中的value數(shù)據單元并將提取到的與各個待轉換數(shù)據在鏈表中左右相鄰兩個數(shù)據中的位置標識與提取到的各個待轉換數(shù)據中的value數(shù)據單元分別進行合并,以確定為各個待轉換數(shù)據的轉換存儲結構中的值;數(shù)據鍵值對存儲模塊330根據轉換存儲結構,將鍵及值組成的數(shù)據鍵值對存儲至鍵值數(shù)據庫中。
[0084]本發(fā)明的實施例中,提出了一種數(shù)據存儲結構的轉換方案,通過將基于原始存儲結構的數(shù)據轉換存儲為基于轉換存儲結構中的數(shù)據,實現(xiàn)對多種存儲數(shù)據類型以統(tǒng)一的轉換存儲結構的方式進行數(shù)據存儲。進一步的,將支持多種value類型的數(shù)據存儲結構的Redis存儲系統(tǒng)中的多種數(shù)據存儲結構的數(shù)據,轉存至僅支持無變形的鍵值對數(shù)據存儲結構的LevelDB存儲系統(tǒng),實現(xiàn)了在保證較高的數(shù)據存儲處理效率的前提下,將受物理內存限制的存儲方式轉換為以磁盤為數(shù)據存儲目標的、不受物理內存限制的存儲方式。通過本發(fā)明,最終可實現(xiàn)一種數(shù)據存儲處理效率較高、既支持多種類型的數(shù)據存儲結構、又不受物理內存限制的存儲系統(tǒng),由于該存儲系統(tǒng)可對多種數(shù)據結構類型的海量數(shù)據進行高效存儲,從而使得本方案的數(shù)據存儲方式擁有較強的業(yè)務擴展性。
[0085]本實施例中,以原始鏈表存儲結構為list類型鏈表數(shù)據結構為例,該list類型鏈表為帶數(shù)據域的雙向鏈表結構,鏈表中的一個待轉換數(shù)據的結構如圖5所示。
[0086]其中,data代表該待轉換數(shù)據中的value數(shù)據單元,pr1r代表該待轉換數(shù)據的左邊相鄰數(shù)據的位置標識,next代表該待轉換數(shù)據的右相鄰數(shù)據的位置標識。
[0087]若list類型鏈表中存在3個待轉換數(shù)據,即3個節(jié)點,各待轉換數(shù)據的位置標識及結構如圖6。
[0088]其中,在該包括3個待轉換數(shù)據的鏈表中,第一節(jié)點的待轉換數(shù)據的位置標識為1,value數(shù)據單元為a,左邊相鄰數(shù)據的位置標識為_1,右相鄰數(shù)據的位置標識為2 ;第二節(jié)點的待轉換數(shù)據的位置標識為2,value數(shù)據單元為b,左邊相鄰數(shù)據的位置標識為1,右相鄰數(shù)據的位置標識為3 ;第三節(jié)點的待轉換數(shù)據的位置標識為3,value數(shù)據單元為c,左邊相鄰數(shù)據的位置標識為2,右相鄰數(shù)據的位置標識為-1 ;其中,由于第一節(jié)點的待轉換數(shù)據不存在前節(jié)點,即不存在左邊相鄰數(shù)據的位置標識,則設為-1,同理,第三節(jié)點的待轉換數(shù)據不存在后節(jié)點,,即不存在右邊相鄰數(shù)據的位置標識,也設為-1。
[0089]鍵確定模塊310提取基于原始鏈表存儲結構的同一鏈表中各個待轉換數(shù)據的位置標識以及鏈表的鏈表標識,并將鏈表標識及各個待轉換數(shù)據的位置標識分別進行合并,以確定與各個待轉換數(shù)據相應的轉換存儲結構中的鍵。
[0090]例如,提取如圖6的list類型鏈表數(shù)據結構中各個待轉換數(shù)據的位置標識1、2、3以及該鏈表的鏈表標識如K,并將鏈表標識及各個待轉換數(shù)據的位置標識分別進行合并,以確定與各個待轉換數(shù)據相應的轉換存儲結構中的鍵,如得到第一節(jié)點的待轉換數(shù)據的鍵為K+1,第二節(jié)點的待轉換數(shù)據的鍵為K+2,第三節(jié)點的待轉換數(shù)據的鍵為K+3。
[0091]值確定模塊320提取與各個待轉換數(shù)據在鏈表中左右相鄰兩個數(shù)據中的位置標識及各個待轉換數(shù)據中的value數(shù)據單元并將提取到的與各個待轉換數(shù)據在鏈表中左右相鄰兩個數(shù)據中的位置標識與提取到的各個待轉換數(shù)據中的value數(shù)據單元分別進行合并,以確定為各個待轉換數(shù)據的轉換存儲結構中的值。
[0092]例如,接上例,將提取到的與各個待轉換數(shù)據在鏈表中左右相鄰兩個數(shù)據中的位置標識,如第一節(jié)點的待轉換數(shù)據的pr1r為-l、next為2,與提取到的如第一節(jié)點的待轉換數(shù)據的value數(shù)據單元a進行合并,以確定為第一節(jié)點的待轉換數(shù)據的轉換存儲結構中的值,即得到第一節(jié)點的待轉換數(shù)據的值為“_l、2、a”;同理,第二節(jié)點的待轉換數(shù)據的值為“ -1、3、b ”,第三節(jié)點的待轉換數(shù)據的值為“ 2、-1、c ”。
[0093]數(shù)據鍵值對存儲模塊330根據轉換存儲結構,將鍵及值組成的數(shù)據鍵值對存儲至鍵值數(shù)據庫中。
[0094]例如,接上例,將鍵及值合并組成數(shù)據鍵值對,并將數(shù)據鍵值對“K+1- ‘_l、2、a’ ”、“K+2- ‘-l、3、b”lP“K+3- ‘2、-l、c’” 存儲至鍵值數(shù)據庫中。
[0095]在一優(yōu)選實施例中,如圖4所示,該裝置還包括結構確定模塊410和結構鍵值對存儲模塊420 ;結構確定模塊410確定鏈表中與原始鏈表存儲結構相應的結構相關信息;結構鍵值對存儲模塊420將以預定的鏈表信息標識為鍵、以結構相關信息為值組成的結構鍵值對與同一鏈表中的各個待轉換數(shù)據相關聯(lián)地存儲至鍵值數(shù)據庫中。
[0096]其中,結構相關信息具體包括但不限于:
[0097]鏈表中的待轉換數(shù)據的數(shù)量;
[0098]鏈表中的下一可用的位置標識;
[0099]鏈表的頭部數(shù)據的位置標識;
[0100]鏈表的尾部數(shù)據的位置標識。
[0101]其中,預定的鏈表信息標識,至少包括:
[0102]鏈表的鏈表標識;可變量標識。如以“K”為鏈表的鏈表標識,“meta”為可變量標識。
[0103]例如,接上例,鏈表中與圖6所示的鏈表存儲結構相應的結構相關信息包括:如鏈表中的待轉換數(shù)據的數(shù)量、鏈表中的下一可用的位置標識、鏈表的頭部數(shù)據的位置標識和鏈表的尾部數(shù)據的位置標識,根據圖6所示,可確定鏈表中的待轉換數(shù)據的數(shù)量為3,鏈表中的下一可用的位置標識為4,鏈表的頭部數(shù)據的位置標識為1,鏈表的尾部數(shù)據的位置標識為3,以預定的鏈表信息標識“KMta”為鍵,結構相關信息“3,4,1,3”為值組成的結構鍵值對“Kreta- ‘3,4,1,3’ ”與該鏈表中的各個待轉換數(shù)據相關聯(lián)地存儲至鍵值數(shù)據庫中。其中,結構鍵值對與各個待轉換數(shù)據相關聯(lián)地方式為,結構鍵值對的鍵“Kreta”中包括為元素“K”,各個待轉換數(shù)據的數(shù)據鍵值對“K+1- ‘_1、2、a’”、“K+2- ‘_1、3、b’”和“K+3- ‘2、_l、c’”的各個鍵“K+1 ”、“K+2”和“K+3”中均包括為元素“K”,其通過“K”可建立關聯(lián)關系。
[0104]優(yōu)選地,該裝置還包括更新模塊(圖中未示出);當對任一待更新的數(shù)據鍵值對進行更新操作時,更新模塊:
[0105]對與該待更新的數(shù)據鍵值在所述鏈表中左右相鄰的兩個數(shù)據對應的數(shù)據鍵值對進行相應更新;并對與該待更新的數(shù)據鍵值對相關聯(lián)的結構鍵值對進行相應更新。
[0106]例如,接上例,在圖6所示的鏈表中的第二節(jié)點與第三節(jié)點中加入一新節(jié)點,value數(shù)據單元為d,則第二節(jié)點的pr1r的位置標識,與第三節(jié)點的next的位置標識會隨之發(fā)生變化,第二節(jié)點與第三節(jié)點相