一種利用protobuf的數(shù)據(jù)存儲、讀取方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,特別涉及一種利用protobuf的數(shù)據(jù)存儲方法及裝 置、一種利用protobuf的數(shù)據(jù)讀取方法及裝置。
【背景技術(shù)】
[0002] protobuf是由Google開發(fā)提供的一套對數(shù)據(jù)結(jié)構(gòu)進(jìn)行序列化的方法,可以用做通 信協(xié)議,數(shù)據(jù)存儲格式等,并且,其具有不限系統(tǒng)語言、不限系統(tǒng)平臺、擴(kuò)展性強(qiáng)以及操作簡 單等優(yōu)點。
[0003]現(xiàn)有技術(shù)中,protobuf中的proto源文件存放數(shù)據(jù)格式定義,即定義了與消息實例 的名稱相關(guān)的存儲標(biāo)識,其中,每一消息實例對應(yīng)唯一的消息實例的名稱,與消息實例的名 稱相關(guān)的存儲標(biāo)識為:消息實例的名稱,或,關(guān)于消息實例的名稱與消息實例對應(yīng)的類的名 稱的組合信息,proto源文件編譯后生成proto包文件。protobuf和數(shù)據(jù)庫的關(guān)聯(lián)配置信息 保存在配置文件中,配置文件根據(jù)proto源文件和數(shù)據(jù)存儲的實際需要編寫,關(guān)聯(lián)配置信息 定義了與proto源文件中消息實例的名稱相關(guān)的存儲標(biāo)識相對應(yīng)的數(shù)據(jù)在數(shù)據(jù)庫中的具體 存儲位置,例如數(shù)據(jù)庫表的名稱、該表中列的名稱等。當(dāng)用戶利用protobuf進(jìn)行數(shù)據(jù)存儲 時,系統(tǒng)獲得待存儲數(shù)據(jù),同時構(gòu)建一個消息實例,并根據(jù)預(yù)定規(guī)則定義該數(shù)據(jù)消息的名 稱,待存儲數(shù)據(jù)存儲在其中;系統(tǒng)獲得該消息實例的名稱后,獲得配置文件中對應(yīng)的關(guān)聯(lián)配 置信息,并將該消息實例中存儲的數(shù)據(jù)存儲到所獲得關(guān)聯(lián)配置信息所指示的存儲位置,進(jìn) 而完成對數(shù)據(jù)的存儲。相應(yīng)的,當(dāng)用戶利用protobuf進(jìn)行數(shù)據(jù)讀取時,系統(tǒng)獲得存儲待讀取 數(shù)據(jù)的數(shù)據(jù)庫表的名稱,通過配置文件中的關(guān)聯(lián)配置信息和proto包文件中的數(shù)據(jù)格式定 義查找與待讀取數(shù)據(jù)對應(yīng)的消息實例的名稱,從配置文件中獲得與該消息實例的名稱相關(guān) 的目標(biāo)存儲標(biāo)識相對應(yīng)的關(guān)聯(lián)配置信息,進(jìn)而從該關(guān)聯(lián)配置信息所指示的存儲位置中讀取 該待讀取數(shù)據(jù)。
[0004] 可見,現(xiàn)有技術(shù)中proto包文件和配置文件是兩個不同的文件,存儲或讀取數(shù)據(jù)時 需分別導(dǎo)入系統(tǒng)中,若配置文件和proto包文件對應(yīng)的proto源文件不同,存儲或讀取數(shù)據(jù) 時就會發(fā)生配置文件與proto包文件不匹配的情況,造成存儲或讀取錯誤,例如,系統(tǒng)更新 時,proto源文件被更新,同時proto包文件更新,但配置文件未更新,二者對應(yīng)的proto源文 件不同,此時就會發(fā)生存儲或讀取錯誤。為了防止這種錯誤的發(fā)生,需要人工維護(hù)配置文件 與proto包文件的一致性,修改proto源文件中數(shù)據(jù)格式定義時,需要同時人工修改配置文 件,維護(hù)成本很高。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實施例的目的在于提供一種利用protobuf的數(shù)據(jù)存儲、讀取方法及裝置, 解決了配置文件與proto包文件不一致的問題,從而降低了人工維護(hù)成本。具體技術(shù)方案如 下:
[0006] 第一方面,本發(fā)明實施例提供了一種利用protobuf的數(shù)據(jù)存儲方法,包括:
[0007] 獲取待存儲數(shù)據(jù);
[0008] 構(gòu)建用于存儲所述待存儲數(shù)據(jù)的目標(biāo)消息實例,并將所述待存儲數(shù)據(jù)存儲在所述 目標(biāo)消息實例中,其中,所述目標(biāo)消息實例的名稱基于預(yù)設(shè)規(guī)則定義;
[0009] 從proto包文件中,獲得與所述目標(biāo)消息實例的名稱相關(guān)的目標(biāo)存儲標(biāo)識所對應(yīng) 的目標(biāo)關(guān)聯(lián)配置信息,其中,所述proto包文件存儲有與消息實例的名稱相關(guān)的存儲標(biāo)識以 及與所述存儲標(biāo)識對應(yīng)的關(guān)聯(lián)配置信息,所述與消息實例的名稱相關(guān)的存儲標(biāo)識為:消息 實例的名稱,或,關(guān)于消息實例的名稱與消息實例對應(yīng)的類的名稱的組合信息;
[0010]將所述目標(biāo)消息實例存儲到與所述proto包文件所對應(yīng)數(shù)據(jù)庫中的所述目標(biāo)關(guān)聯(lián) 配置信息所指示的存儲位置。
[0011]其中,所述proto包文件為對包括有關(guān)聯(lián)配置信息的proto源文件進(jìn)行編譯后得到 的;
[0012]其中,利用custom option自定義屬性機(jī)制,在proto源文件中加入與消息實例對 應(yīng)的類的名稱相關(guān)的存儲標(biāo)識對應(yīng)的關(guān)聯(lián)配置信息。
[0013]其中,所述關(guān)聯(lián)配置信息至少包括:數(shù)據(jù)庫表的名稱和該數(shù)據(jù)庫表中列的名稱。 [0014]其中,所述從proto包文件中獲得與所述目標(biāo)消息實例的名稱相關(guān)的目標(biāo)存儲標(biāo) 識所對應(yīng)的目標(biāo)關(guān)聯(lián)配置信息,包括:
[0015] 調(diào)用預(yù)設(shè)的獲取自定義屬性的函數(shù),從proto包文件中讀取與所述目標(biāo)消息實例 的名稱相關(guān)的目標(biāo)存儲標(biāo)識所對應(yīng)的目標(biāo)關(guān)聯(lián)配置信息;其中,所述獲取自定義屬性的函 數(shù)為與當(dāng)前計算機(jī)語言環(huán)境相對應(yīng)的特定函數(shù)。
[0016] 第二方面,本發(fā)明實施例提供了一種利用protobuf的數(shù)據(jù)讀取方法,包括:
[0017] 獲取存儲待讀取數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫表的名稱;
[0018] 從proto包文件中查找與所述目標(biāo)數(shù)據(jù)庫表的名稱對應(yīng)的目標(biāo)消息實例的名稱, 其中,所述proto包文件存儲有與消息實例的名稱相關(guān)的存儲標(biāo)識以及與所述存儲標(biāo)識對 應(yīng)的關(guān)聯(lián)配置信息,所述與消息實例的名稱相關(guān)的存儲標(biāo)識為:消息實例的名稱,或,關(guān)于 消息實例的名稱與消息實例對應(yīng)的類的名稱的組合信息;
[0019] 從所述pr〇to包文件中獲得與所述目標(biāo)消息實例的名稱相關(guān)的目標(biāo)存儲標(biāo)識所對 應(yīng)的目標(biāo)關(guān)聯(lián)配置信息;
[0020] 從所述目標(biāo)關(guān)聯(lián)配置信息所指示的存儲位置中讀取所述待讀取數(shù)據(jù)。
[0021] 第三方面,本發(fā)明實施例提供了一種利用protobuf的數(shù)據(jù)存儲裝置,包括:
[0022] 數(shù)據(jù)獲取模塊,用于獲取待存儲數(shù)據(jù);
[0023] 消息實例構(gòu)建模塊,用于構(gòu)建用于存儲所述待存儲數(shù)據(jù)的目標(biāo)消息實例,并將所 述待存儲數(shù)據(jù)存儲在所述目標(biāo)消息實例中,其中,所述目標(biāo)消息實例的名稱基于預(yù)設(shè)規(guī)則 定義;
[0024]關(guān)聯(lián)配置信息獲得模塊,用于從proto包文件中,獲得與所述目標(biāo)消息實例的名稱 相關(guān)的目標(biāo)存儲標(biāo)識所對應(yīng)的目標(biāo)關(guān)聯(lián)配置信息,其中,所述proto包文件存儲有與消息實 例的名稱相關(guān)的存儲標(biāo)識以及與所述存儲標(biāo)識對應(yīng)的關(guān)聯(lián)配置信息,所述與消息實例的名 稱相關(guān)的存儲標(biāo)識為:消息實例的名稱,或,關(guān)于消息實例的名稱與消息實例對應(yīng)的類的名 稱的組合信息;
[0025]數(shù)據(jù)存儲模塊,用于將所述目標(biāo)消息實例存儲到與所述proto包文件所對應(yīng)數(shù)據(jù) 庫中的所述目標(biāo)關(guān)聯(lián)配置信息所指示的存儲位置。
[0026]其中,所述proto包文件為對包括有關(guān)聯(lián)配置信息的proto源文件進(jìn)行編譯后得到 的;
[0027] 其中,利用custom option自定義屬性機(jī)制,在proto源文件中加入與消息實例對 應(yīng)的類的名稱相關(guān)的存儲標(biāo)識對應(yīng)的關(guān)聯(lián)配置信息。
[0028] 其中,所述關(guān)聯(lián)配置信息至少包括:數(shù)據(jù)庫表的名稱和該數(shù)據(jù)庫表中列的名稱。
[0029] 其中,所述關(guān)聯(lián)配置信息獲得模塊包括:
[0030] 函數(shù)調(diào)用單元,用于調(diào)用預(yù)設(shè)的獲取自定義屬性的函數(shù),從proto包文件中讀取與 所述目標(biāo)消息實例的名稱相關(guān)的目標(biāo)存儲標(biāo)識所對應(yīng)的目標(biāo)關(guān)聯(lián)配置信息;其中,所述獲 取自定義屬性的函數(shù)為與當(dāng)前計算機(jī)語言環(huán)境相對應(yīng)的特定函數(shù)。
[0031] 第四方面,本發(fā)明實施例提供了一種利用protobuf的數(shù)據(jù)讀取裝置,包括:
[0032]數(shù)據(jù)庫表名稱獲取模塊,用于獲取存儲待讀取數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫表的名稱;
[0033]消息實例的名稱查找模塊,用于從proto包文件中查找與所述目標(biāo)數(shù)據(jù)庫表的名 稱對應(yīng)的目標(biāo)消息實例的名稱,其中,所述proto包文件存儲有與消息實例的名稱相關(guān)的存 儲標(biāo)識以及與所述存儲標(biāo)識對應(yīng)的關(guān)聯(lián)配置信息,所述與消息實例的名稱相關(guān)的存儲標(biāo)識 為:消息實例的名稱,或,關(guān)于消息實例的名稱與消息實例對應(yīng)的類的名稱的組合信息; [0034]關(guān)聯(lián)配置信息獲得模塊,用于從所述proto包文件中獲得與所述目標(biāo)消息實例的 名稱相關(guān)的目標(biāo)存儲標(biāo)識所對應(yīng)的目標(biāo)關(guān)聯(lián)配置信息;
[0035]數(shù)據(jù)讀取模塊,用于從所述目標(biāo)關(guān)聯(lián)配置信息所指示的存儲位置中讀取所述待讀 取數(shù)據(jù)。
[0036]本發(fā)明實施例提供的一種利用protobuf的數(shù)據(jù)存儲、讀取方法及裝置,利用 custom o