數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,具體而言,本發(fā)明涉及一種數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方 法及裝置。
【背景技術(shù)】
[0002] 隨著信息時代的迅速發(fā)展,不僅在大企業(yè),甚至一些小企業(yè)也積累了 TB量級的數(shù) 據(jù),各種規(guī)模的組織開始有了處理大規(guī)模及多重數(shù)據(jù)種類的數(shù)據(jù)的需求,而傳統(tǒng)的關(guān)系型 數(shù)據(jù)庫(SQL數(shù)據(jù)庫)在數(shù)據(jù)存儲的可擴展方面幾乎達到極限。為了解決大規(guī)模數(shù)據(jù)集合 及多重數(shù)據(jù)種類帶來的挑戰(zhàn)和大數(shù)據(jù)應(yīng)用的難題,非關(guān)系型數(shù)據(jù)庫(NoSQL數(shù)據(jù)庫)應(yīng)運而 生。
[0003] 常用的非關(guān)系型數(shù)據(jù)庫包括KV(Key-Value,鍵值)存儲數(shù)據(jù)庫,其數(shù)據(jù)按照鍵值 對的形式進行組織、索引和存儲。KV存儲方式非常適合不涉及過多數(shù)據(jù)關(guān)系及業(yè)務(wù)關(guān)系 的數(shù)據(jù)存儲業(yè)務(wù),其能有效減少讀寫磁盤的次數(shù),比SQL數(shù)據(jù)庫存儲擁有更好的讀寫性能, KV存儲數(shù)據(jù)庫的可實現(xiàn)方式包括Redis和LevelDB等,LevelDB能夠支持billion級別 的數(shù)據(jù)量,且在這個數(shù)量級別下還能夠保持非常高的數(shù)據(jù)存儲處理性能,同時,LevelDB可 將數(shù)據(jù)存儲至磁盤,有利于數(shù)據(jù)的永久保存;但是,目前LevelDB的接口僅支持無變形的 key-value(鍵值對)型數(shù)據(jù),接口較為單一,對業(yè)務(wù)的可擴展性較差。Redis是一種高性能 的key-value存儲系統(tǒng),其可支持多種value類型的數(shù)據(jù)存儲結(jié)構(gòu),包括string(字符串) 類型、list (鏈表)類型、set (集合)類型、zset (有序集合)類型和hash(哈希)類型,但 是,為了保證較高的數(shù)據(jù)存儲處理效率,其數(shù)據(jù)都是緩存在內(nèi)存中,即Redis為一種內(nèi)存型 數(shù)據(jù)庫,因此該存儲方式受物理內(nèi)存限制,無法實現(xiàn)大數(shù)據(jù)存儲。
[0004] 由此可見,如何實現(xiàn)一種數(shù)據(jù)存儲處理效率較高、既支持多種類型的數(shù)據(jù)存儲結(jié) 構(gòu)、又不受物理內(nèi)存限制的存儲系統(tǒng)是目前急需解決的問題。
【發(fā)明內(nèi)容】
[0005] 為克服上述技術(shù)問題或者至少部分地解決上述技術(shù)問題,特提出以下技術(shù)方案:
[0006] 本發(fā)明的實施例提出了一種數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法,包括:
[0007] 提取基于原始存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二數(shù)據(jù)單元,并將所 述第一數(shù)據(jù)單元及所述第二數(shù)據(jù)單元進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵;
[0008] 基于所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu),通過值設(shè)定規(guī)則確定所述轉(zhuǎn)換存儲結(jié)構(gòu)中 的值;
[0009] 根據(jù)所述轉(zhuǎn)換存儲結(jié)構(gòu),將所述鍵及所述值組成的數(shù)據(jù)鍵值對存儲至鍵值數(shù)據(jù)庫 中。
[0010] 其中,所述值設(shè)定規(guī)則具體包括:
[0011] 當所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu)中包括第三數(shù)據(jù)單元時,將所述第三數(shù)據(jù)單元 確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的值;
[0012] 當所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu)中不包括第三數(shù)據(jù)單元時,將轉(zhuǎn)換存儲結(jié)構(gòu)中 的值設(shè)為空值。
[0013] 優(yōu)選地,當所述原始存儲結(jié)構(gòu)為hash存儲結(jié)構(gòu)時,所述提取基于原始存儲結(jié)構(gòu)的 待轉(zhuǎn)換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二數(shù)據(jù)單元,并將所述第一數(shù)據(jù)單元及所述第二數(shù)據(jù)單 元進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵的步驟,具體包括:
[0014] 提取基于hash存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的key數(shù)據(jù)單元及field數(shù)據(jù)單元,并將 其進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵;
[0015] 其中,所述基于所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu),通過值設(shè)定規(guī)則確定所述轉(zhuǎn)換 存儲結(jié)構(gòu)中的值的步驟,具體包括:
[0016] 提取所述待轉(zhuǎn)換數(shù)據(jù)中的value數(shù)據(jù)單元,并將其確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的值。
[0017] 優(yōu)選地,當所述原始存儲結(jié)構(gòu)為set存儲結(jié)構(gòu)時,所述提取基于原始存儲結(jié)構(gòu)的 待轉(zhuǎn)換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二數(shù)據(jù)單元,并將所述第一數(shù)據(jù)單元及所述第二數(shù)據(jù)單 元進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵的步驟,具體包括:
[0018] 提取基于set存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的key數(shù)據(jù)單元及member數(shù)據(jù)單元,并將 其進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵;
[0019] 其中,所述基于待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu),通過值設(shè)定規(guī)則確定轉(zhuǎn)換存儲結(jié)構(gòu) 中的值的步驟,具體包括:
[0020] 將轉(zhuǎn)換存儲結(jié)構(gòu)中的值設(shè)為空值。
[0021] 優(yōu)選地,該方法還包括:
[0022] 確定具有相同第一數(shù)據(jù)單元的待轉(zhuǎn)換數(shù)據(jù)的數(shù)量;
[0023] 根據(jù)所述轉(zhuǎn)換存儲結(jié)構(gòu),將以預(yù)定的數(shù)量標識位為鍵、及所述具有相同第一數(shù)據(jù) 單元的待轉(zhuǎn)換數(shù)據(jù)的數(shù)量為值組成的數(shù)量鍵值對與所述待轉(zhuǎn)換數(shù)據(jù)相關(guān)聯(lián)地存儲至所述 鍵值數(shù)據(jù)庫中。
[0024] 其中,所述預(yù)定的數(shù)量標識位至少包括:
[0025] 第一數(shù)據(jù)單元;可變量標識。
[0026] 優(yōu)選地,
[0027] 數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法包括:
[0028] 當對所述鍵值數(shù)據(jù)庫進行添加和/或刪除操作時,對與添加和/或刪除的數(shù)據(jù)鍵 值對相關(guān)聯(lián)的數(shù)量鍵值對進行相應(yīng)更新。
[0029] 本發(fā)明的另一實施例還提出了一種數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換裝置,包括:
[0030] 鍵確定模塊,用于提取基于原始存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的第一數(shù)據(jù)單元及第二 數(shù)據(jù)單元,并將所述第一數(shù)據(jù)單元及所述第二數(shù)據(jù)單元進行合并以確定為轉(zhuǎn)換存儲結(jié)構(gòu)中 的鍵;
[0031] 值確定模塊,用于基于所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu),通過值設(shè)定規(guī)則確定所 述轉(zhuǎn)換存儲結(jié)構(gòu)中的值;
[0032] 數(shù)據(jù)鍵值對存儲模塊,用于根據(jù)所述轉(zhuǎn)換存儲結(jié)構(gòu),將所述鍵及所述值組成的數(shù) 據(jù)鍵值對存儲至鍵值數(shù)據(jù)庫中。
[0033] 其中,所述值設(shè)定規(guī)則具體包括:
[0034] 當所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu)中包括第三數(shù)據(jù)單元時,將所述第三數(shù)據(jù)單元 確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的值;
[0035] 當所述待轉(zhuǎn)換數(shù)據(jù)的原始存儲結(jié)構(gòu)中不包括第三數(shù)據(jù)單元時,將轉(zhuǎn)換存儲結(jié)構(gòu)中 的值設(shè)為空值。
[0036] 優(yōu)選地,當所述原始存儲結(jié)構(gòu)為hash存儲結(jié)構(gòu)時,所述鍵確定模塊具體用于提取 基于hash存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的key數(shù)據(jù)單元及field數(shù)據(jù)單元,并將其進行合并以 確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵;所述值確定模塊具體用于提取所述待轉(zhuǎn)換數(shù)據(jù)中的value數(shù) 據(jù)單元,并將其確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的值。
[0037] 優(yōu)選地,當所述原始存儲結(jié)構(gòu)為set存儲結(jié)構(gòu)時,所述鍵確定模塊具體用于提取 基于set存儲結(jié)構(gòu)的待轉(zhuǎn)換數(shù)據(jù)中的key數(shù)據(jù)單元及member數(shù)據(jù)單元,并將其進行合并以 確定為轉(zhuǎn)換存儲結(jié)構(gòu)中的鍵;所述值確定模塊具體用于將轉(zhuǎn)換存儲結(jié)構(gòu)中的值設(shè)為空值。
[0038] 優(yōu)選地,該裝置還包括:
[0039] 數(shù)量確定模塊,用于確定具有相同第一數(shù)據(jù)單元的待轉(zhuǎn)換數(shù)據(jù)的數(shù)量;
[0040] 數(shù)量鍵值對存儲模塊,用于根據(jù)所述轉(zhuǎn)換存儲結(jié)構(gòu),將以預(yù)定的數(shù)量標識位為鍵、 及所述具有相同第一數(shù)據(jù)單元的待轉(zhuǎn)換數(shù)據(jù)的數(shù)量為值組成的數(shù)量鍵值對與所述待轉(zhuǎn)換 數(shù)據(jù)相關(guān)聯(lián)地存儲至所述鍵值數(shù)據(jù)庫中。
[0041 ] 其中,所述預(yù)定的數(shù)量標識位至少包括:
[0042] 第一數(shù)據(jù)單元;可變量標識。
[0043] 優(yōu)選地,該裝置還包括更新模塊:
[0044] 更新模塊,用于當對所述鍵值數(shù)據(jù)庫進行添加和/或刪除操作時,對與添加和/或 刪除的數(shù)據(jù)鍵值對相關(guān)聯(lián)的數(shù)量鍵值對進行相應(yīng)更新。
[0045] 本發(fā)明的實施例中,提出了一種數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方案,通過將基于原始存儲 結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換存儲為基于轉(zhuǎn)換存儲結(jié)構(gòu)中的數(shù)據(jù),實現(xiàn)對多種存儲數(shù)據(jù)類型以統(tǒng)一的 轉(zhuǎn)換存儲結(jié)構(gòu)的方式進行數(shù)據(jù)存儲。進一步的,將支持多種value類型的數(shù)據(jù)存儲結(jié)構(gòu) 的Redis存儲系統(tǒng)中的多種數(shù)據(jù)存儲結(jié)構(gòu)的數(shù)據(jù),轉(zhuǎn)存至僅支持無變形的鍵值對數(shù)據(jù)存儲 結(jié)構(gòu)的LevelDB存儲系統(tǒng),實現(xiàn)了在保證較高的數(shù)據(jù)存儲處理效率的前提下,將受物理內(nèi) 存限制的存儲方式轉(zhuǎn)換為以磁盤為數(shù)據(jù)存儲目標的、不受物理內(nèi)存限制的存儲方式。通過 本發(fā)明,最終可實現(xiàn)一種數(shù)據(jù)存儲處理效率較高、既支持多種類型的數(shù)據(jù)存儲結(jié)構(gòu)、又不受 物理內(nèi)存限制的存儲系統(tǒng),由于該存儲系統(tǒng)可對多種數(shù)據(jù)結(jié)構(gòu)類型的海量數(shù)據(jù)進行高效存 儲,從而使得本方案的數(shù)據(jù)存儲方式擁有較強的業(yè)務(wù)擴展性。
[0046] 本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,這些將從下面的描述中變 得明顯,或通過本發(fā)明的實踐了解到。
【附圖說明】
[0047] 本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變 得明顯和容易理解,其中:
[0048] 圖1為本發(fā)明實施例的數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法的流程圖;
[0049] 圖2為本發(fā)明中一個優(yōu)選實施例的數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法的流程圖;
[0050] 圖3為本發(fā)明中另一優(yōu)選實施例的數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換方法的流程圖;
[0051] 圖4為本發(fā)明中另一實施例的數(shù)據(jù)存儲結(jié)構(gòu)的轉(zhuǎn)換裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0052] 下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終 相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附 圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
[0053] 本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式"一"、"一 個"、"所述"和"該"也可包括復(fù)數(shù)形式。應(yīng)該進一步理解的是,本發(fā)明的說明書中使用的措 辭"包括"是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加 一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當我們稱元 件被"連接"或"耦接"到另一元件時,它可以直接連接或耦接到其他元件,或者也可以存在 中間元件。此外,這里使用的"連接"或"耦接"可以包括無線連接或無線耦接。這里使用 的措辭"和/或"包括一個或更多個相關(guān)聯(lián)的列出項的全部或任一單元和全部組合。
[0054] 本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù) 術(shù)語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng) 該理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中 的意義