王 韌, 朱金連 , 周 亮, 王 婷, 皮德常, 方黎明
(1.江蘇出入境檢驗檢疫局信息化處 江蘇 南京 200001;2.南京航空航天大學 計算機學院,江蘇 南京 210016)
目前企業(yè)級應用程序都是基于關(guān)系型數(shù)據(jù)庫進行數(shù)據(jù)存儲與管理是,關(guān)系數(shù)據(jù)庫管理系統(tǒng)采用存儲過程和觸發(fā)器的形式進行應用程序邏輯處理,并使用通用SQL語言存取數(shù)據(jù)與通過標準ODBC或JDBC標準化數(shù)據(jù)庫應用程序接口進行數(shù)據(jù)庫數(shù)據(jù)查詢,這種技術(shù)已經(jīng)完全融入到了企業(yè)級應用程序中,且應用程序離開了關(guān)系數(shù)據(jù)庫管理系統(tǒng)就無法正常運行。然而,隨著移動互聯(lián)網(wǎng)技術(shù)發(fā)展與移動用戶數(shù)量的增長,應用程序和數(shù)據(jù)管理逐步向“可移動化”發(fā)展,雖然如:Palm OS和 Window CE平臺支持本地文件系統(tǒng)管理數(shù)據(jù),但由于文件中的數(shù)據(jù)存儲不支持SQL查詢,需要人工將列表中的數(shù)據(jù)轉(zhuǎn)換成可自定義數(shù)據(jù)存儲與檢索格式,如何實現(xiàn)移動應用程序與企業(yè)應用程序間的有效數(shù)據(jù)管理與如何有效進行移動平臺數(shù)據(jù)庫訪問已經(jīng)成為了當前面臨的問題。
1)中間件概念
中間件主要是位于應用層與數(shù)據(jù)層間的由API定義的軟件層,主要負責不兼容操作系統(tǒng)、數(shù)據(jù)庫、文件系統(tǒng)間的數(shù)據(jù)通信與上下層通信服務的獨立[1]。
中間件作為一個獨立部分可以在多個平臺上進行實現(xiàn)、部署,提供很好的跨平臺的交互能力,應用程序在中間件提供的環(huán)境中可以更好地集中于業(yè)務邏輯上,最終自然而然地在異構(gòu)環(huán)境中實現(xiàn)良好的協(xié)同工作。中間件的使用減少了系統(tǒng)平臺的差異性對業(yè)務系統(tǒng)開發(fā)的過多影響,并為應用軟件的平滑演進提供一個堅實的基礎(chǔ)。
2)中間件分類
中間件類型主要包括數(shù)據(jù)庫中間件、遠程調(diào)用中間件、對象請求代理、事務處理管理中間件、專用中間件、面向消息中間件[2]。遠程調(diào)用中間件采用基于客戶機/服務器模式實現(xiàn)本地應用程訪問遠程數(shù)據(jù)庫,同時將遠程數(shù)據(jù)庫執(zhí)行的結(jié)果獲取到本地中;面向消息中間件主要是采用基于消息傳遞和消息隊列管理模式實現(xiàn)客戶機與服務器間的數(shù)據(jù)同步或者異步傳輸,通過該中間件可以實現(xiàn)網(wǎng)絡(luò)中斷環(huán)境下客戶端與服務端間的數(shù)據(jù)一致性;對象請求代理則采用分布式請求或服務信息處理方式實現(xiàn)非結(jié)構(gòu)或非關(guān)系數(shù)據(jù)庫間數(shù)據(jù)交互;事務處理管理中間件則主要是用于多用戶、分布式數(shù)據(jù)庫環(huán)境控制管理;專用中間件主要大型客戶機/服務器使用的專用中間件;數(shù)據(jù)庫中間件位于客戶機與數(shù)據(jù)庫之間的應用層,起到客戶機與數(shù)據(jù)庫間的數(shù)據(jù)交互與弱化客戶端數(shù)據(jù)處理的作用,同時通過對中間件增強數(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服務器與CGI應用程序數(shù)據(jù)傳遞標準,CGI部署在應用服務器中,同時目前所有Web服務器都支持CGI標準。在CGI接口中,當客戶端通過瀏覽器訪問服務器時[1],首先調(diào)用CGI接口進行服務器數(shù)據(jù)訪問,服務器則將數(shù)據(jù)處理結(jié)果通過WebService返回給客戶端,由于CGI采用為每個請求創(chuàng)建一個CGI程序?qū)嵗瑢е庐斁哂邢嗤樵儗嵗龝r也需要建立獨立CGI程序?qū)嵗瑹o法實現(xiàn)多個客戶請求共享,也容易導致服務器資源大量消耗。
2)WebAPI
WebAPI數(shù)據(jù)庫中間件主要是以DLL方式運行的ASNPI和ISAPI,其內(nèi)部中的地址都不相同,當客戶端發(fā)起的ULR地址相同情況下WebAPI提供了可調(diào)用數(shù)據(jù)操作進程,加速了數(shù)據(jù)庫服務器通信效率和性能,但通過WebAPI部署的中間件智能用于基于WEB的服務器上,可移植性低;
3)DJBC 技術(shù)
DJBC技術(shù)主要采用基于Java語言的書庫訪問接口,DJBC通過數(shù)據(jù)庫通用驅(qū)動管理器調(diào)用具體的數(shù)據(jù)庫驅(qū)動程序執(zhí)行SQL語句,并根據(jù)底層操作系統(tǒng)的環(huán)境自動選擇驅(qū)動程序,其具有很好的跨平臺性與可移植性,但由于Java的性能問題,其DJBC訪問數(shù)據(jù)效率很低[2]。
移動數(shù)據(jù)庫中間件就有可移植性、集成、易于擴充、使用簡單等特點。移動數(shù)據(jù)庫中間件屏蔽了底層通信協(xié)議與操作系統(tǒng)細節(jié),只需要對中間件進行配置就可以實現(xiàn)與底層通信,而當應用程序需要使用底層服務時,只需要將中間件中的服務寫入應用程序中即可,無需要對集成環(huán)境做大量代碼修改,同時當中間件的功能無法滿足應用程序需求時,可以通過中間件功能擴展方法增強中間件能力,數(shù)據(jù)庫中間件還可以實現(xiàn)各種數(shù)據(jù)源的統(tǒng)一訪問方法。
一般情況下,移動數(shù)據(jù)庫融合了復制、緩存、數(shù)據(jù)廣播、位置管理、查詢處理與優(yōu)化技術(shù)[4]。移動終端中的數(shù)據(jù)同步主要通過管道(conduit)進行處理,當用戶在應用程序中點擊提交或者Sync按鈕時,基于系統(tǒng)中的DLL或者COM對象的管道軟件會自動調(diào)用系統(tǒng)數(shù)據(jù)庫操作數(shù)據(jù),并通過調(diào)用ODBC/JDBC中間件技術(shù)同步到企業(yè)級應用程序更新數(shù)據(jù)庫。但隨著不同移動終端的出現(xiàn),要實現(xiàn)應用程序如能被Windows CE支持也要被手提電腦支持,其數(shù)據(jù)庫應用程序接口就需要使用3個數(shù)據(jù)庫模塊,例如在移動電腦中使用JDBC/ODBC/ADO數(shù)據(jù)庫模塊,在OS系統(tǒng)中使用Palm數(shù)據(jù)庫應用程序接口,在Windows CE中使用ADOCE數(shù)據(jù)庫訪問接口,以及要實現(xiàn)3個數(shù)據(jù)模塊互相通信的服務器TCP/IP套接子接口等。為了實現(xiàn)移動應用數(shù)據(jù)庫的跨平臺支持,可以采用如 C/C++、JAVA等流行語言編寫移動應用程序或者采用跨平臺中間件技術(shù)實現(xiàn)不同平臺底層數(shù)據(jù)操作與管理,并采用服務端數(shù)據(jù)合并與同步化解決方案實現(xiàn)數(shù)據(jù)一致性管理。
移動數(shù)據(jù)庫在移動終端中主要承擔了數(shù)據(jù)管理、查詢處理、交換管理等功能,在進行移動數(shù)據(jù)庫設(shè)計時需要重點考慮數(shù)據(jù)類型、響應時間、備份與恢復,同時也需要支持并發(fā)數(shù)據(jù)操作與數(shù)據(jù)安全管理。
本研究中的中間件應用用于和檢驗檢疫局原有核心業(yè)務系統(tǒng)對接。通過接口交互,可從原業(yè)務系統(tǒng)獲取業(yè)務數(shù)據(jù)信息,并將“國檢通”系統(tǒng)處理后的業(yè)務數(shù)據(jù)同步至原系統(tǒng)。
移動計算系統(tǒng)是服務端采用固定節(jié)點與客戶端采用移動節(jié)點構(gòu)成了分布式計算結(jié)構(gòu),客戶端具有可移動性、斷接性、弱可靠性等特點,其移動環(huán)境下的數(shù)據(jù)庫就是移動數(shù)據(jù)庫,與應用程序相結(jié)合共同形成了動態(tài)連接的分布式系統(tǒng)。其移動應用數(shù)據(jù)庫中間件結(jié)構(gòu)如圖1所示。

