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