王 韌, 朱金連 , 周 亮, 王 婷, 皮德常, 方黎明
(1.江蘇出入境檢驗(yàn)檢疫局信息化處 江蘇 南京 200001;2.南京航空航天大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210016)
目前企業(yè)級(jí)應(yīng)用程序都是基于關(guān)系型數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲(chǔ)與管理是,關(guān)系數(shù)據(jù)庫管理系統(tǒng)采用存儲(chǔ)過程和觸發(fā)器的形式進(jìn)行應(yīng)用程序邏輯處理,并使用通用SQL語言存取數(shù)據(jù)與通過標(biāo)準(zhǔn)ODBC或JDBC標(biāo)準(zhǔn)化數(shù)據(jù)庫應(yīng)用程序接口進(jìn)行數(shù)據(jù)庫數(shù)據(jù)查詢,這種技術(shù)已經(jīng)完全融入到了企業(yè)級(jí)應(yīng)用程序中,且應(yīng)用程序離開了關(guān)系數(shù)據(jù)庫管理系統(tǒng)就無法正常運(yùn)行。然而,隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)發(fā)展與移動(dòng)用戶數(shù)量的增長,應(yīng)用程序和數(shù)據(jù)管理逐步向“可移動(dòng)化”發(fā)展,雖然如:Palm OS和 Window CE平臺(tái)支持本地文件系統(tǒng)管理數(shù)據(jù),但由于文件中的數(shù)據(jù)存儲(chǔ)不支持SQL查詢,需要人工將列表中的數(shù)據(jù)轉(zhuǎn)換成可自定義數(shù)據(jù)存儲(chǔ)與檢索格式,如何實(shí)現(xiàn)移動(dòng)應(yīng)用程序與企業(yè)應(yīng)用程序間的有效數(shù)據(jù)管理與如何有效進(jìn)行移動(dòng)平臺(tái)數(shù)據(jù)庫訪問已經(jīng)成為了當(dāng)前面臨的問題。
1)中間件概念
中間件主要是位于應(yīng)用層與數(shù)據(jù)層間的由API定義的軟件層,主要負(fù)責(zé)不兼容操作系統(tǒng)、數(shù)據(jù)庫、文件系統(tǒng)間的數(shù)據(jù)通信與上下層通信服務(wù)的獨(dú)立[1]。
中間件作為一個(gè)獨(dú)立部分可以在多個(gè)平臺(tái)上進(jìn)行實(shí)現(xiàn)、部署,提供很好的跨平臺(tái)的交互能力,應(yīng)用程序在中間件提供的環(huán)境中可以更好地集中于業(yè)務(wù)邏輯上,最終自然而然地在異構(gòu)環(huán)境中實(shí)現(xiàn)良好的協(xié)同工作。中間件的使用減少了系統(tǒng)平臺(tái)的差異性對(duì)業(yè)務(wù)系統(tǒng)開發(fā)的過多影響,并為應(yīng)用軟件的平滑演進(jìn)提供一個(gè)堅(jiān)實(shí)的基礎(chǔ)。
2)中間件分類
中間件類型主要包括數(shù)據(jù)庫中間件、遠(yuǎn)程調(diào)用中間件、對(duì)象請(qǐng)求代理、事務(wù)處理管理中間件、專用中間件、面向消息中間件[2]。遠(yuǎn)程調(diào)用中間件采用基于客戶機(jī)/服務(wù)器模式實(shí)現(xiàn)本地應(yīng)用程訪問遠(yuǎn)程數(shù)據(jù)庫,同時(shí)將遠(yuǎn)程數(shù)據(jù)庫執(zhí)行的結(jié)果獲取到本地中;面向消息中間件主要是采用基于消息傳遞和消息隊(duì)列管理模式實(shí)現(xiàn)客戶機(jī)與服務(wù)器間的數(shù)據(jù)同步或者異步傳輸,通過該中間件可以實(shí)現(xiàn)網(wǎng)絡(luò)中斷環(huán)境下客戶端與服務(wù)端間的數(shù)據(jù)一致性;對(duì)象請(qǐng)求代理則采用分布式請(qǐng)求或服務(wù)信息處理方式實(shí)現(xiàn)非結(jié)構(gòu)或非關(guān)系數(shù)據(jù)庫間數(shù)據(jù)交互;事務(wù)處理管理中間件則主要是用于多用戶、分布式數(shù)據(jù)庫環(huán)境控制管理;專用中間件主要大型客戶機(jī)/服務(wù)器使用的專用中間件;數(shù)據(jù)庫中間件位于客戶機(jī)與數(shù)據(jù)庫之間的應(yīng)用層,起到客戶機(jī)與數(shù)據(jù)庫間的數(shù)據(jù)交互與弱化客戶端數(shù)據(jù)處理的作用,同時(shí)通過對(duì)中間件增強(qiáng)數(shù)據(jù)并行處理與改善安全性能。
數(shù)據(jù)庫中間件種類包括通用網(wǎng)關(guān)接口 CGI、WebAPI、DJBC 技術(shù)[3]。
1)通用網(wǎng)關(guān)接口CGI
通用網(wǎng)關(guān)接口CGI主要是用于WEB服務(wù)器與CGI應(yīng)用程序數(shù)據(jù)傳遞標(biāo)準(zhǔn),CGI部署在應(yīng)用服務(wù)器中,同時(shí)目前所有Web服務(wù)器都支持CGI標(biāo)準(zhǔn)。在CGI接口中,當(dāng)客戶端通過瀏覽器訪問服務(wù)器時(shí)[1],首先調(diào)用CGI接口進(jìn)行服務(wù)器數(shù)據(jù)訪問,服務(wù)器則將數(shù)據(jù)處理結(jié)果通過WebService返回給客戶端,由于CGI采用為每個(gè)請(qǐng)求創(chuàng)建一個(gè)CGI程序?qū)嵗?,?dǎo)致當(dāng)具有相同查詢實(shí)例時(shí)也需要建立獨(dú)立CGI程序?qū)嵗?,無法實(shí)現(xiàn)多個(gè)客戶請(qǐng)求共享,也容易導(dǎo)致服務(wù)器資源大量消耗。
2)WebAPI
WebAPI數(shù)據(jù)庫中間件主要是以DLL方式運(yùn)行的ASNPI和ISAPI,其內(nèi)部中的地址都不相同,當(dāng)客戶端發(fā)起的ULR地址相同情況下WebAPI提供了可調(diào)用數(shù)據(jù)操作進(jìn)程,加速了數(shù)據(jù)庫服務(wù)器通信效率和性能,但通過WebAPI部署的中間件智能用于基于WEB的服務(wù)器上,可移植性低;
3)DJBC 技術(shù)
DJBC技術(shù)主要采用基于Java語言的書庫訪問接口,DJBC通過數(shù)據(jù)庫通用驅(qū)動(dòng)管理器調(diào)用具體的數(shù)據(jù)庫驅(qū)動(dòng)程序執(zhí)行SQL語句,并根據(jù)底層操作系統(tǒng)的環(huán)境自動(dòng)選擇驅(qū)動(dòng)程序,其具有很好的跨平臺(tái)性與可移植性,但由于Java的性能問題,其DJBC訪問數(shù)據(jù)效率很低[2]。
移動(dòng)數(shù)據(jù)庫中間件就有可移植性、集成、易于擴(kuò)充、使用簡單等特點(diǎn)。移動(dòng)數(shù)據(jù)庫中間件屏蔽了底層通信協(xié)議與操作系統(tǒng)細(xì)節(jié),只需要對(duì)中間件進(jìn)行配置就可以實(shí)現(xiàn)與底層通信,而當(dāng)應(yīng)用程序需要使用底層服務(wù)時(shí),只需要將中間件中的服務(wù)寫入應(yīng)用程序中即可,無需要對(duì)集成環(huán)境做大量代碼修改,同時(shí)當(dāng)中間件的功能無法滿足應(yīng)用程序需求時(shí),可以通過中間件功能擴(kuò)展方法增強(qiáng)中間件能力,數(shù)據(jù)庫中間件還可以實(shí)現(xiàn)各種數(shù)據(jù)源的統(tǒng)一訪問方法。
一般情況下,移動(dòng)數(shù)據(jù)庫融合了復(fù)制、緩存、數(shù)據(jù)廣播、位置管理、查詢處理與優(yōu)化技術(shù)[4]。移動(dòng)終端中的數(shù)據(jù)同步主要通過管道(conduit)進(jìn)行處理,當(dāng)用戶在應(yīng)用程序中點(diǎn)擊提交或者Sync按鈕時(shí),基于系統(tǒng)中的DLL或者COM對(duì)象的管道軟件會(huì)自動(dòng)調(diào)用系統(tǒng)數(shù)據(jù)庫操作數(shù)據(jù),并通過調(diào)用ODBC/JDBC中間件技術(shù)同步到企業(yè)級(jí)應(yīng)用程序更新數(shù)據(jù)庫。但隨著不同移動(dòng)終端的出現(xiàn),要實(shí)現(xiàn)應(yīng)用程序如能被Windows CE支持也要被手提電腦支持,其數(shù)據(jù)庫應(yīng)用程序接口就需要使用3個(gè)數(shù)據(jù)庫模塊,例如在移動(dòng)電腦中使用JDBC/ODBC/ADO數(shù)據(jù)庫模塊,在OS系統(tǒng)中使用Palm數(shù)據(jù)庫應(yīng)用程序接口,在Windows CE中使用ADOCE數(shù)據(jù)庫訪問接口,以及要實(shí)現(xiàn)3個(gè)數(shù)據(jù)模塊互相通信的服務(wù)器TCP/IP套接子接口等。為了實(shí)現(xiàn)移動(dòng)應(yīng)用數(shù)據(jù)庫的跨平臺(tái)支持,可以采用如 C/C++、JAVA等流行語言編寫移動(dòng)應(yīng)用程序或者采用跨平臺(tái)中間件技術(shù)實(shí)現(xiàn)不同平臺(tái)底層數(shù)據(jù)操作與管理,并采用服務(wù)端數(shù)據(jù)合并與同步化解決方案實(shí)現(xiàn)數(shù)據(jù)一致性管理。
移動(dòng)數(shù)據(jù)庫在移動(dòng)終端中主要承擔(dān)了數(shù)據(jù)管理、查詢處理、交換管理等功能,在進(jìn)行移動(dòng)數(shù)據(jù)庫設(shè)計(jì)時(shí)需要重點(diǎn)考慮數(shù)據(jù)類型、響應(yīng)時(shí)間、備份與恢復(fù),同時(shí)也需要支持并發(fā)數(shù)據(jù)操作與數(shù)據(jù)安全管理。
本研究中的中間件應(yīng)用用于和檢驗(yàn)檢疫局原有核心業(yè)務(wù)系統(tǒng)對(duì)接。通過接口交互,可從原業(yè)務(wù)系統(tǒng)獲取業(yè)務(wù)數(shù)據(jù)信息,并將“國檢通”系統(tǒng)處理后的業(yè)務(wù)數(shù)據(jù)同步至原系統(tǒng)。
移動(dòng)計(jì)算系統(tǒng)是服務(wù)端采用固定節(jié)點(diǎn)與客戶端采用移動(dòng)節(jié)點(diǎn)構(gòu)成了分布式計(jì)算結(jié)構(gòu),客戶端具有可移動(dòng)性、斷接性、弱可靠性等特點(diǎn),其移動(dòng)環(huán)境下的數(shù)據(jù)庫就是移動(dòng)數(shù)據(jù)庫,與應(yīng)用程序相結(jié)合共同形成了動(dòng)態(tài)連接的分布式系統(tǒng)。其移動(dòng)應(yīng)用數(shù)據(jù)庫中間件結(jié)構(gòu)如圖1所示。
圖1 移動(dòng)數(shù)據(jù)庫中間件結(jié)構(gòu)Fig.1 Mobile database middleware structure
在移動(dòng)數(shù)據(jù)庫中間件結(jié)構(gòu)中,當(dāng)上層應(yīng)用需要與底層移動(dòng)操作系統(tǒng)、外圍系統(tǒng)、移動(dòng)數(shù)據(jù)庫交互信息時(shí),首先中間件判斷上層應(yīng)用程序需要調(diào)用的服務(wù),如數(shù)據(jù)訪問,則中間件通過數(shù)據(jù)訪問組件調(diào)用數(shù)據(jù)訪問DAO組件實(shí)現(xiàn)與移動(dòng)數(shù)據(jù)庫數(shù)據(jù)訪問,同時(shí)若應(yīng)用程序需要調(diào)用遠(yuǎn)程數(shù)據(jù)庫[3],則也可以通過數(shù)據(jù)訪問組件調(diào)用遠(yuǎn)程數(shù)據(jù)庫,若上層應(yīng)用程序通過傳輸中間件調(diào)用遠(yuǎn)程組件,若首先調(diào)用中間件中的傳輸封裝組件接口,然后中間件自動(dòng)調(diào)用壓縮組件和傳輸組件進(jìn)行數(shù)據(jù)收發(fā)。這樣移動(dòng)應(yīng)用程序就不需要關(guān)系發(fā)送數(shù)據(jù)信息的底層細(xì)節(jié),只需要向互聯(lián)網(wǎng)用戶一樣調(diào)用底層服務(wù)即可。在移動(dòng)數(shù)據(jù)庫中間件中,為了支持移動(dòng)設(shè)備與移動(dòng)應(yīng)用程序的差異性,數(shù)據(jù)庫中間件支持通過XML服務(wù)實(shí)現(xiàn)組件功能調(diào)用、數(shù)據(jù)轉(zhuǎn)換,移動(dòng)數(shù)據(jù)庫中間件服務(wù)組件啟動(dòng)時(shí)會(huì)自動(dòng)加載XML服務(wù),通過XML加載移動(dòng)設(shè)備軟硬件信息,并更加硬件設(shè)備不同自動(dòng)選擇最優(yōu)配置,實(shí)現(xiàn)在不同制式和設(shè)備信息交互時(shí)提供不同層次的服務(wù)水平。
由于移動(dòng)數(shù)據(jù)庫首先要與數(shù)據(jù)庫建立連接,然后才能發(fā)送SQL語句并執(zhí)行該語句,當(dāng)數(shù)據(jù)處理結(jié)束后數(shù)據(jù)庫自動(dòng)關(guān)閉該連接,由于移動(dòng)應(yīng)用程序有時(shí)存在多個(gè)應(yīng)用程序同時(shí)調(diào)用一個(gè)移動(dòng)數(shù)據(jù)庫的環(huán)境,當(dāng)多個(gè)應(yīng)用程序需要同時(shí)調(diào)用一個(gè)移動(dòng)數(shù)據(jù)時(shí),由于建立多個(gè)會(huì)話,其數(shù)據(jù)庫工作效率會(huì)降低。在本論文中,移動(dòng)數(shù)據(jù)庫中間件中已經(jīng)包含了連接移動(dòng)數(shù)據(jù)庫的 Connnection 類、Statement類、ResultSet類[5],分別描述了移動(dòng)應(yīng)用程序創(chuàng)建數(shù)據(jù)庫連接、提交SQL語句、包含了處理數(shù)據(jù)庫執(zhí)行結(jié)果反饋ResultSet類[4]。移動(dòng)數(shù)據(jù)庫中間件中利用3個(gè)基礎(chǔ)類完成數(shù)據(jù)庫連接的過程,在移動(dòng)數(shù)據(jù)中間件中首先利用Class.forName加載支持本移動(dòng)設(shè)備的數(shù)據(jù)庫驅(qū)動(dòng)程序,然后利用DriverManager.getConnection函數(shù)創(chuàng)建移動(dòng)數(shù)據(jù)庫連接Connection實(shí)例,接著利用Connection.createStatement方法創(chuàng)建移動(dòng)數(shù)據(jù)庫Statement實(shí)例,最后分別利用 executeUpdate、executeQuery、ResultSet執(zhí)行應(yīng)用程序提交的SQL,完成數(shù)據(jù)更新、查詢、結(jié)果反饋等操作[6]。
而當(dāng)移動(dòng)應(yīng)用程序數(shù)據(jù)操作涉及遠(yuǎn)程數(shù)據(jù)調(diào)用時(shí),移動(dòng)應(yīng)用程序通過數(shù)據(jù)訪問組件中的webdataQuery類實(shí)現(xiàn)服務(wù)端數(shù)據(jù)調(diào)用,其調(diào)用方法如圖3所示,在圖3中中間件首先通過中間件傳輸組件調(diào)用遠(yuǎn)程企業(yè)應(yīng)用Webservices應(yīng)用程序模塊,由企業(yè)應(yīng)用WEB應(yīng)用程序完成遠(yuǎn)端數(shù)據(jù)操作[5],其操作結(jié)果由webservices返回,并通過XML服務(wù)組件進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,然后更新到移動(dòng)數(shù)據(jù)庫中。
圖2 遠(yuǎn)程調(diào)用流程Fig.2 Remote call process
文中主要探討了基于中間件的移動(dòng)數(shù)據(jù)庫設(shè)計(jì),利用中間件技術(shù)處理移動(dòng)數(shù)據(jù)庫在移動(dòng)終端和網(wǎng)絡(luò)的不可靠性下的數(shù)據(jù)處理,提高了移動(dòng)應(yīng)用程序的擴(kuò)展性、健壯性的需求。
[1]錢文海,賀元啟.基于數(shù)據(jù)復(fù)制技術(shù)的移動(dòng)數(shù)據(jù)庫系統(tǒng)[J].計(jì)算機(jī)應(yīng)用研究,2012(7):34-35.QIAN Wen-hai,HE Yuan-qi.The mobile database system based on the data replication technology[J].Computer Application Research,2012(7):34-35.
[2]王宗江,樂嘉錦.Sybase移動(dòng)和嵌入式數(shù)據(jù)庫的同步技術(shù)[J].中原工學(xué)院學(xué)報(bào)是,2012(1):123-124.WANGZong-jiang,LE Jia-jin.Sybase mobile and embedded database synchronization technology[J].Journal of Zhongyuan Institute of Technology,2012(1):123-124.
[3]王彤,王良.嵌入式移動(dòng)數(shù)據(jù)庫的綜述及評(píng)價(jià)[J].計(jì)算機(jī)工程,2011(12):34-35.WANG Tong,WANG Liang.Review and evaluation of the embedded mobile database[J].Computer Engineering,2011(12):34-35.
[4]Imielinski T,Viswanathan S,Badrinath B.R.Energy efficient indexing on air[C]//Proceedings of International Conference on Management of Data,2010.
[5]S.Acharya,M.Franklin and S.Zdonik.Dissemination-based data delivery using broadcast disks[C]//IEEE Personal Communications,2009.
[6]Andrea Bono.Historical seismometry database project:A comprehensive relational database for historical seismic records[J].Computers&Geosciences,2007:45-46.