專利名稱:實現(xiàn)數(shù)據(jù)存儲、讀取的方法、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及實現(xiàn)數(shù)據(jù)存儲、讀取的方法、裝 置及系統(tǒng)。
背景技術(shù):
當(dāng)前,數(shù)據(jù)庫正在各項技術(shù)中得到廣泛的使用。在需要進行數(shù)據(jù)存儲時, 數(shù)據(jù)庫根據(jù)相應(yīng)指令以一定的格式完成對數(shù)據(jù)的存儲,在需要進行數(shù)據(jù)讀取
時,通過向數(shù)據(jù)庫發(fā)送相應(yīng)的讀取要求,使得數(shù)據(jù)庫根據(jù)該指令查找得到相應(yīng) 的存儲數(shù)據(jù),并將該數(shù)據(jù)返回給發(fā)送讀取要求的一方。
隨著技術(shù)的不斷進步以及各類型業(yè)務(wù)的不斷發(fā)展,數(shù)據(jù)的內(nèi)容也日益復(fù) 雜,往往是在一條數(shù)據(jù)中包括多個相互獨立的子數(shù)據(jù),以便通過這些子數(shù)據(jù)體 現(xiàn)更多的信息內(nèi)容。為了適應(yīng)數(shù)據(jù)日益復(fù)雜的特點,當(dāng)前的數(shù)據(jù)多為結(jié)構(gòu)化數(shù)
據(jù),這種類型數(shù)據(jù)的特點是將一個數(shù)據(jù)中的多個子數(shù)據(jù)組成一個數(shù)據(jù)結(jié)構(gòu), 從而形成一個完整的結(jié)構(gòu)化數(shù)據(jù),在該結(jié)構(gòu)化數(shù)據(jù)中,各個子數(shù)據(jù)作為該結(jié)構(gòu) 化數(shù)據(jù)的數(shù)據(jù)項。以游戲數(shù)據(jù)為例在一個游戲用戶的數(shù)據(jù)中,通常需要包括 例如等級、性別、年齡、經(jīng)驗、金錢、職業(yè)等子數(shù)據(jù),在現(xiàn)有技術(shù)中,這些子 數(shù)據(jù)分別以一個數(shù)字表示,這些子數(shù)據(jù)分別作為結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)項組成一個 數(shù)據(jù)結(jié)構(gòu),從而形成一條包括了如上所述子數(shù)據(jù)內(nèi)容的結(jié)構(gòu)化數(shù)據(jù)。
在現(xiàn)有技術(shù)中,為了實現(xiàn)將上述結(jié)構(gòu)化數(shù)據(jù)存儲到數(shù)據(jù)庫中,通常需要在 數(shù)據(jù)庫中建立存儲表結(jié)構(gòu),該存儲表結(jié)構(gòu)與該數(shù)據(jù)庫需要保存的結(jié)構(gòu)數(shù)據(jù)的數(shù) 據(jù)結(jié)構(gòu)相對應(yīng),以便于將結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項分割出來后,分別獨立存 儲于數(shù)據(jù)庫中。具體的,在該存儲表結(jié)構(gòu)中,需要設(shè)置多個字段,每個字段與 需要存儲的結(jié)構(gòu)化數(shù)據(jù)中的相應(yīng)數(shù)據(jù)項相對應(yīng),結(jié)構(gòu)化數(shù)據(jù)在存儲到數(shù)據(jù)庫之 前,首先進行解析,得到各個數(shù)據(jù)項,并將各個數(shù)據(jù)項存儲到數(shù)據(jù)庫中所設(shè)置 的相應(yīng)字段中。
仍以游戲數(shù)據(jù)為例,參見圖1,為了實現(xiàn)將結(jié)構(gòu)化的游戲數(shù)據(jù)存儲在數(shù)據(jù) 庫中,現(xiàn)有技術(shù)包括如下步驟
7步驟101:游戲邏輯模塊將需要存儲的數(shù)據(jù)發(fā)送數(shù)據(jù)庫中的解析模塊,其 中,所述數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù);
步驟102:所述解析模塊根據(jù)預(yù)先設(shè)定的解析規(guī)則,對所述結(jié)構(gòu)化數(shù)據(jù)進 行解析,拆分得到該結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項;
步驟103:所述解析^f莫塊將解析得到的各個數(shù)據(jù)項分別存儲到數(shù)據(jù)庫中相 應(yīng)的字段中去;例如,在從結(jié)構(gòu)化數(shù)據(jù)中拆分得到等級數(shù)據(jù)項、性別數(shù)據(jù)項、 年齡數(shù)據(jù)項后,解析模塊將這些數(shù)據(jù)項存儲到數(shù)據(jù)庫中為這些子數(shù)據(jù)所設(shè)置的 相應(yīng)字段中。
在采用上述方式進行結(jié)構(gòu)化數(shù)據(jù)存儲后,在需要進行數(shù)據(jù)讀取時,數(shù)據(jù)庫 根據(jù)讀取請求,從相應(yīng)的字段獲得所需數(shù)據(jù)項的數(shù)據(jù),并將該數(shù)據(jù)返回給請求 獲得數(shù)據(jù)的一方。
對于其他類型、內(nèi)容的結(jié)構(gòu)化數(shù)據(jù),其存儲數(shù)據(jù)的方式與如上所述實施方 式類似。
上述對于結(jié)構(gòu)化數(shù)據(jù)的存儲方式,雖然能夠?qū)崿F(xiàn)對于結(jié)構(gòu)化數(shù)據(jù)的存儲, 但是,仍然具有如下問題
由于在數(shù)據(jù)庫中需要設(shè)置與待存儲的結(jié)構(gòu)化數(shù)據(jù)相對應(yīng)的各個字段,且數(shù) 據(jù)庫中的解析模塊也需要以待存儲的結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)項組成方式作為解析 規(guī)則來進行結(jié)構(gòu)化數(shù)據(jù)的解析,因此, 一旦由于某種原因,上層應(yīng)用邏輯層中 的待存儲結(jié)構(gòu)化數(shù)據(jù)發(fā)生了改變,例如增加或減少了某個數(shù)據(jù)項,則數(shù)據(jù)庫需 要獲知當(dāng)前變化情況,相應(yīng)的調(diào)整其所設(shè)置的字段,同時,解析模塊也需要獲 知所述變化情況,相應(yīng)的改變解析規(guī)則。這些擴大了底層數(shù)據(jù)庫與上層邏輯應(yīng) 用層之間的耦合度,該耦合度使得一旦邏輯層由于進行功能擴展而需要改變結(jié) 構(gòu)化數(shù)據(jù)時,數(shù)據(jù)庫也需要進行相應(yīng)調(diào)整,從而額外增加了溝通成本、維護成 本和開發(fā)成本,不利于業(yè)務(wù)的迅速推廣和實現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明實施例的目的在于提供一種實現(xiàn)數(shù)據(jù)存儲的方法、裝置及系統(tǒng), 以降低進行數(shù)據(jù)存儲時數(shù)據(jù)庫與上層邏輯層的耦合度。本發(fā)明實施例提供以下技術(shù)方案 一種實現(xiàn)數(shù)據(jù)存儲的方法,該方法包括 接收待存儲的結(jié)構(gòu)化數(shù)據(jù);
將所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送 給數(shù)據(jù)庫;
數(shù)據(jù)庫存儲進行所述序列化后的數(shù)據(jù)。 一種實現(xiàn)數(shù)據(jù)存儲的裝置,該裝置包括 結(jié)構(gòu)化數(shù)據(jù)接收模塊,用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù); 序列化處理模塊,用于對所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化; 序列化數(shù)據(jù)發(fā)送模塊,用于將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。 一種實現(xiàn)數(shù)據(jù)讀取的方法,該方法包括
接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù); 將所述序列化數(shù)據(jù)進行反序列化處理,得到各個數(shù)據(jù)項的數(shù)據(jù); 將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。 一種實現(xiàn)數(shù)據(jù)讀取的裝置,該裝置包括
序列化數(shù)據(jù)查找模塊,該模塊用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從 數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù);
反序列化模塊,該模塊用于將所述序列化數(shù)據(jù)進行反序列化處理,得到相 應(yīng)的數(shù)據(jù)項的數(shù)據(jù);
數(shù)據(jù)發(fā)送模塊,該模塊用于將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。
一種實現(xiàn)數(shù)據(jù)存儲、讀取的系統(tǒng),該系統(tǒng)包括
數(shù)據(jù)處理裝置,該裝置用于用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù),對所述結(jié)構(gòu) 化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;和, 用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù), 將所述序列化數(shù)據(jù)進行反序列化處理,得到相應(yīng)的數(shù)據(jù)項的數(shù)據(jù),并將相應(yīng)數(shù) 據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方;數(shù)據(jù)庫,該數(shù)據(jù)庫用于將所述數(shù)據(jù)處理裝置所發(fā)送來的序列化后的數(shù)據(jù)
存儲在該數(shù)據(jù)庫中所設(shè)置的一個字段中,以及根據(jù)所述數(shù)據(jù)讀取請求,查找所 存儲的對應(yīng)的序列化數(shù)據(jù),并將該數(shù)據(jù)返回給所述數(shù)據(jù)處理裝置。
可見,在本發(fā)明實施例中,由于對結(jié)構(gòu)化數(shù)據(jù)的各個數(shù)據(jù)項進行序列化, 并將序列化后的數(shù)據(jù)存儲在數(shù)據(jù)庫所設(shè)置的一個字段中,因此,無需數(shù)據(jù)按照 結(jié)構(gòu)化數(shù)據(jù)的組成方式相應(yīng)的設(shè)置多個字段,也無需在進行數(shù)據(jù)存儲時進行結(jié) 構(gòu)化數(shù)據(jù)的解析,從而使得在由于系統(tǒng)升級等原因而導(dǎo)致結(jié)構(gòu)化數(shù)據(jù)發(fā)生改變 時,數(shù)據(jù)庫無需進行相應(yīng)的修改,數(shù)據(jù)庫與上層應(yīng)用之間的耦合度低,從而使 得進行新業(yè)務(wù)開發(fā)時,不會產(chǎn)生額外的溝通成本、維護成本和開發(fā)成本,有利 于新業(yè)務(wù)的迅速實現(xiàn)和推廣。
圖1為現(xiàn)有技術(shù)中實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)存儲的流程圖; 圖2為本發(fā)明實施例中實現(xiàn)數(shù)據(jù)存儲的方法的流程圖; 圖3為本發(fā)明一具體實例中實現(xiàn)數(shù)據(jù)存儲的方法的流程圖; 圖4為本發(fā)明實施例中實現(xiàn)數(shù)據(jù)存儲的裝置的模塊圖; 圖5為本發(fā)明實施例中實現(xiàn)數(shù)據(jù)讀取的方法的流程圖; 圖6為本發(fā)明一具體實例中實現(xiàn)數(shù)據(jù)讀取的方法的流程圖; 圖7為本發(fā)明實施例中實現(xiàn)數(shù)據(jù)讀取的裝置的模塊圖; 圖8為本發(fā)明實施例中實現(xiàn)數(shù)據(jù)存儲、讀取的系統(tǒng)的示意圖。
具體實施例方式
下面,結(jié)合附圖對本發(fā)明實施例進行詳細描述。
參見圖2,在本發(fā)明一實施例中,實現(xiàn)數(shù)據(jù)存儲的方法包括以下步驟 步驟201:接收待存儲的結(jié)構(gòu)化數(shù)據(jù);
步驟202:將所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后 的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;
步驟203:數(shù)據(jù)庫存儲進行所述序列化后的數(shù)據(jù)。
在本發(fā)明優(yōu)選實施例中,為了進一步節(jié)省存儲空間,步驟202可以采用如 下兩種方式實現(xiàn)方式一
首先,將結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行序列化,得到一個序 列化后的二進制數(shù)據(jù);然后,對所述序列化后的二進制數(shù)據(jù)進行串行化處理, 得到字符串,并以該字符串作為所述序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;
方式二
首先,對結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行串行化處理,分別得 到這些二進制it據(jù)所對應(yīng)的字符,然后,將這些字符進行序列化,得到字符串, 并將該字符串作為所述序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。
同時,在本發(fā)明另一優(yōu)選實施例中,為了保證數(shù)據(jù)存儲的準(zhǔn)確性,在進行 所述序列化之前,本發(fā)明所提供的方法可進一步包括預(yù)處理的步驟,其中的一 種預(yù)處理可以為
對待存儲的數(shù)據(jù)進行緊縮對齊處理,從而排除在不同操作系統(tǒng)下,由于字 節(jié)對齊方式不同所帶來的問題;
此外,為了提高存儲效率,在該方法中,可以預(yù)先定義為待存儲的結(jié)構(gòu)化
數(shù)據(jù)定義版本號,以網(wǎng)絡(luò)游戲為例,定義版本號的具體實現(xiàn)為
當(dāng)游戲管理器申請一塊數(shù)據(jù)區(qū)(通常為"內(nèi)存")時,對該數(shù)據(jù)區(qū)的數(shù)據(jù)進 行初始化,該數(shù)據(jù)區(qū)的數(shù)據(jù)的初始版本號即為0。每次數(shù)據(jù)區(qū)中的數(shù)據(jù)發(fā)生變 化時,都會將版本號自動升l,以便于根據(jù)版本號確認數(shù)據(jù)是否更新。也就是 說,數(shù)據(jù)庫只存儲(或者說"接受")最新的數(shù)據(jù)。這是一種解決"多線程數(shù)據(jù) 沖突問題"的方法。
相應(yīng)的,在定義版本號的前提下,在進行所述存儲之前,可以進一步數(shù)據(jù) 校驗的步驟,具體為判斷待存儲的結(jié)構(gòu)化數(shù)據(jù)的版本號是否大于數(shù)據(jù)庫中當(dāng) 前存儲數(shù)據(jù)的版本號,如果是,表明當(dāng)前待存儲數(shù)據(jù)為較新版本的數(shù)據(jù),則執(zhí) 行所述存儲數(shù)據(jù)的步驟;否則,表明當(dāng)前待存儲的數(shù)據(jù)為老版本的數(shù)據(jù),無需 進行數(shù)據(jù)存儲,則拒絕對該數(shù)據(jù)執(zhí)行所述數(shù)據(jù)存儲的步驟,進一步的,還可返 回數(shù)據(jù)存儲失敗消息,以告知上層邏輯層數(shù)據(jù)存儲失敗。
下面,結(jié)合具體實例,對上述方法的實現(xiàn)加以詳細說明。
ii以游戲數(shù)據(jù)為例,在游戲中,需要在數(shù)據(jù)庫中存儲玩家的數(shù)據(jù),每個玩家 的數(shù)據(jù)包括等級、性別、年齡、經(jīng)驗、金錢、職業(yè)等信息,這些信息分別以一 個數(shù)字表示,形成多條子數(shù)據(jù),各個子數(shù)據(jù)分別作為一個結(jié)構(gòu)化數(shù)據(jù)中的數(shù)據(jù) 項,從而形成一條結(jié)構(gòu)化游戲數(shù)據(jù)。為了存儲如上所述的游戲數(shù)據(jù),參見圖3,
需要以下步驟
步驟301:游戲邏輯^t塊將所述結(jié)構(gòu)化游戲數(shù)據(jù)發(fā)送至二進制數(shù)據(jù)序列化 模塊;
步驟302:所述二進制數(shù)據(jù)序列化才莫塊將所述游戲數(shù)據(jù)中的各個數(shù)據(jù)項中 的二進制數(shù)據(jù)進行序列化,得到 一條序列化后的二進制數(shù)據(jù);
步驟303:所述二進制數(shù)據(jù)序列化^t塊將所述序列化后的二進制數(shù)據(jù)發(fā)送 給串行化模塊,串行化模塊將該二進制數(shù)據(jù)進行串行化處理后得到相應(yīng)的字符 串;
步驟304:將得到的字符串發(fā)送給數(shù)據(jù)庫中的存儲模塊,存儲模塊根據(jù)所 述游戲數(shù)據(jù)的類型以及標(biāo)識,將所述字符串存儲在數(shù)據(jù)庫中所設(shè)置的一個字段 中。
在該具體實施例中,對于游戲數(shù)據(jù)不但進行了序列化處理,同時還進一步 執(zhí)行了串行化處理,從而通過該串行化處理降低數(shù)據(jù)所占用的存儲空間,從而 提高存儲效率。從本發(fā)明實施例所要解決的問題可以看出,在本發(fā)明其他實施 例中,可以不執(zhí)行所述串行化處理的步驟,并不影響本發(fā)明實施例的實現(xiàn)。
此外需要說明的是在該實施例中,步驟302和303的順序可以互換,也 就是說,可以先對各個數(shù)據(jù)項的二進制數(shù)據(jù)進行串行化處理,得到各個數(shù)據(jù)項 數(shù)據(jù)所對應(yīng)的字符,然后,再對這些字符進行序列化處理,從而得到用戶數(shù)據(jù) 所對應(yīng)的字符串。
還需說明的是,在本實施例中,采用二進制數(shù)據(jù)序列化模塊以及串行化模 塊兩個獨立模塊分別實現(xiàn)序列化功能以及串行化處理功能,在本發(fā)明其他實施 例中,也可采用一個模塊來實現(xiàn)上述功能,則相應(yīng)的二進制數(shù)據(jù)序列化模塊與 串行化模塊之間的數(shù)據(jù)交互步驟可以省略;或者,也可采用具有序列化功能以及串行化功能的數(shù)據(jù)庫來實現(xiàn)上述方法,則數(shù)據(jù)庫與所述串行化模塊、二進制 數(shù)據(jù)序列化模塊之間的交互可以省略,并不影響本發(fā)明實施例的實現(xiàn)。
為了對本發(fā)明實施例的實現(xiàn)加以更加詳細的說明,下面對所述串行化處理 的具體實現(xiàn)加以詳細介紹。以圖3所對應(yīng)的實施例為例,在該實施例中,在將 各個數(shù)據(jù)項的二進制數(shù)據(jù)進行序列化后,所述串行化處理可以采用以下方式實
現(xiàn):
所述串行化模塊以字符(CHAR)類型指針接收進行所述序列化后得到的 二進制數(shù)據(jù)的頭指針,然后,利用該指針,逐一取出二進制數(shù)據(jù)的單字節(jié);
將取出的單字節(jié)數(shù)據(jù)轉(zhuǎn)換為兩個單字節(jié),為了描述方便,這兩個單字節(jié)被 分別稱為第一單字節(jié)和第二單字節(jié);其中,第一單字節(jié)的形成方式為取出原 單字節(jié)中的前四位字節(jié),對該前四位字節(jié)進行填零梯:作,形成一個8位的第一 單字節(jié),第二單字節(jié)的形成方式為取出原單字節(jié)中的后四位字節(jié),同樣通過 填零;t喿作,形成一個8位的第二單字節(jié);
對第一單字節(jié)和第二單字節(jié)分別進行加i處理,所得到的字節(jié)即為滿足
ASCII編碼規(guī)則的字符串;在本步驟中,對第一單字節(jié)和第二單字節(jié)進行加1 處理的目的在于由于第一單字節(jié)和第二單字節(jié)都有可能為零,而在字符串類 型中通常以0表示字符串結(jié)尾,因此,為了避免在非結(jié)尾的位置出現(xiàn)O,對第 一單字節(jié)和第二單字節(jié)分別作加1處理。相應(yīng)的,在獲取數(shù)據(jù)時,數(shù)據(jù)庫需要
在獲得字符串后,先對該字符串中的每個字符做減1處理,然后再將每兩個字 節(jié)合并成一個字節(jié),從而保證獲取數(shù)據(jù)的正確性。
與上述數(shù)據(jù)存儲方法相對應(yīng),本發(fā)明實施例還提供了一種實現(xiàn)數(shù)據(jù)存儲的 裝置,參見圖4,該裝置包括
結(jié)構(gòu)化數(shù)據(jù)接收模塊401,用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù); 序列化處理模塊402,用于對所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列
化;
序列化數(shù)據(jù)發(fā)送模塊403,用于將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。
13在本發(fā)明優(yōu)選實施例中,所述序列化處理;漠塊402可以采用如下兩種方式 實現(xiàn)
方式一、序列化處理模塊402包括
二進制數(shù)據(jù)序列化模塊,該模塊用于將結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進 制數(shù)據(jù)進行序列化,得到 一個序列化后的二進制數(shù)據(jù);
第一串行化模塊,該模塊用于對所述序列化后的二進制數(shù)據(jù)進行串行化 處理,得到作為所述序列化后的凄l(xiāng)據(jù)的字符串。
方式二、序列化處理模塊402包括
第二串行化模塊,該模塊用于對結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù) 進行串行化處理,分別得到這些二進制數(shù)據(jù)所對應(yīng)的字符;
字符序列化模塊,該模塊用于對所述第二串行化模塊得到的各個字符進 行序列化處理,得到作為所述序列化后的數(shù)據(jù)的字符串。
同樣,為了保證數(shù)據(jù)存儲的準(zhǔn)確性,所述裝置還可進一步包括緊縮對齊模 塊,用于對待存儲的數(shù)據(jù)進行緊縮對齊處理,從而排除在不同操作系統(tǒng)下,由 于字節(jié)對齊方式不同所帶來的問題;
和/或,所述裝置還可進一步包括數(shù)據(jù)校驗?zāi)K,用于在進行所述存儲 之前,判斷待存儲的結(jié)構(gòu)化數(shù)據(jù)的版本號是否大于數(shù)據(jù)庫中當(dāng)前存儲數(shù)據(jù)的版 本號,如果大于,則控制所述序列化數(shù)據(jù)發(fā)送模塊403執(zhí)行發(fā)送數(shù)據(jù)的步驟, 否則,控制該序列化數(shù)據(jù)發(fā)送模塊403不進行所述數(shù)據(jù)發(fā)送的步驟。
與上述實現(xiàn)數(shù)據(jù)存儲的方法相對應(yīng),本發(fā)明實施例還提供了 一種實現(xiàn)數(shù)據(jù) 讀取的方法,參見圖5,該方法包括
步驟501:接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的 序列化數(shù)據(jù);
步驟502:將所述序列化數(shù)據(jù)進行反序列化處理,得到各個數(shù)據(jù)項的數(shù)據(jù); 步驟503:將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。 在本發(fā)明優(yōu)選實施例中,考慮到節(jié)省存儲空間的需要,在進行數(shù)據(jù)存儲時,將字符串作為序列化數(shù)據(jù)存儲到lt據(jù)庫中,在此情況下,實現(xiàn)步驟502可以采 用如下兩種方式 方式一
首先,對作為所述序列化數(shù)據(jù)存儲的所述字符串進行反串行化處理,得到 二進制數(shù)據(jù);
然后,對所述二進制數(shù)據(jù)進行反序列化處理,得到結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù) 項所對應(yīng)的二進制數(shù)據(jù); 方式二
首先,對作為所述序列化數(shù)據(jù)存儲的所述字符串進行反序列化處理,得到 各數(shù)據(jù)項所對應(yīng)的字符;
然后,對各數(shù)據(jù)項所對應(yīng)的字符進行反串行化處理,得到各數(shù)據(jù)項所對應(yīng) 的二進制數(shù)據(jù)。
此外,為了保證讀取數(shù)據(jù)的準(zhǔn)確性,可以在進行所述反序列化處理之前進 一步包括才交驗步驟,具體為
根據(jù)讀取請求,判斷所需讀取的數(shù)據(jù)與數(shù)據(jù)庫查找得到的序列化數(shù)據(jù)的版 本號是否相同,如果相同,則執(zhí)行后續(xù)反序列化處理的步驟,否則,不再執(zhí)行 后續(xù)步驟。
為了更加詳細的說明本發(fā)明實施例,舉一具體實例對本發(fā)明實施例所提供 的讀取數(shù)據(jù)的方法加以詳細描述。
仍以游戲數(shù)據(jù)為例,在游戲中,需要在數(shù)據(jù)庫中存儲玩家的數(shù)據(jù),每個玩 家的數(shù)據(jù)包括等級、性別、年齡、經(jīng)驗、金錢、職業(yè)等信息,這些信息分別以 一個數(shù)字表示,形成多條子數(shù)據(jù),各個子數(shù)據(jù)分別作為一個結(jié)構(gòu)化數(shù)據(jù)中的數(shù) 據(jù)項,從而形成一條結(jié)構(gòu)化游戲數(shù)據(jù)。當(dāng)需要獲M目應(yīng)數(shù)據(jù)項所對應(yīng)的數(shù)據(jù)時, 參見圖6,本發(fā)明實施例所提供的方法包括以下步驟
步驟601:游戲邏輯模塊向數(shù)據(jù)庫發(fā)送讀取數(shù)據(jù)的請求,數(shù)據(jù)庫根據(jù)該請 求中所攜帶的數(shù)據(jù)標(biāo)識、類型,獲取相應(yīng)的序列化lt據(jù);
步驟602:游戲邏輯模塊將所述序列化數(shù)據(jù)發(fā)送給反串行化模塊,該反串行化處理模塊對序列化數(shù)據(jù)進行反串行化處理,得到所述序列化數(shù)據(jù)所對應(yīng)的
二進制數(shù)據(jù),并將該二進制數(shù)據(jù)發(fā)送給反序列化模塊;
步驟603:所述反序列化模塊對所述二進制數(shù)據(jù)進行反序列化處理,得到 各個數(shù)據(jù)項所對應(yīng)的二進制數(shù)據(jù);
步驟604:根據(jù)游戲邏輯模塊所發(fā)送的請求,將相應(yīng)數(shù)據(jù)項所對應(yīng)的二進 制數(shù)據(jù)返回給游戲邏輯模塊。
需要說明的是在該實施例中,步驟602和603的順序可以互換,也就是 說,可以先對序列化數(shù)據(jù)進行反序列化處理,得到各個數(shù)據(jù)項數(shù)據(jù)所對應(yīng)的字 符,然后,再對這些字符進行反串行化處理,從而得到各數(shù)據(jù)項所對應(yīng)的二進 制數(shù)據(jù)。
還需說明的是,在本實施例中,采用反序列化模塊以及反串行化模塊兩個 獨立模塊分別實現(xiàn)反序列化功能以及反串行化處理功能,在本發(fā)明其他實施例 中,也可采用一個模塊來實現(xiàn)上述功能,則相應(yīng)的反序列化模塊與反串行化模 塊之間的數(shù)據(jù)交互步驟可以省略;或者,也可采用具有反序列化功能以及反串 行化功能的數(shù)據(jù)庫來實現(xiàn)上述方法,則數(shù)據(jù)庫與所述反串行化模塊、反序列化 模塊之間的交互可以省略,并不影響本發(fā)明實施例的實現(xiàn)。
需要說明的是,反串行化處理與串行化處理互為逆操作,在本發(fā)明一實施 例中,執(zhí)行反串行化處理具體可以包括
針對需要進行反串行化處理的字符串,將該字符串中的每個字符做減1 處理,然后再將每兩個字節(jié)合并成一個字節(jié),從而得到相應(yīng)的二進制數(shù)據(jù)。
與上述數(shù)據(jù)讀取方法相對應(yīng),本發(fā)明實施例還提供了一種實現(xiàn)數(shù)據(jù)讀取的 裝置,參見圖7,該裝置包括
序列化數(shù)據(jù)查找模塊701,該模塊用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求, 從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù);
反序列化模塊702,該模塊用于將所述序列化數(shù)據(jù)進行反序列化處理,得 到相應(yīng)的數(shù)據(jù)項的數(shù)據(jù);
16數(shù)據(jù)發(fā)送模塊703,該模塊用于將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)
的一方。
在本發(fā)明優(yōu)選實施例中,所述反序列化模塊702可以采用如下兩種方式實
現(xiàn)
方式一、在該方式中,所述反序列化模塊702包括
第一反串行化模塊,該模塊用于對作為所述序列化數(shù)據(jù)存儲的字符串進行 反串行化處理,得到二進制數(shù)據(jù);
二進制數(shù)據(jù)反序列化模塊,該模塊用于對所述二進制數(shù)據(jù)進行反序列化處 理,得到結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項所對應(yīng)的二進制數(shù)據(jù)。
方式二、在該方式中,所述反序列化模塊702包括
字符反序列化模塊,該模塊用于對作為所述序列化數(shù)據(jù)存儲的所述字符串 進行反序列化處理,得到各數(shù)據(jù)項所對應(yīng)的字符;
第二反串行化模塊,該模塊用于對各數(shù)據(jù)項所對應(yīng)的字符進行反串行化處 理,得到各數(shù)據(jù)項所對應(yīng)的二進制數(shù)據(jù)。
此外,為了保證讀取數(shù)據(jù)的準(zhǔn)確性,所述裝置還可進一步包括校驗?zāi)K, 該模塊用于根據(jù)讀取請求,判斷所需讀取的數(shù)據(jù)與查找得到的序列化數(shù)據(jù)的 版本號是否相同,如果相同,則控制所述反序列化模塊702執(zhí)行所述反序列化 的功能,否則,終止該反序列化模塊702執(zhí)行所述反序列化的功能。
本發(fā)明實施例還提供了一種實現(xiàn)數(shù)據(jù)存儲、讀取的系統(tǒng),參見圖8,該系 統(tǒng)包括
數(shù)據(jù)處理裝置801,該裝置用于用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù),對所述 結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫; 和,用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化 數(shù)據(jù),將所述序列化數(shù)據(jù)進行反序列化處理,得到相應(yīng)的數(shù)據(jù)項的數(shù)據(jù),并將 相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方;
數(shù)據(jù)庫802,該數(shù)據(jù)庫用于將所述數(shù)據(jù)處理裝置801所發(fā)送來的序列化
17后的數(shù)據(jù)存儲在該數(shù)據(jù)庫中所設(shè)置的一個字段中,以及根據(jù)所述數(shù)據(jù)讀取請 求,查找所存儲的對應(yīng)的序列化數(shù)據(jù),并將該數(shù)據(jù)返回給所述數(shù)據(jù)處理裝置 謝。
其中,可以采用如上各個實施例所述的實現(xiàn)數(shù)據(jù)存儲的裝置以及實現(xiàn)數(shù)據(jù) 讀取的裝置作為所述數(shù)據(jù)處理裝置,在具體實現(xiàn)過程中,所述數(shù)據(jù)存儲裝置以 及數(shù)據(jù)讀取裝置可以相互獨立設(shè)置,也可以集成在同一裝置中,并不影響本發(fā) 明實施例的實現(xiàn)。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通 技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾, 這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1、一種實現(xiàn)數(shù)據(jù)存儲的方法,其特征在于,該方法包括接收待存儲的結(jié)構(gòu)化數(shù)據(jù);將所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;數(shù)據(jù)庫存儲進行所述序列化后的數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述進行序列化并將序列 化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫的具體實現(xiàn)為將結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行序列化,得到一個序列化后 的二進制數(shù)據(jù),對所述序列化后的二進制數(shù)據(jù)進行串行化處理,得到字符串, 并以該字符串作為所述序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述進行序列化并將序列 化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫的具體實現(xiàn)為對結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行串行化處理,分別得到這些 二進制數(shù)據(jù)所對應(yīng)的字符,將這些字符進行序列化得到字符串,并將該字符串 作為所述序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。
4、 根據(jù)權(quán)利要求1 3任意一項所述的方法,其特征在于,所述串行化處 理的具體實現(xiàn)為以字符類型指針接收進行待處理的二進制數(shù)據(jù)的頭指針,利用該指針,逐 一取出所述二進制數(shù)據(jù)的單字節(jié);對當(dāng)前取出的單字節(jié)中的前四位字節(jié)進行填零操作,形成一個8位的第一 單字節(jié),對當(dāng)前取出的單字節(jié)中的后四位字節(jié)進行填零操作,形成一個8位的 第二單字節(jié);對所述第一單字節(jié)和第二單字節(jié)分別進行加1處理,得到符合ASCII編碼 規(guī)則的字符串。
5、 根據(jù)權(quán)利要求1 3任意一項所述的方法,其特征在于,該方法預(yù)先為 待存儲的結(jié)構(gòu)化數(shù)據(jù)定義版本號,并在所述結(jié)構(gòu)化數(shù)據(jù)發(fā)生變化時自動升級所 述版本號;在所述數(shù)據(jù)庫存儲進行所述序列化后的數(shù)據(jù)之前,該方法進一步包括 判斷待存儲的結(jié)構(gòu)化數(shù)據(jù)的版本號是否大于數(shù)據(jù)庫中當(dāng)前存儲數(shù)據(jù)的版 本號,如果是,則執(zhí)行所述存儲數(shù)據(jù)的步驟。
6、 根據(jù)權(quán)利要求1 3任意一項所述的方法,其特征在于,在進行所述序 列化之前,該方法進一步包括對待存儲的數(shù)據(jù)進行緊縮對齊處理。
7、 一種實現(xiàn)數(shù)據(jù)存儲的裝置,其特征在于,該裝置包括 結(jié)構(gòu)化數(shù)據(jù)接收模塊,用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù); 序列化處理模塊,用于對所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化; 序列化數(shù)據(jù)發(fā)送模塊,用于將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫。
8、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述序列化處理模塊包括 二進制數(shù)據(jù)序列化模塊,該模塊用于將結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行序列化,得到一個序列化后的二進制數(shù)據(jù);第一串行化才莫塊,該模塊用于對所述序列化后的二進制數(shù)據(jù)進行串行化 處理,得到作為所述序列化后的數(shù)據(jù)的字符串。
9、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述序列化處理模塊包括 第二串行化模塊,該模塊用于對結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項的二進制數(shù)據(jù)進行串行化處理,分別得到這些二進制數(shù)據(jù)所對應(yīng)的字符;字符序列化模塊,該模塊用于對所述第二串行化模塊得到的各個字符進 行序列化處理,得到作為所述序列化后的數(shù)據(jù)的字符串。
10、 根據(jù)權(quán)利要求7 9任意一項所述的裝置,其特征在于,該裝置進一步 包括緊縮對齊沖莫塊,用于對待存儲的數(shù)據(jù)進行緊縮對齊處理。
11、 根據(jù)權(quán)利要求7 9任意一項所述的裝置,其特征在于,該裝置進一步 包括數(shù)據(jù)校驗?zāi)K,該模塊用于在進行所述存儲之前,判斷待存儲的結(jié)構(gòu)化 數(shù)據(jù)的版本號是否大于數(shù)據(jù)庫中當(dāng)前存儲數(shù)據(jù)的版本號,如果大于,則控制所述序列化數(shù)據(jù)發(fā)送模塊執(zhí)行發(fā)送數(shù)據(jù)的步驟。
12、 一種實現(xiàn)數(shù)據(jù)讀取的方法,其特征在于,該方法包括 接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù); 將所述序列化數(shù)據(jù)進行反序列化處理,得到各個數(shù)據(jù)項的數(shù)據(jù); 將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。
13、 根據(jù)權(quán)利要求12所述的方法,其特征在于,所述進行反序列化處理, 得到各個數(shù)據(jù)項的數(shù)據(jù)的具體實現(xiàn)為對作為所述序列化數(shù)據(jù)存儲的所述字符串進行反串行化處理,得到二進制 數(shù)據(jù);對所述二進制數(shù)據(jù)進行反序列化處理,得到結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項所對 應(yīng)的二進制數(shù)據(jù)。
14、 根據(jù)權(quán)利要求12所述的方法,其特征在于,所述進行反序列化處理, 得到各個數(shù)據(jù)項的數(shù)據(jù)的具體實現(xiàn)為對作為所述序列化數(shù)據(jù)存儲的所述字符串進行反序列化處理,得到各數(shù)據(jù) 項所對應(yīng)的字符;對各數(shù)據(jù)項所對應(yīng)的字符進行反串行化處理,得到各個數(shù)據(jù)項所對應(yīng)的二 進制數(shù)據(jù)。
15、 根據(jù)權(quán)利要求12 14任意一項所述的方法,其特征在于,在進行所述 反序列化處理之前進一 步包括根據(jù)讀取請求,判斷所需讀取的數(shù)據(jù)與數(shù)據(jù)庫查找得到的序列化數(shù)據(jù)的版 本號是否相同,如果相同,則執(zhí)行后續(xù)反序列化處理的步驟。
16、 根據(jù)權(quán)利要求12 14任意一項所述的方法,其特征在于,所述反串行 化處理的具體實現(xiàn)為針對需要進行反串行化處理的字符串或字符,將該字符串中的每個字符或 所述字符做減1處理,然后將每兩個字節(jié)合并成一個字節(jié),得到相應(yīng)的二進制 數(shù)據(jù)。
17、 一種實現(xiàn)數(shù)據(jù)讀取的裝置,其特征在于,該裝置包括序列化數(shù)據(jù)查找模塊,該模塊用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化lt據(jù);反序列化模塊,該模塊用于將所述序列化數(shù)據(jù)進行反序列化處理,得到相 應(yīng)的數(shù)據(jù)項的數(shù)據(jù);數(shù)據(jù)發(fā)送模塊,該模塊用于將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。
18、 根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述反序列化模塊包括 第 一反串行化模塊,該模塊用于對作為所述序列化數(shù)據(jù)存儲的字符串進行反串行化處理,得到二進制數(shù)據(jù);二進制數(shù)據(jù)反序列化模塊,該模塊用于對所述二進制數(shù)據(jù)進行反序列化處 理,得到結(jié)構(gòu)化數(shù)據(jù)中各個數(shù)據(jù)項所對應(yīng)的二進制數(shù)據(jù)。
19、 根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述反序列化模塊包括 字符反序列化模塊,該模塊用于對作為所述序列化數(shù)據(jù)存儲的所述字符串進行反序列化處理,得到各數(shù)據(jù)項所對應(yīng)的字符;第二反串行化模塊,該模塊用于對各數(shù)據(jù)項所對應(yīng)的字符進行反串行化處 理,得到各數(shù)據(jù)項所對應(yīng)的二進制數(shù)據(jù)。
20、 根據(jù)權(quán)利要求17 19任意一項所述的裝置,其特征在于,該裝置進一 步包括校驗?zāi)K,該模塊用于根據(jù)讀取請求,判斷所需讀取的數(shù)據(jù)與查找得 到的序列化數(shù)據(jù)的版本號是否相同,如果相同,則控制所述反序列化模塊執(zhí)行 所述反序列化的功能。
21、 一種實現(xiàn)數(shù)據(jù)存儲、讀取的系統(tǒng),其特征在于,該系統(tǒng)包括 數(shù)據(jù)處理裝置,該裝置用于用于接收待存儲的結(jié)構(gòu)化數(shù)據(jù),對所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;和, 用于接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù), 將所述序列化數(shù)據(jù)進行反序列化處理,得到相應(yīng)的數(shù)據(jù)項的數(shù)據(jù),并將相應(yīng)數(shù) 據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的 一方;數(shù)據(jù)庫,該數(shù)據(jù)庫用于將所述數(shù)據(jù)處理裝置所發(fā)送來的序列化后的數(shù)據(jù)存儲在該數(shù)據(jù)庫中所設(shè)置的一個字段中,以及根據(jù)所述數(shù)據(jù)讀取請求,查找所 存儲的對應(yīng)的序列化數(shù)據(jù),并將該數(shù)據(jù)返回給所述數(shù)據(jù)處理裝置。
22、 根據(jù)權(quán)利要求21所述的系統(tǒng),其特征在于,所述數(shù)據(jù)處理裝置包括 權(quán)利要求7~11任意一項所述的實現(xiàn)數(shù)據(jù)存儲的裝置;和,權(quán)利要求17~20任意一項所述的實現(xiàn)數(shù)據(jù)讀取的裝置。
23、 根據(jù)權(quán)利要求22所述的系統(tǒng),其特征在于,所述實現(xiàn)數(shù)據(jù)存儲的裝 置和實現(xiàn)數(shù)據(jù)讀取的裝置集成在同 一裝置中。
全文摘要
本發(fā)明實施例公開了實現(xiàn)數(shù)據(jù)存儲、讀取的方法、裝置及系統(tǒng),其中,所述實現(xiàn)數(shù)據(jù)存儲的方法包括接收待存儲的結(jié)構(gòu)化數(shù)據(jù);將所述結(jié)構(gòu)化數(shù)據(jù)中的各個數(shù)據(jù)項進行序列化,并將序列化后的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫;數(shù)據(jù)庫存儲進行所述序列化后的數(shù)據(jù)。實現(xiàn)數(shù)據(jù)讀取的方法包括接收數(shù)據(jù)讀取請求,根據(jù)所述請求,從數(shù)據(jù)庫查找得到對應(yīng)的序列化數(shù)據(jù);將所述序列化數(shù)據(jù)進行反序列化處理,得到各個數(shù)據(jù)項的數(shù)據(jù);將相應(yīng)數(shù)據(jù)項的數(shù)據(jù)發(fā)送給請求讀取數(shù)據(jù)的一方。采用本發(fā)明實施例,能夠降低數(shù)據(jù)庫與上層邏輯層的耦合度,有利于新業(yè)務(wù)的迅速推廣和實現(xiàn)。
文檔編號G06F17/30GK101477532SQ20081024046
公開日2009年7月8日 申請日期2008年12月23日 優(yōu)先權(quán)日2008年12月23日
發(fā)明者洪曉健 申請人:北京暢游天下網(wǎng)絡(luò)技術(shù)有限公司