徐寶磊 羅江 潘剛
摘要:隨著信息技術(shù)在各領(lǐng)域的廣泛普及,尤其是移動(dòng)技術(shù)應(yīng)用的不斷深入,各業(yè)務(wù)部門(mén)間信息交換更加頻繁,各業(yè)務(wù)部門(mén)之間、移動(dòng)設(shè)備與Web服務(wù)端等異構(gòu)數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)共享或通信的問(wèn)題日益突出。研究了JSON數(shù)據(jù)對(duì)象在異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)間集成的應(yīng)用,利用JSON技術(shù)的特性及其相關(guān)優(yōu)勢(shì),構(gòu)建了一種基于JSON數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)交換模型,提高了異構(gòu)數(shù)據(jù)庫(kù)間數(shù)據(jù)通信的通用性和通信效率。
關(guān)鍵詞:JSON;數(shù)據(jù)交換;異構(gòu)數(shù)據(jù)庫(kù);系統(tǒng)集成;數(shù)據(jù)模型
DOIDOI:10.11907/rjdk.172299
中圖分類號(hào):TP391文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):16727800(2017)010017303
0引言
隨著信息化建設(shè)的不斷推進(jìn),各部門(mén)均建立了自己的MIS應(yīng)用系統(tǒng),這些系統(tǒng)或獨(dú)立開(kāi)發(fā)、維護(hù),或定制購(gòu)買整套系統(tǒng)等,在服務(wù)器平臺(tái)方面有Windows、Linux等不同系統(tǒng)的各種版本,數(shù)據(jù)庫(kù)有msSQL、MySQL、Oracle、Access,開(kāi)發(fā)語(yǔ)言有ASP、ASP.NET、JSP、PHP等。這些信息系統(tǒng)的建立在一定程度上提高了部門(mén)工作效率和信息化程度,但由于各個(gè)信息系統(tǒng)之間的相對(duì)獨(dú)立性和封閉性,數(shù)據(jù)結(jié)構(gòu)不一,有結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化等,給系統(tǒng)集成帶來(lái)了不少問(wèn)題。共享信息資源效率低下且安全性低,數(shù)據(jù)無(wú)法實(shí)現(xiàn)統(tǒng)一管理,無(wú)法進(jìn)行有效的數(shù)據(jù)分析和數(shù)據(jù)挖掘,無(wú)法給決策者提供全面、統(tǒng)一的決策信息[1],導(dǎo)致整個(gè)單位的工作效率不高。因此,迫切需要對(duì)各業(yè)務(wù)系統(tǒng)進(jìn)行整合和集成。數(shù)據(jù)交換是現(xiàn)代業(yè)務(wù)系統(tǒng)集成的關(guān)鍵,目前關(guān)于數(shù)據(jù)交換技術(shù)的研究涉及多個(gè)方面,如XML、JSON、YAML等。
1JSON簡(jiǎn)介
互聯(lián)網(wǎng)聯(lián)合組織(W3C)在1998年發(fā)布了XML可擴(kuò)展性標(biāo)記語(yǔ)言,它是一種跨平臺(tái)、跨網(wǎng)絡(luò)、跨編程語(yǔ)言的數(shù)據(jù)描述語(yǔ)言。XML廣泛應(yīng)用于傳統(tǒng)的數(shù)據(jù)交換領(lǐng)域,實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)間的數(shù)據(jù)同步。但XML由于具有文檔龐大、格式復(fù)雜、數(shù)據(jù)冗余、解析需消耗太多系統(tǒng)資源等固有缺陷,使其執(zhí)行效率低下[2]。
Clark Evans在2001年5月首次發(fā)表了YAML標(biāo)記語(yǔ)言。YAML支持對(duì)宿主語(yǔ)言的直接轉(zhuǎn)化,適合在腳本語(yǔ)言中使用,但由于存在兼容性問(wèn)題,其支持的開(kāi)發(fā)語(yǔ)言較少。
JSON(JavaScript Object Notation)屬于輕量級(jí)的數(shù)據(jù)交換格式,具有很好的易讀性和快速解析的特性。JSON文件就是普通的ASCII文本文件,使用常用的文字編輯器即可編輯。JSON可以直接用來(lái)編寫(xiě)Web頁(yè)面的某些部分,在瀏覽器中,JSON的解析速度比XML更快。與機(jī)器代碼不同,JSON不需要編譯和執(zhí)行,在大量復(fù)雜數(shù)據(jù)的存儲(chǔ)方面,JSON有希望成為傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的替代方法[3]。
2數(shù)據(jù)交換模型
整個(gè)數(shù)據(jù)交換模型包括:一個(gè)數(shù)據(jù)中心、若干部門(mén)子系統(tǒng),子系統(tǒng)分別與數(shù)據(jù)中心相連,形成一個(gè)星形拓?fù)浣Y(jié)構(gòu)。各子系統(tǒng)使用序列化的JSON對(duì)象通過(guò)數(shù)據(jù)中心與其它子系統(tǒng)通信。為提高數(shù)據(jù)檢索效率,數(shù)據(jù)中心使用具有層次性的樹(shù)形JSON數(shù)據(jù)對(duì)象存儲(chǔ)各子系統(tǒng)的數(shù)據(jù)庫(kù)、數(shù)據(jù)表及結(jié)構(gòu)信息。用戶發(fā)起查詢時(shí),模型首先進(jìn)行查詢處理,在數(shù)據(jù)中心查詢JSONtree,判斷需要檢索的子系統(tǒng)數(shù)據(jù)庫(kù)及子系統(tǒng)數(shù)據(jù)表,將查詢轉(zhuǎn)換為各個(gè)子系統(tǒng)的子查詢,并生成邏輯查詢計(jì)劃,最后將查詢結(jié)果轉(zhuǎn)換為JSON對(duì)象并顯示[4]。
節(jié)點(diǎn)的實(shí)體定義如下:
Class shujuku{
String id;
String department;
String DateName;
String Connstr;
String Tables;
……
}
JSON對(duì)象模型定義如下:
{
“id”:”1”;
“department”:”教務(wù)系統(tǒng)”;
“DateName”:”jwc”;
“Connstr”:”P(pán)rovider-SQLOLEDB.1;...”;
“Tables”:”Student...”;
……
}
2.1數(shù)據(jù)抽象并轉(zhuǎn)換為JSON對(duì)象
最常用的數(shù)據(jù)存儲(chǔ)方式為關(guān)系數(shù)據(jù)庫(kù),其遵守一定的規(guī)則范式,將來(lái)自關(guān)系數(shù)據(jù)庫(kù)DBMS的數(shù)據(jù)抽象并轉(zhuǎn)換為JSON對(duì)象。
JSON對(duì)象具有標(biāo)準(zhǔn)格式,其由3個(gè)主要元素組成:標(biāo)題、類型和屬性。屬性與關(guān)系數(shù)據(jù)庫(kù)中的屬性相似,可以是一個(gè)或多個(gè)。JSON協(xié)議中總共定義了6種數(shù)據(jù)類型[5]:string、number、boolean、空字符、array、Object。使用{}包含的一系列無(wú)序的key/value鍵值對(duì)表示:{ "TableName":"Students" }。
在創(chuàng)建JSON對(duì)象模式之后,查詢關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù),并轉(zhuǎn)換為JSON對(duì)象。將數(shù)據(jù)加載和轉(zhuǎn)換為JSON對(duì)象的算法如下:
輸入:用戶需要查詢的數(shù)據(jù);
輸出:該查詢所對(duì)應(yīng)的JSON對(duì)象;
Step1初始化:i=0,M=記錄數(shù);
Step2IF(i Step3{讀取記錄對(duì)象; Step4讀取該記錄對(duì)象的屬性; Step5將該key/value鍵值對(duì)轉(zhuǎn)換為JSON對(duì)象; Step6i=i++,跳轉(zhuǎn)到Step2}; Step7ELSE{跳轉(zhuǎn)到Step8}; Step8顯示該JSON對(duì)象。 2.2JSON查詢方法 與關(guān)系數(shù)據(jù)、XML標(biāo)記語(yǔ)言相比,JSON對(duì)象解析時(shí)不需要考慮子節(jié)點(diǎn)和父節(jié)點(diǎn)問(wèn)題,降低了數(shù)據(jù)冗余,JSON有更高的查詢檢索效率和更靈活的查詢方式[6]。
(1) N1QL:用于文件數(shù)據(jù)庫(kù)的下一代查詢語(yǔ)言,將SQL擴(kuò)展為可查詢的半結(jié)構(gòu)化數(shù)據(jù),其支持全部的JSON對(duì)象數(shù)據(jù)類型。JSON是不符合第一范式的數(shù)據(jù)模型,而N1QL則對(duì)這一數(shù)據(jù)模型進(jìn)行操作。
(2) JSONiq:構(gòu)建在XQuery之上的新型查詢語(yǔ)言,可以對(duì)各種類型的JSON對(duì)象進(jìn)行查詢,實(shí)現(xiàn)查詢分解和優(yōu)化。
(3) 針對(duì)不同的使用環(huán)境,JSON對(duì)象有多樣的數(shù)據(jù)查詢方式[7],例如JSONSQL、Jfunk、JSONPath、JSON:Select()等。從JSON對(duì)象讀取數(shù)據(jù)的算法如下:
輸入:JSON對(duì)象;
輸出:Data set (D)數(shù)據(jù)集;
Step1初始化:i=0,M=記錄數(shù);
Step2讀取JSON對(duì)象;
Step3讀取該記錄對(duì)象的屬性;
Step4IF(i {D=D.value[i]; i++}; Step5跳轉(zhuǎn)到Step4; Step6ELSE {跳轉(zhuǎn)到Step7}; Step7顯示該數(shù)據(jù)集。 3結(jié)語(yǔ) 與關(guān)系數(shù)據(jù)庫(kù)、XML標(biāo)記語(yǔ)言相比,基于文件的JSON對(duì)象具有更強(qiáng)的可擴(kuò)展性,是便攜式和獨(dú)立的平臺(tái),其它系統(tǒng)可以輕松地從JSON對(duì)象查詢數(shù)據(jù)[8]。幾乎所有關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)最新版本都實(shí)現(xiàn)了對(duì)JSON對(duì)象的支持。Oracle依據(jù)ANSI SQL/JSON標(biāo)準(zhǔn)實(shí)現(xiàn)了JSON對(duì)象的大部分功能,提供了JSON_VALUE()和JSON_QUERY()函數(shù)以及RETURNING子句;Microsoft數(shù)據(jù)庫(kù)系統(tǒng)在其SQL Server 2016版本中實(shí)現(xiàn)了對(duì)JSON對(duì)象的支持,提供了ISJSON)、JSON_VALUE()、OPENJSON()函數(shù),并實(shí)現(xiàn)了對(duì)查詢語(yǔ)句的支持[9]。通過(guò)使用JSON對(duì)象,業(yè)務(wù)部門(mén)子系統(tǒng)可以輕松地實(shí)現(xiàn)數(shù)據(jù)系統(tǒng)集成。 在關(guān)系數(shù)據(jù)庫(kù)方法中,數(shù)據(jù)建模受到數(shù)據(jù)庫(kù)管理系統(tǒng)的權(quán)限數(shù)量限制,當(dāng)數(shù)據(jù)量較大時(shí),系統(tǒng)檢索變得緩慢且易產(chǎn)生死鎖。在JSON中可以隨時(shí)添加具有復(fù)雜結(jié)構(gòu)的數(shù)據(jù),當(dāng)內(nèi)容更改時(shí),不需要重新設(shè)計(jì)模式,對(duì)于提取大型或巨型記錄而言,JSON對(duì)象顯得更為實(shí)用和高效[10]。在今后的工作中,將使用JSON對(duì)象替代關(guān)系數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)數(shù)據(jù)的研究。 參考文獻(xiàn)參考文獻(xiàn): [1]劉嘉琦,孫嘉成.使用JSON完成異構(gòu)系統(tǒng)間通訊的應(yīng)用研究[J].黑龍江科技信息,2016(19):127. [2]谷方舟,沈波.JSON數(shù)據(jù)交換格式在異構(gòu)系統(tǒng)集成中的應(yīng)用研究[J].鐵路計(jì)算機(jī)應(yīng)用,2012,21(2):14. [3]MOHD KAMIR YUSOF, MUSTAFA MAN. Efficiency of JSON approach for data extraction and query retrieval[J]. Indonesian Journal of Electrical Engineering and Computer Science,2016,4(1):203213. [4]張滬寅,屈乾松,胡瑞蕓.基于JSON的數(shù)據(jù)交換模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2016, 36(12):33803383. [5]朱建紅,陸保國(guó).基于對(duì)象序列化技術(shù)的數(shù)據(jù)分發(fā)系統(tǒng)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(1):4951. [6]倪睿熙.一種基于JSON的異構(gòu)數(shù)據(jù)查詢方法[J].無(wú)線電通信技術(shù),2013,39(1):7376. [7]仇小花,秦栓栓,邱果.基于Web開(kāi)發(fā)中的XML與JSON數(shù)據(jù)傳輸格式研究[J].信息技術(shù)與信息化,2017(4):123125. [8]李金來(lái),吳濤.基于JSON數(shù)據(jù)交換的移動(dòng)終端與服務(wù)器端異構(gòu)數(shù)據(jù)庫(kù)的數(shù)據(jù)交互[J].現(xiàn)代計(jì)算機(jī),2016(6):5557. [9]DUSAN PETKOVIC. JSON integration in relational database systems[J]. International Journal of Computer Applications,2017,168(5):1419. [10]高靜,段會(huì)川.JSON數(shù)據(jù)傳輸效率研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):22672270. 責(zé)任編輯(責(zé)任編輯:黃?。?