專利名稱:數(shù)據(jù)的存儲方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲技術(shù),尤其是一種數(shù)據(jù)的存儲方法及裝置。
背景技術(shù):
目前能支持存取有靈活數(shù)據(jù)字段(Schema-Flexible)的數(shù)據(jù)記錄的存儲格式,均是把每個字段的字段名及其存儲的數(shù)據(jù)字段的類型信息都包含在記錄內(nèi)。由此導致的數(shù)據(jù)記錄中可以有自定義的字段數(shù)據(jù),并能被正確地檢索出來。但實際工作中,同一個數(shù)據(jù)集內(nèi)存儲完全不一致的數(shù)據(jù)記錄或字段非常靈活多變的數(shù)據(jù)字段的場景很少。因此與數(shù)據(jù)字段內(nèi)容同步存儲其字段名的方式會帶來以下問題I.大量相類似的數(shù)據(jù)記錄中,重復的字段名很長占用較大的存儲空間,一旦存儲大量數(shù)據(jù),字段名的存儲會消耗大量的存儲空間,對資源造成浪費;2.字段名為避免重復或具有特殊的含義,往往會被定義的很長,在對該數(shù)據(jù)字段的讀取過程中,字段名的檢索操作占據(jù)了整個讀取過程的大部分時間,這極大地降低了讀取的效率。公開號為CN 1503147A的中國專利,公開了一種數(shù)據(jù)庫中對象關(guān)系的處理方法, 簡化了數(shù)據(jù)庫中對象之間關(guān)系的管理流程,減小了數(shù)據(jù)庫維護的工作量。但是如何降低對存儲資源的消耗,且提高數(shù)據(jù)的查詢效率成為目前亟待解決的問
題之一。
發(fā)明內(nèi)容
本發(fā)明解決的問題是降低對存儲資源的消耗,且提高數(shù)據(jù)的查詢效率。為解決上述問題,本發(fā)明提供了一種數(shù)據(jù)的存儲方法,包括獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,所述字段包括字段名和數(shù)據(jù)內(nèi)容;對所述字段名進行標識;建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。為解決上述問題,本發(fā)明還提供了一種數(shù)據(jù)的存儲裝置,包括獲取單元,用以獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,每個字段包括字段名和數(shù)據(jù)內(nèi)容;標識單元,用以對所述字段名進行標識;索引單元,用以建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;記錄單元,用以將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點
配合唯一的數(shù)據(jù)實體Schema定義,避免每次都傳遞大量冗余的字段名到后端存儲,起到了數(shù)據(jù)內(nèi)容壓縮的效果。與元數(shù)據(jù)定義相配合,依然支持用字段名讀取屬性內(nèi)容,且在后端查詢時,避免用字段名去匹配查詢(用編號直接定位字段所在存儲位置),大大提高原來查詢時尋址的效率??傮w的讀取,展開效率大大提高。對字段名進行標識,并設置所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系。不再存儲字段名不僅可以節(jié)省存儲空間,起到數(shù)據(jù)壓縮的效果,而且簡化了對數(shù)據(jù)讀取的時間,提高了效率。上述映射關(guān)系以索引的形式建立并存儲,依據(jù)映射關(guān)系查找該標識(字段名)的數(shù)據(jù)內(nèi)容。這依然支持用字段名讀取屬性內(nèi)容,且在后端查詢時,避免用字段名去匹配查詢的時間,不僅速度快而且定位準確,不易出錯。字段的數(shù)據(jù)內(nèi)容還可以嵌套下一級的字段,這種存儲方式可以很好的體現(xiàn)數(shù)據(jù)之間的包含關(guān)系,且下一級的字段的存儲方式與上一級的字段的存儲方式相同。查詢下一級的字段時,先獲取整個下一級的字段,再獲取下一級的字段的數(shù)據(jù)內(nèi)容的,這種總體的讀取,展開效率大大提高,讀取方便且快捷。
圖I是本發(fā)明實施例提供的數(shù)據(jù)的存儲方法的流程圖;圖2是本發(fā)明實施例提供的數(shù)據(jù)的示意圖;圖3是本發(fā)明實施例提供的數(shù)據(jù)的存儲裝置的結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施方式
做詳細的說明。在以下描述中闡述了具體細節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的具體實施方式
的限制。圖I是本發(fā)明實施例提供的數(shù)據(jù)的存儲方法的流程圖,下面結(jié)合圖I詳細說明。步驟SI,獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,所述字段包括字段名和數(shù)據(jù)內(nèi)容;步驟S2,對所述字段名進行標識;步驟S3,建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;步驟S4,將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。所述步驟SI中,數(shù)據(jù)(也可以稱為Schema,數(shù)據(jù)實體或元數(shù)據(jù))中可以包括多個字段,每個字段包含字段名和該字段的數(shù)據(jù)內(nèi)容,數(shù)據(jù)內(nèi)容也稱為該字段的值。所述字段還包括該字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型和該字段的數(shù)據(jù)內(nèi)容的長度,所述該字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型(也可以簡稱為字段的類型)通常為string,int,double等數(shù)據(jù)類型。該字段的數(shù)據(jù)內(nèi)容的長度(也可以簡稱為字段的長度),通常以字節(jié)為單位,也可以是其他單位。所述數(shù)據(jù)類型可以分為第一類型和第二類型。所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于第一類型,該字段的數(shù)據(jù)內(nèi)容的長度固定。例如,int型,該數(shù)據(jù)類型的字段的數(shù)據(jù)內(nèi)容的長度固定為4字節(jié),long型,該數(shù)據(jù)類型的字段的數(shù)據(jù)內(nèi)容的長度固定為8字節(jié)。所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于第二類型,該字段的數(shù)據(jù)內(nèi)容的長度不固定。例如,string 型,該數(shù)據(jù)類型的字段的數(shù)據(jù)內(nèi)容的長度隨著數(shù)據(jù)內(nèi)容的變化而變化,若string型的字段的數(shù)據(jù)內(nèi)容為“ 123”,其長度為3,若string型的字段的數(shù)據(jù)內(nèi)容為“ 123456”,其長度為6 ; 二進制型,該數(shù)據(jù)類型的字段的數(shù)據(jù)內(nèi)容的長度也是隨著數(shù)據(jù)內(nèi)容的變化而變化的。所述字段的數(shù)據(jù)內(nèi)容中還可以嵌套字段(也稱為該字段的下一級字段),也就是說,數(shù)據(jù)內(nèi)容可以是簡單的數(shù)值、文本還可以是復雜的字段。數(shù)據(jù)內(nèi)容中嵌套的字段,也是具有字段名、數(shù)據(jù)內(nèi)容的,還可以具有類型和長度。另外,數(shù)據(jù)內(nèi)容中嵌套的字段的數(shù)據(jù)內(nèi)容還可以再嵌套字段,也就是說,數(shù)據(jù)內(nèi)容也是多層的嵌套結(jié)構(gòu)。數(shù)據(jù)內(nèi)容中嵌套的字段的數(shù)目可以是一個也可以是多個,嵌套的層數(shù)可以是多層,也可以是單層。在實際設計中,數(shù)據(jù)內(nèi)容中嵌套的還可以是其他結(jié)構(gòu)。圖2是本發(fā)明實施例提供的數(shù)據(jù)的示意圖,參考圖2所示的數(shù)據(jù)10。數(shù)據(jù)10包含三個字段,分別為姓名字段、年齡字段和地址字段,每個字段具有各自的字段名、數(shù)據(jù)內(nèi)容、 類型和長度。其中姓名字段的字段名為name,該字段的數(shù)據(jù)內(nèi)容為Tom,類型為string,長度為3 ;年齡字段的字段名為age,該字段的數(shù)據(jù)內(nèi)容為20,類型為int,長度為4 ;地址字段的字段名為address,地址字段為一個嵌套的字段,其數(shù)據(jù)內(nèi)容中還嵌套有兩個字段,因此地址字段的類型可以為空,長度為其數(shù)據(jù)內(nèi)容中包含的字段的長度的和,本實施例中,地址字段的數(shù)據(jù)內(nèi)容中包含兩個字段,分別為省份字段和城市字段,這兩個字段的數(shù)據(jù)內(nèi)容相同均為shanghai,類型也相同均為string,長度也相同都是8,根據(jù)省份字段和城市字段的長度可以得出地址字段的長度,地址字段的長度為省份字段和城市字段的長度的和,具體的為16。所述步驟S2中,設置字段名的標識,所述標識對應該字段的數(shù)據(jù)內(nèi)容和該字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型。所述字段的字段名可以以數(shù)字順序進行標識。字段的數(shù)據(jù)內(nèi)容以類似數(shù)組的形式保存。所述步驟S3中,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系,但是不再保存字段的字段名或標識。所述步驟S4中,將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū),在實際操作中,所述數(shù)據(jù)記錄還包括該數(shù)據(jù)記錄的長度、包含的字段的個數(shù)和結(jié)束符。具體的,所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容或該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。具體的可以是,若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度小于或等于預定長度,則所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容;若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度大于所述預定長度或者所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第二類型,則所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。所述預定長度可以為所述映射關(guān)系的長度,每個字段的映射關(guān)系的長度相等,且每個字段的映射關(guān)系連續(xù)排列在所述索引中。舉例來講,所述預定長度為4字節(jié),若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型為int型, int型為第一類型,該字段的數(shù)據(jù)內(nèi)容的長度固定為4字節(jié),等于所述預定長度,則該字段的數(shù)據(jù)內(nèi)容保存在索引區(qū);若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型為long型,long型為第一類型,該字段的數(shù)據(jù)內(nèi)容的長度固定為8字節(jié),大于所述預定長度,則該字段的數(shù)據(jù)內(nèi)容保存在數(shù)據(jù)存儲區(qū);若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型為string型,string型為第二類型,該字段的數(shù)據(jù)內(nèi)容的長度不固定,則該字段的數(shù)據(jù)內(nèi)容保存在數(shù)據(jù)存儲區(qū)。下面以一個具體實例說明本發(fā)明的技術(shù)方案存儲數(shù)據(jù)的方法。CSONArray的數(shù)據(jù)結(jié)構(gòu)定義如下表I,其中CSONArray表示一條數(shù)據(jù)記錄, CSONArray也可以稱為CSON數(shù)據(jù)段。表I
權(quán)利要求
1.一種數(shù)據(jù)的存儲方法,其特征在于,包括獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,所述字段包括字段名和數(shù)據(jù)內(nèi)容;對所述字段名進行標識;建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。
2.如權(quán)利要求I所述的數(shù)據(jù)的存儲方法,其特征在于,所述數(shù)據(jù)記錄還包括該數(shù)據(jù)記錄的長度、包含的字段的個數(shù)和結(jié)束符。
3.如權(quán)利要求I所述的數(shù)據(jù)的存儲方法,其特征在于,所述字段還包括該字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型、該字段的數(shù)據(jù)內(nèi)容的長度;所述數(shù)據(jù)類型分為第一類型和第二類型,所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,該字段的數(shù)據(jù)內(nèi)容的長度固定,所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第二類型,該字段的數(shù)據(jù)內(nèi)容的長度不固定。
4.如權(quán)利要求3所述的數(shù)據(jù)的存儲方法,其特征在于,所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容或該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。
5.如權(quán)利要求4所述的數(shù)據(jù)的存儲方法,其特征在于,若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度小于或等于預定長度,則所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容;若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度大于所述預定長度或者所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第二類型,則所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。
6.如權(quán)利要求5所述的數(shù)據(jù)的存儲方法,其特征在于,所述預定長度為所述映射關(guān)系的長度,每個字段的映射關(guān)系的長度相等,且每個字段的映射關(guān)系連續(xù)排列在所述索引中。
7.如權(quán)利要求I所述的數(shù)據(jù)的存儲方法,其特征在于,所述數(shù)據(jù)內(nèi)容嵌套至少一個字段,每個字段包括該字段的字段名和該字段的數(shù)據(jù)內(nèi)容。
8.一種數(shù)據(jù)的存儲裝置,其特征在于,包括獲取單元,用以獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,每個字段包括字段名和數(shù)據(jù)內(nèi)容;標識單元,用以對所述字段名進行標識;索引單元,用以建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;記錄單元,用以將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。
9.如權(quán)利要求8所述的數(shù)據(jù)的存儲裝置,其特征在于,所述記錄單元還將所述數(shù)據(jù)記錄的長度、包含的字段的個數(shù)和結(jié)束符保存在數(shù)據(jù)記錄中。
10.如權(quán)利要求8所述的數(shù)據(jù)的存儲裝置,其特征在于,所述字段還包括該字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型、該字段的數(shù)據(jù)內(nèi)容的長度;所述數(shù)據(jù)類型分為第一類型和第二類型,所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,該字段的數(shù)據(jù)內(nèi)容的長度固定,所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第二類型,該字段的數(shù)據(jù)內(nèi)容的長度不固定。
11.如權(quán)利要求10所述的數(shù)據(jù)的存儲裝置,其特征在于,所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容或該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。
12.如權(quán)利要求11所述的數(shù)據(jù)的存儲裝置,其特征在于,若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度小于或等于預定長度,則所述索引單元建立的索引中包括的所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容;若所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第一類型,且所述長度大于所述預定長度或者所述字段的數(shù)據(jù)內(nèi)容的數(shù)據(jù)類型屬于所述第二類型,則所述索引單元建立的索引中包括的所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系為該字段的數(shù)據(jù)內(nèi)容在該數(shù)據(jù)記錄的數(shù)據(jù)存儲區(qū)中存儲地址相對于所述數(shù)據(jù)存儲區(qū)的首地址的偏移量。
13.如權(quán)利要求12所述的數(shù)據(jù)的存儲裝置,其特征在于,所述預定長度為所述映射關(guān)系的長度,每個字段的映射關(guān)系的長度相等,且每個字段的映射關(guān)系連續(xù)排列在所述索引中。
14.如權(quán)利要求8所述的數(shù)據(jù)的存儲裝置,其特征在于,所述數(shù)據(jù)內(nèi)容嵌套至少一個字段,每個字段包括該字段的字段名和該字段的數(shù)據(jù)內(nèi)容。
全文摘要
一種數(shù)據(jù)的存儲方法及裝置,所述數(shù)據(jù)的存儲方法包括獲取數(shù)據(jù),所述數(shù)據(jù)包括字段,所述字段包括字段名和數(shù)據(jù)內(nèi)容;對所述字段名進行標識;建立所述字段名的索引,所述索引包括所述標識與該字段的數(shù)據(jù)內(nèi)容的映射關(guān)系;將所述字段名的索引及所述字段的數(shù)據(jù)內(nèi)容保存為數(shù)據(jù)記錄,所述數(shù)據(jù)記錄包括存儲所述索引的索引區(qū)和存儲所述數(shù)據(jù)內(nèi)容的數(shù)據(jù)存儲區(qū)。本發(fā)明的技術(shù)方案可以降低對存儲資源的消耗,且提高數(shù)據(jù)的查詢效率。
文檔編號G06F17/30GK102609452SQ201210007568
公開日2012年7月25日 申請日期2012年1月11日 優(yōu)先權(quán)日2012年1月11日
發(fā)明者虞鋼 申請人:上海西本網(wǎng)絡科技有限公司