張滬寅,屈乾松,胡瑞蕓
(武漢大學(xué) 計(jì)算機(jī)學(xué)院,湖北 武漢430000)
目前國(guó)內(nèi)外大部分?jǐn)?shù)據(jù)交換系統(tǒng)[1-4]都是基于可擴(kuò)展標(biāo)記語(yǔ)言 (extensible markup language,XML)按照自有的標(biāo)準(zhǔn)來(lái)設(shè)計(jì),在數(shù)據(jù)交換效率、通用性與擴(kuò)展性上較差。本文提出了一種基于JavaScript對(duì)象表示法 (JavaScript object notation,JSON) “中心+代理”的數(shù)據(jù)交換模型,采用JSON 作為總線技術(shù),數(shù)據(jù)交換中心作為架構(gòu)中心,數(shù)據(jù)交換代理節(jié)點(diǎn)提供代理服務(wù)的星型結(jié)構(gòu)模式,在提高數(shù)據(jù)交換效率的同時(shí),也具備很高的通用性與擴(kuò)展性。
傳統(tǒng)的基于XML的異構(gòu)數(shù)據(jù)交換具有良好的數(shù)據(jù)存儲(chǔ)格式、可擴(kuò)展性、自描述性、高度結(jié)構(gòu)化等優(yōu)點(diǎn),成為了目前各系統(tǒng)間和系統(tǒng)內(nèi)部信息共享的有效手段。文獻(xiàn) [1-4]都是在XML的基礎(chǔ)上對(duì)數(shù)據(jù)交換平臺(tái)的研究,分別在安全性與實(shí)用性做出了改進(jìn),但基于XML數(shù)據(jù)交換也存在著某些不足,如數(shù)據(jù)冗余性高、解析速率慢、瀏覽器不兼容等問(wèn)題,使得數(shù)據(jù)在網(wǎng)絡(luò)傳輸中的速度較慢,在客戶端解析也較為麻煩。
JSON 是一種能夠代替XML 的輕量級(jí)數(shù)據(jù)交換格式,不同的文獻(xiàn)也給出了JSON 在數(shù)據(jù)交換應(yīng)用中的優(yōu)勢(shì)以及可行性。文獻(xiàn) [5]給出了JSON 與XML 在傳輸效率方面的對(duì)比研究,在擴(kuò)展性和可讀性上與XML相當(dāng),但在數(shù)據(jù)傳輸效率和解析難度上遠(yuǎn)優(yōu)于XML;文獻(xiàn) [6]探討了使用輕量級(jí)的JSON 作為數(shù)據(jù)傳輸格式的可行性;文獻(xiàn) [7]給出了在地理信息數(shù)據(jù)交換方面JSON 的應(yīng)用。
目前數(shù)據(jù)交換模型的架構(gòu)設(shè)計(jì)多是采用 “代理+服務(wù)器”的思想。文獻(xiàn) [8]基于SOA 的數(shù)據(jù)交換平臺(tái),提出了 “代理+服務(wù)器”的模式,使系統(tǒng)層次結(jié)構(gòu)清晰,極大地降低了系統(tǒng)研發(fā)的難度;文獻(xiàn) [9]給出了在分布式系統(tǒng)中基于SOA 平臺(tái)技術(shù)的數(shù)據(jù)交換的研究,在JMS的技術(shù)基礎(chǔ)上實(shí)現(xiàn)了數(shù)據(jù)交換平臺(tái)。
在此基礎(chǔ)上,本文提出的基于JSON “中心+代理”的數(shù)據(jù)交換模型是一個(gè)全新的模型,將要交換的數(shù)據(jù)轉(zhuǎn)換成JSON 信息流,在數(shù)據(jù)交換代理節(jié)點(diǎn)之間建立可靠的連接,對(duì)信息流進(jìn)行傳輸,數(shù)據(jù)交換中心對(duì)信息流進(jìn)行上傳、下載以及實(shí)時(shí)監(jiān)控,系統(tǒng)層次清晰,在保證了通用性的同時(shí)也大大提高了數(shù)據(jù)交換效率。
模型在總體上以JSON 作為總線技術(shù),數(shù)據(jù)交換中心(data exchange center,DEC)作為架構(gòu)中心,數(shù)據(jù)交換代理節(jié)點(diǎn) (data exchange agent node,DEAN)提供代理服務(wù)的設(shè)計(jì)結(jié)構(gòu)。整個(gè)體系結(jié)構(gòu)為星型結(jié)構(gòu),DEC 處于中心位置,它是實(shí)現(xiàn)數(shù)據(jù)交換的中心,它通過(guò)標(biāo)準(zhǔn)的Web Service接口為每個(gè)DEAN 提供服務(wù)。數(shù)據(jù)交換的過(guò)程就是,各個(gè)應(yīng)用系統(tǒng)以DEAN 作為代理接口與DEC進(jìn)行消息與數(shù)據(jù)的交換,所有消息與數(shù)據(jù)的交換均為JSON 信息流。模型的總體結(jié)構(gòu)如圖1所示。
圖1 數(shù)據(jù)交換模型總體架構(gòu)
DEAN 是整個(gè)數(shù)據(jù)交換模型的主要組成部分,它是連接各個(gè)應(yīng)用系統(tǒng)的橋梁,每一個(gè)DEAN 負(fù)責(zé)一種數(shù)據(jù)庫(kù)系統(tǒng)的代理。它的主要功能是捕獲應(yīng)用系統(tǒng)的交互事件、封裝信息流、與DEC交互。這里,信息流包括消息與數(shù)據(jù)兩部分,消息則包括數(shù)據(jù)交互雙方代理結(jié)點(diǎn)的信息、數(shù)據(jù)交互的操作信息等,數(shù)據(jù)則是要上傳或下載的數(shù)據(jù)。信息流的組成如圖2所示。
圖2 信息流的組成
信息流的通用JSON 格式為: {“MESSAGE”: [],“DATA”:[]}。
DEC是整個(gè)數(shù)據(jù)交換模型的核心,主要功能是信息流的解析、信息的應(yīng)答交互管理、數(shù)據(jù)的上傳/下載、服務(wù)監(jiān)控等。信息流的解析是指DEC 根據(jù)信息流的消息 (頭部)建立起兩個(gè)要交互代理結(jié)點(diǎn)的數(shù)據(jù)傳輸通道,并確定傳輸?shù)姆绞?(比如數(shù)據(jù)插入、更新等),這樣可以保證數(shù)據(jù)傳輸?shù)目煽啃?。信息的?yīng)答交互管理是基于 “請(qǐng)求+應(yīng)答”的模式,在數(shù)據(jù)交換的前期,數(shù)據(jù)發(fā)送方以 “請(qǐng)求”的方式向數(shù)據(jù)接收方發(fā)起數(shù)據(jù)交換的連接,收到接收方的 “應(yīng)答”后,開始進(jìn)行信息流的傳輸,發(fā)送方上傳數(shù)據(jù),接收方下載數(shù)據(jù)。服務(wù)監(jiān)控是指DEC要對(duì)交換過(guò)程進(jìn)行監(jiān)控,記錄數(shù)據(jù)傳輸?shù)娜罩?,?dāng)數(shù)據(jù)傳輸發(fā)生癱瘓時(shí)可以及時(shí)恢復(fù),保證數(shù)據(jù)傳輸?shù)陌踩?。功能流程如圖3所示。
因此DEC的整體行為就像一個(gè)虛擬的中心數(shù)據(jù)庫(kù),同時(shí)又像一個(gè)交換機(jī),信息流以JSON 在可靠的信道中傳輸,從源節(jié)點(diǎn)到目的節(jié)點(diǎn)。整個(gè)數(shù)據(jù)交換的底層實(shí)現(xiàn)對(duì)各應(yīng)用節(jié)點(diǎn)是透明的,該結(jié)構(gòu)耦合性低,并且很容易擴(kuò)展為層次的雪花型結(jié)構(gòu),構(gòu)建為多級(jí)的數(shù)據(jù)交換中心結(jié)構(gòu),以支持更大范圍的廣域方案。當(dāng)增加一種數(shù)據(jù)庫(kù)類型時(shí),只需要建立一個(gè)對(duì)應(yīng)的代理結(jié)點(diǎn)連接到DEC即可。
數(shù)據(jù)交換的流程包括:建立連接、信息流封裝、數(shù)據(jù)上傳/下載、服務(wù)監(jiān)控、會(huì)話結(jié)束。
圖3 功能流程
應(yīng)用系統(tǒng)間建立數(shù)據(jù)交換的連接采用的是 “請(qǐng)求+應(yīng)答”的模式,數(shù)據(jù)交換的發(fā)送方通過(guò)對(duì)應(yīng)的DEAN 向DEC發(fā)送一條請(qǐng)求的ASK 信息流,DEC通過(guò)與數(shù)據(jù)接收方的交互獲得應(yīng)答請(qǐng)求的ANSWER 信息流并返回給發(fā)送方,此時(shí)建立連接完成。如圖4所示。
圖4 數(shù)據(jù)交換建立連接過(guò)程
ASK 信息流的消息部分主要包括發(fā)送方代理節(jié)點(diǎn)SEND_ID、接收方代理節(jié)點(diǎn)RESERVER_ID、信號(hào)量ASK (初始化為0,表示發(fā)送請(qǐng)求),若DEC找到對(duì)應(yīng)的接收方DEAN 的服務(wù),DEC 將信號(hào)量ASK 置為1并發(fā)送到對(duì)應(yīng)的代理節(jié)點(diǎn),接收方DEAN 收到ASK=1 的信號(hào)量后,發(fā)送一個(gè)ANSWER=1的信號(hào)量給DEC,DEC再轉(zhuǎn)發(fā)給發(fā)送方DEAN,發(fā)送方DEAN 收到ANSWER=1的信號(hào)量,則知道建立連接成功。若DEC 未找到對(duì)應(yīng)的接收方DEAN,則直接返回ANSWER=0的信號(hào)量,告訴發(fā)送方建立連接失敗。
例如:ASK 信息流的JSON 表示片段為:
在數(shù)據(jù)交換中信息流的封裝包括消息的封裝與數(shù)據(jù)的封裝,消息包括發(fā)送方代理節(jié)點(diǎn)SERD_ID、接收方代理節(jié)點(diǎn)REVERSER_ID、業(yè)務(wù)類型BUSSINESS_TYPE、上傳時(shí)間UPLOAD_DATE等。數(shù)據(jù)的封裝是發(fā)送方代理節(jié)點(diǎn)通過(guò)調(diào)用JDBC得到源數(shù)據(jù)的數(shù)據(jù)集ResultSetMetaData,將其轉(zhuǎn)化為JSON 格式數(shù)據(jù),具體方法如下:
數(shù)據(jù)的上傳/下載實(shí)質(zhì)就是發(fā)送方將源數(shù)據(jù)上傳到緩沖池,DEC將源數(shù)據(jù)轉(zhuǎn)換為目的數(shù)據(jù),提供給接收方下載的過(guò)程。采用緩沖池來(lái)實(shí)現(xiàn),緩沖池是一個(gè)固定大小的隊(duì)列,當(dāng)緩沖池未滿時(shí),發(fā)送方將源數(shù)據(jù)放入緩沖池,緩沖池滿時(shí),發(fā)送方將處于阻塞狀態(tài),等待緩沖池的資源,當(dāng)超過(guò)最長(zhǎng)等待時(shí)間時(shí)發(fā)送方給服務(wù)監(jiān)控系統(tǒng)發(fā)送一個(gè)異常消息,交由服務(wù)監(jiān)控系統(tǒng)處理。如圖5所示。
圖5 數(shù)據(jù)上傳/下載過(guò)程
采用緩沖池的目的是為了避免同時(shí)處理大量數(shù)據(jù)的交換,每次只對(duì)緩沖池里的數(shù)據(jù)進(jìn)行交換,緩解了系統(tǒng)的壓力,同時(shí)也有利于數(shù)據(jù)的恢復(fù),當(dāng)數(shù)據(jù)交換過(guò)程出錯(cuò)時(shí),只需要對(duì)當(dāng)前緩沖池里的數(shù)據(jù)進(jìn)行恢復(fù)即可。
數(shù)據(jù)交換的過(guò)程:傳統(tǒng)基于XML 數(shù)據(jù)交換采用的是XML相關(guān)技術(shù),如XSLT、XPath 技術(shù)等。而JSON 格式目前沒(méi)用相關(guān)的技術(shù)對(duì)其進(jìn)行轉(zhuǎn)換,本文采用文獻(xiàn) [10]提到的方案,用普通表格來(lái)存儲(chǔ)各種數(shù)據(jù)庫(kù)類型的映射關(guān)系,如需增加一種數(shù)據(jù)庫(kù)類型,添加一列即可,該方案具有很強(qiáng)的可擴(kuò)展性,見表1。
表1 數(shù)據(jù)庫(kù)中常見的數(shù)據(jù)類型映射
下面給出數(shù)據(jù)類型轉(zhuǎn)換的偽代碼:
服務(wù)監(jiān)控是指對(duì)交換過(guò)程進(jìn)行監(jiān)控,記錄數(shù)據(jù)傳輸?shù)娜罩?,?dāng)數(shù)據(jù)傳輸發(fā)生癱瘓時(shí)可以及時(shí)恢復(fù),保證數(shù)據(jù)傳輸?shù)陌踩?。服?wù)監(jiān)控包括兩個(gè)部分:日志記錄與異常處理。日志記錄保存了系統(tǒng)在運(yùn)行過(guò)程中的重要信息,異常處理保證了系統(tǒng)在出現(xiàn)異常時(shí)能及時(shí)恢復(fù)。
日志記錄的過(guò)程:①發(fā)送方在上傳一條源數(shù)據(jù)到緩沖池前,要填寫一個(gè)待發(fā)的日志信息到日志系統(tǒng)中。②DEC根據(jù)日志系統(tǒng)中待發(fā)消息記錄來(lái)對(duì)緩沖池中的源數(shù)據(jù)進(jìn)行數(shù)據(jù)交換。③數(shù)據(jù)交換完成后,要向日志系統(tǒng)中發(fā)送一條交換成功的日志消息,然后通知接收方去下載目的數(shù)據(jù)。④接收方下載完數(shù)據(jù)后,向日志系統(tǒng)發(fā)送一條接收成功的消息。
異常處理就是當(dāng)服務(wù)監(jiān)控系統(tǒng)收到一條異常消息時(shí),會(huì)根據(jù)日志系統(tǒng)里的消息記錄進(jìn)行相應(yīng)的處理,例如:重新對(duì)緩沖池里的數(shù)據(jù)進(jìn)行數(shù)據(jù)交換,或者通知發(fā)送方重新發(fā)送一條源數(shù)據(jù)等。
當(dāng)發(fā)送方的源數(shù)據(jù)全部上傳完成后,會(huì)發(fā)送一條請(qǐng)求結(jié)束會(huì)話的消息FIN MESSAGE到日志系統(tǒng),DEC 收到發(fā)送方的FIN MESSAGE后暫不做處理,讓發(fā)送方處于等待結(jié)束狀態(tài)WAIT CLOSED,并等待接收方下載完成后通知接收方數(shù)據(jù)已經(jīng)全部下載,此時(shí),接收方也發(fā)送一條FIN MESSAGE到日志系統(tǒng)請(qǐng)求結(jié)束會(huì)話,當(dāng)DEC 收到接收方的FIN MESSAGE后向雙方同時(shí)發(fā)送結(jié)束會(huì)話的通知FIN ACK,并斷開連接,此時(shí)會(huì)話結(jié)束。
實(shí)驗(yàn)對(duì)某局在線考試系統(tǒng)中的數(shù)據(jù)集進(jìn)行數(shù)據(jù)交換,記錄相應(yīng)的數(shù)據(jù)交換時(shí)間,實(shí)驗(yàn)環(huán)境為:Eclipse、Oracle數(shù)據(jù)庫(kù)、Mysql數(shù)據(jù)庫(kù)、Firefox瀏覽器。實(shí)驗(yàn)描述了模型中單點(diǎn)對(duì)單點(diǎn)的數(shù)據(jù)交換過(guò)程 (ORCALE 代理節(jié)點(diǎn)到MYSQL代理節(jié)點(diǎn)的數(shù)據(jù)交換),分別用XML 和JSON 作為傳輸流進(jìn)行實(shí)驗(yàn)對(duì)比。利用web services實(shí)現(xiàn)數(shù)據(jù)交換中心與數(shù)據(jù)交換代理節(jié)點(diǎn)的主要功能,包括DataToXml、DataToJson、數(shù)據(jù)流的傳輸、數(shù)據(jù)格式轉(zhuǎn)換等,分別建立簡(jiǎn)單的基于XML 與JSON 的數(shù)據(jù)交換平臺(tái)。經(jīng)過(guò)分析知道,數(shù)據(jù)交換總時(shí)間主要包括:數(shù)據(jù)封裝時(shí)間、數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時(shí)間、數(shù)據(jù)轉(zhuǎn)換時(shí)間,實(shí)驗(yàn)主要記錄這4類數(shù)據(jù)的對(duì)比。針對(duì)3種不同大小的數(shù)據(jù)集,得到的實(shí)驗(yàn)結(jié)果如圖6所示。
圖6 實(shí)驗(yàn)結(jié)果
由圖6 (a)可以看出,在封裝時(shí)間上XML與JSON 差別不大,這與處理的方式有關(guān),封裝XML 的技術(shù)相對(duì)于JSON 比較成熟。由圖6 (b)可以看出,在傳輸時(shí)間上,JSON 要遠(yuǎn)優(yōu)于XML,差別也非常明顯,這也體現(xiàn)了JSON作為輕量級(jí)數(shù)據(jù)格式在網(wǎng)絡(luò)傳輸中的優(yōu)勢(shì)。由圖6 (c)可以看出,在轉(zhuǎn)換時(shí)間上,JSON 也要優(yōu)于XML,這是由于JSON 的解析要比XML 更加簡(jiǎn)單。由圖6 (d)可以看出,在總時(shí)間上,JSON 也要優(yōu)于XML,并隨著數(shù)據(jù)集的增大,優(yōu)勢(shì)越明顯。
本文通過(guò)建立 “中心+代理”的數(shù)據(jù)交換模型,用JSON 信息流來(lái)傳輸要交換的數(shù)據(jù),既提高了數(shù)據(jù)交換的效率,又具有較高的通用性,適合于各種不同數(shù)據(jù)庫(kù)系統(tǒng)之間的數(shù)據(jù)交換,同時(shí)也具有較強(qiáng)的擴(kuò)展性,當(dāng)有新的數(shù)據(jù)庫(kù)系統(tǒng)接入時(shí)只需要添加對(duì)應(yīng)的代理節(jié)點(diǎn)即可。模型實(shí)現(xiàn)的數(shù)據(jù)交換過(guò)程也類似于網(wǎng)絡(luò)通信的過(guò)程,包括建立連接、數(shù)據(jù)交換、日志記錄和結(jié)束會(huì)話,易于理解。本文將JSON作為數(shù)據(jù)交換平臺(tái)的總線是一個(gè)創(chuàng)新,將JSON 與其它技術(shù)相結(jié)合其優(yōu)勢(shì)會(huì)更加突出,如AJAX、FLEX 技術(shù)、緩存技術(shù)等,這將會(huì)是接下來(lái)的研究方向,相信在不久的將來(lái)JSON 在數(shù)據(jù)交換方面的應(yīng)用將更加廣泛和成熟。
[1]HU Nengfa,TANG Weiping.General heterogeneous data exchange model based on XML [J].Computer Engineering and Design,2010,31 (8):1743-1745 (in Chinese). [胡能發(fā),唐為萍.基于XML的通用異構(gòu)數(shù)據(jù)交換模型 [J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31 (8):1743-1745.]
[2]HAO Shaohua,HAN Xie.Heterogeneous relational database integration model based on XML [J].Computer Engineering and Design,2010,31 (24):5285-5288 (in Chinese).[郝少華,韓燮.基于XML技術(shù)的異構(gòu)關(guān)系數(shù)據(jù)庫(kù)集成模型 [J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31 (24):5285-5288.]
[3]SUN Teng,SUN Anjian.Data exchange platform for e-government integration based on XML [J].Computer Applications and Software,2012,29 (5):188-190 (in Chinese).[孫騰,孫安健.基于XML 數(shù)據(jù)交換的電子政務(wù)系統(tǒng)集成[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29 (5):188-190.]
[4]Bojańczyk M,Koodziejczyk L A,Murlak F.Solutions in XML data exchange[C]//Proceedings of the 14th International Conference on Database Theory.ACM,2011:102-113.
[5]GAO Jing,DUAN Huichuan.Research on data transmission efficiency of JSON [J].Computer Engineering and Design,2011,32 (7):2267-2270 (in Chinese). [高 靜,段 會(huì) 川.JSON 數(shù)據(jù)傳輸效率研究 [J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(7):2267-2270.]
[6]GU Fangzhou,SHEN Bo.Application study on JSON data exchange format in integration of heterogeneous system [J].Railway Computer Application,2012,21 (2):1-4 (in Chinese).[谷方舟,沈波.JSON 數(shù)據(jù)交換格式在異構(gòu)系統(tǒng)集成中的應(yīng)用研究 [J].鐵路計(jì)算機(jī)應(yīng)用,2012,21 (2):1-4.]
[7]HAN Min,F(xiàn)ENG Hao.Research of the method of geographic information data exchange based on JSON [J].Science of Surveying and Mapping,2010,35 (1):159-161 (in Chinese).[韓敏,馮浩.基于JSON 的地理信息數(shù)據(jù)交換方法研究 [J].測(cè)繪科學(xué),2010,35 (1):159-161.]
[8]YANG Li,LIAN Dongben.Design of data exchange platform based on SOA [J].Computer Systems &Applications,2011,20(5):30-33(in Chinese).[楊麗,廉東本.基于SOA 的數(shù)據(jù)交換平臺(tái)設(shè)計(jì)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20 (5):30-33.]
[9]LI Yanchun,LI Xin,JIAO Wenbin.Design and implementation of data exchange platform for distributed information system [J].Computer Engineering and Design,2012,33 (7):2640-2645 (in Chinese).[李艷春,李新,焦文彬.分布式信息系統(tǒng)中數(shù)據(jù)交換平臺(tái)設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33 (7):2640-2645.]
[10]SHEN Fengxian,ZHU Qiaoming,LIU Zhao,et al.Migration method of database management system based on JDBC and XML [J].Computer Engineering and Design,2008,29(20):5376-5378 (in Chinese). [沈鳳仙,朱 巧 明,劉 釗,等.基于JDBC和XML的數(shù)據(jù)庫(kù)系統(tǒng)遷移方法 [J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29 (20):5376-5378.]