圖1 移動數(shù)據(jù)庫中間件結(jié)構(gòu)Fig.1 Mobile database middleware structure
在移動數(shù)據(jù)庫中間件結(jié)構(gòu)中,當上層應用需要與底層移動操作系統(tǒng)、外圍系統(tǒng)、移動數(shù)據(jù)庫交互信息時,首先中間件判斷上層應用程序需要調(diào)用的服務,如數(shù)據(jù)訪問,則中間件通過數(shù)據(jù)訪問組件調(diào)用數(shù)據(jù)訪問DAO組件實現(xiàn)與移動數(shù)據(jù)庫數(shù)據(jù)訪問,同時若應用程序需要調(diào)用遠程數(shù)據(jù)庫[3],則也可以通過數(shù)據(jù)訪問組件調(diào)用遠程數(shù)據(jù)庫,若上層應用程序通過傳輸中間件調(diào)用遠程組件,若首先調(diào)用中間件中的傳輸封裝組件接口,然后中間件自動調(diào)用壓縮組件和傳輸組件進行數(shù)據(jù)收發(fā)。這樣移動應用程序就不需要關(guān)系發(fā)送數(shù)據(jù)信息的底層細節(jié),只需要向互聯(lián)網(wǎng)用戶一樣調(diào)用底層服務即可。在移動數(shù)據(jù)庫中間件中,為了支持移動設(shè)備與移動應用程序的差異性,數(shù)據(jù)庫中間件支持通過XML服務實現(xiàn)組件功能調(diào)用、數(shù)據(jù)轉(zhuǎn)換,移動數(shù)據(jù)庫中間件服務組件啟動時會自動加載XML服務,通過XML加載移動設(shè)備軟硬件信息,并更加硬件設(shè)備不同自動選擇最優(yōu)配置,實現(xiàn)在不同制式和設(shè)備信息交互時提供不同層次的服務水平。
由于移動數(shù)據(jù)庫首先要與數(shù)據(jù)庫建立連接,然后才能發(fā)送SQL語句并執(zhí)行該語句,當數(shù)據(jù)處理結(jié)束后數(shù)據(jù)庫自動關(guān)閉該連接,由于移動應用程序有時存在多個應用程序同時調(diào)用一個移動數(shù)據(jù)庫的環(huán)境,當多個應用程序需要同時調(diào)用一個移動數(shù)據(jù)時,由于建立多個會話,其數(shù)據(jù)庫工作效率會降低。在本論文中,移動數(shù)據(jù)庫中間件中已經(jīng)包含了連接移動數(shù)據(jù)庫的 Connnection 類、Statement類、ResultSet類[5],分別描述了移動應用程序創(chuàng)建數(shù)據(jù)庫連接、提交SQL語句、包含了處理數(shù)據(jù)庫執(zhí)行結(jié)果反饋ResultSet類[4]。移動數(shù)據(jù)庫中間件中利用3個基礎(chǔ)類完成數(shù)據(jù)庫連接的過程,在移動數(shù)據(jù)中間件中首先利用Class.forName加載支持本移動設(shè)備的數(shù)據(jù)庫驅(qū)動程序,然后利用DriverManager.getConnection函數(shù)創(chuàng)建移動數(shù)據(jù)庫連接Connection實例,接著利用Connection.createStatement方法創(chuàng)建移動數(shù)據(jù)庫Statement實例,最后分別利用 executeUpdate、executeQuery、ResultSet執(zhí)行應用程序提交的SQL,完成數(shù)據(jù)更新、查詢、結(jié)果反饋等操作[6]。
而當移動應用程序數(shù)據(jù)操作涉及遠程數(shù)據(jù)調(diào)用時,移動應用程序通過數(shù)據(jù)訪問組件中的webdataQuery類實現(xiàn)服務端數(shù)據(jù)調(diào)用,其調(diào)用方法如圖3所示,在圖3中中間件首先通過中間件傳輸組件調(diào)用遠程企業(yè)應用Webservices應用程序模塊,由企業(yè)應用WEB應用程序完成遠端數(shù)據(jù)操作[5],其操作結(jié)果由webservices返回,并通過XML服務組件進行數(shù)據(jù)格式轉(zhuǎn)換,然后更新到移動數(shù)據(jù)庫中。

圖2 遠程調(diào)用流程Fig.2 Remote call process
文中主要探討了基于中間件的移動數(shù)據(jù)庫設(shè)計,利用中間件技術(shù)處理移動數(shù)據(jù)庫在移動終端和網(wǎng)絡(luò)的不可靠性下的數(shù)據(jù)處理,提高了移動應用程序的擴展性、健壯性的需求。
[1]錢文海,賀元啟.基于數(shù)據(jù)復制技術(shù)的移動數(shù)據(jù)庫系統(tǒng)[J].計算機應用研究,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移動和嵌入式數(shù)據(jù)庫的同步技術(shù)[J].中原工學院學報是,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]王彤,王良.嵌入式移動數(shù)據(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.