李曉杰
【摘要】基于WEB的數(shù)據(jù)庫訪問技術(shù),在各具體業(yè)務(wù)應(yīng)用與底層用戶數(shù)據(jù)庫間建立一種可擴(kuò)展、可移植,具有較強(qiáng)伸縮性的統(tǒng)一的對(duì)外接口,以有效地支撐業(yè)務(wù)網(wǎng)絡(luò)應(yīng)用。
【關(guān)鍵詞】WEB;數(shù)據(jù)庫訪問技術(shù)
1.引言
在三層C/S中應(yīng)用程序訪問數(shù)據(jù)庫服務(wù)器都需要一定的數(shù)據(jù)訪問技術(shù)的支持。從總體上數(shù)據(jù)訪問技術(shù)可以分為數(shù)據(jù)訪問接口和數(shù)據(jù)訪問對(duì)象兩部分 ,兩者之間的關(guān)系如圖1所示。
圖1 數(shù)據(jù)訪問技術(shù)關(guān)系圖
數(shù)據(jù)訪問接口:提供一組標(biāo)準(zhǔn)化接口(數(shù)據(jù)庫引擎),允許應(yīng)用程序訪問不同類型的數(shù)據(jù)庫管理系統(tǒng)。如ODBC,JDBC,OLE DB等;數(shù)據(jù)訪問對(duì)象:提供用于通過數(shù)據(jù)庫訪問接口訪問數(shù)據(jù)庫管理系統(tǒng)的通用標(biāo)準(zhǔn)對(duì)象,不受應(yīng)用程序開發(fā)語言的限制,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的連接、增加、刪除和查詢等操作。如常見的有DAO,RDO,ADO,ADO.NET等對(duì)象模型。在數(shù)據(jù)訪問技術(shù)研究初期,不同的數(shù)據(jù)庫廠商都會(huì)提供不同的數(shù)據(jù)訪問接口,開發(fā)人員需要針對(duì)不同的數(shù)據(jù)庫管理系統(tǒng)(DBMS)學(xué)習(xí)不同的專用數(shù)據(jù)庫訪問技術(shù),比如 DB2系統(tǒng)的 CLI Library、Oracle 的 OCI Library等。這對(duì)開發(fā)人員造成了極大的困惑,使得數(shù)據(jù)庫應(yīng)用程序的開發(fā)很困難,影響開發(fā)進(jìn)度;而且所開發(fā)的應(yīng)用程序局限性很大,嚴(yán)重依賴于數(shù)據(jù)庫平臺(tái),不利于應(yīng)用程序的跨數(shù)據(jù)庫平臺(tái)移植。
2.通用基于WEB數(shù)據(jù)庫訪問技術(shù)
信息化時(shí)代,網(wǎng)絡(luò)和信息管理高速發(fā)展,數(shù)據(jù)庫技術(shù)日臻成熟,功能日趨完善,而網(wǎng)絡(luò)和數(shù)據(jù)庫之間的關(guān)聯(lián)與應(yīng)用日益緊密,用戶對(duì)信息的要求隨之也要達(dá)到高標(biāo)準(zhǔn)的實(shí)時(shí)性與交互性,因此WEB服務(wù)器與數(shù)據(jù)庫技術(shù)的結(jié)合顯得格外重要。數(shù)據(jù)庫訪問中間件技術(shù)出現(xiàn)一改傳統(tǒng)兩層結(jié)構(gòu),采取C/S三層結(jié)構(gòu),充分發(fā)揮了WEB技術(shù)和數(shù)據(jù)庫技術(shù)二者結(jié)合的綜合優(yōu)勢(shì)與潛力,提高了性能、訪問效率和安全性。常見的基于WEB的數(shù)據(jù)庫訪問技術(shù)分為以下幾種:
2.1 CGI技術(shù)
CGI即通用網(wǎng)關(guān)接口,是Web服務(wù)器與應(yīng)用程序交互傳遞信息的一種標(biāo)準(zhǔn)接口。CGI的工作原理是客戶端瀏覽器通過URL向Web服務(wù)器提出請(qǐng)求,服務(wù)器的守護(hù)進(jìn)程將此請(qǐng)求傳給相應(yīng)CGI程序進(jìn)行處理,然后CGI將處理結(jié)果返回客戶端瀏覽器。CGI優(yōu)點(diǎn):通用性強(qiáng),基本支持所有HTTP服務(wù)器,交互能力強(qiáng),跨平臺(tái)性能極佳,操作簡單靈活。CGI缺點(diǎn):應(yīng)用程序通常獨(dú)立執(zhí)行,客戶共享性差,內(nèi)存資源占用率高,執(zhí)行速度相對(duì)慢,運(yùn)行效率偏低。另外CGI不具備事務(wù)處理的功能特點(diǎn),使得其應(yīng)用受到一定限制。
2.2 WebAPI
API是應(yīng)用編程接口,它是數(shù)據(jù)庫程序的關(guān)鍵組件,每種數(shù)據(jù)庫一般都帶有動(dòng)態(tài)鏈接庫,同時(shí)也配置專屬調(diào)用接口。針對(duì)CGI缺點(diǎn),Web服務(wù)器供應(yīng)商們開發(fā)了各自專用Web服務(wù)器的API應(yīng)用編程接口,目前比較流行的是微軟開發(fā)的ISAPI和Netscape開發(fā)的NSAPI。Netscape同時(shí)提供專門設(shè)計(jì)的Livewire,它是全面開發(fā)方案,研發(fā)人員可開發(fā)管理WWW網(wǎng)點(diǎn)和WWW界面,可使用SQL語句或ODBC來直接訪問相關(guān)數(shù)據(jù)庫;Microsoft的ISAPI以DLL形式提供,是動(dòng)態(tài)連接庫,通過ODBC訪問相關(guān)數(shù)據(jù)庫,主要以IDC文件形式發(fā)送。WebAPI工作原理是通過WEB交互式主頁獲取用戶請(qǐng)求,然后提交服務(wù)器后端處理。優(yōu)點(diǎn):運(yùn)行效率較高,資源可高效分配使用。缺點(diǎn):開發(fā)難度大,可移植性差,應(yīng)用程序運(yùn)行環(huán)境嚴(yán)格,缺乏通用性。
2.3 ODBC
ODBC即開放數(shù)據(jù)庫互連,是微軟創(chuàng)建的一個(gè)有關(guān)數(shù)據(jù)庫的通用標(biāo)準(zhǔn)接口。ODBC的工作原理是Web服務(wù)器通過ODBC向數(shù)據(jù)庫發(fā)出SQL請(qǐng)求,屬于標(biāo)準(zhǔn)SQL查詢,數(shù)據(jù)管理系統(tǒng)在執(zhí)行SQL查詢后將結(jié)果傳回Web服務(wù)器。ODBC組成部件包括 Application、Administrator、Driver Manager、ODBC API、ODBC驅(qū)動(dòng)程序DLL、數(shù)據(jù)源。優(yōu)點(diǎn):能用統(tǒng)一方式處理所有類型數(shù)據(jù)庫。因生成的程序相對(duì)獨(dú)立,故開發(fā)人員無需了解產(chǎn)品細(xì)節(jié)即可編寫程序,提供極大的方便性。缺點(diǎn):訪問方式較慢,使用范圍受限制。
2.4 OLE_DB
OLE_DB全稱對(duì)象連接和嵌入數(shù)據(jù)庫,是微軟開發(fā)的應(yīng)用程序接口,OLE DB基于ODBC之上建立, 訪問對(duì)象范圍更加廣泛,包括關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫。OLE在實(shí)現(xiàn)桌 面應(yīng)用程 序集成的同時(shí),還定義實(shí)現(xiàn)了一種連接機(jī)制,允許應(yīng)用程序作 為軟件對(duì)象彼此進(jìn)行連接。
OLE DB的數(shù)據(jù)庫操作模型由客戶與服務(wù)器組成,客戶指應(yīng)用程序,通過OLE DB接口數(shù)據(jù)源進(jìn)行訪問與控制;服務(wù)器是提供OLE DB接口的軟件組件,按照提供的內(nèi)容可分成服務(wù)器提供程序和數(shù)據(jù)提供程序。
OLE DB包括一組COM接口,分別對(duì)應(yīng)各種類型的數(shù)據(jù)庫管理系統(tǒng)。構(gòu)成OLE DB的每一個(gè)組件是一個(gè)COM對(duì)象,每個(gè)組件分別輸出一系列接口。OLE DB的組件組成有:枚舉器、數(shù)據(jù)源對(duì)象、會(huì)話、事務(wù)對(duì)象、命令對(duì)象、行集、錯(cuò)誤對(duì)象。OLE DB優(yōu)點(diǎn)是 訪問速度高,效率高。
2.5 JDBC
JDBC是Java數(shù)據(jù)庫連接,Java提供的一種標(biāo)準(zhǔn)應(yīng)用程序編程接口,JDBC定義了Java與數(shù)據(jù)庫之間的一系列類和接口,均由Java語言編寫。數(shù)據(jù)庫開發(fā)人員可通過它用純Java語言編寫完整的應(yīng)用程序,建立與數(shù)據(jù)庫的鏈接,并且將執(zhí)行處理的SQL語句非常方便地傳送至各種數(shù)據(jù)庫。JDBC寫的程序能夠自動(dòng)將SQL語句傳送給相應(yīng)的數(shù)據(jù)庫管理系統(tǒng),不必為每種數(shù)據(jù)庫的平臺(tái)編寫不同的程序。
JDBC對(duì)數(shù)據(jù)庫訪問的過程是:請(qǐng)求與數(shù)據(jù)庫建立連接,向數(shù)據(jù)庫發(fā)送SQL請(qǐng)求,為結(jié)果集定義存儲(chǔ)應(yīng)用和數(shù)據(jù)類型,查詢結(jié)果,處理錯(cuò)誤,控制傳輸,提交及關(guān)閉連接。簡單點(diǎn)說就是用戶通過WEB發(fā)出請(qǐng)求,通過JDBC接口連接數(shù)據(jù)庫處理請(qǐng)求,然后再將結(jié)果返回用戶瀏覽器。JDBC 技術(shù)優(yōu)勢(shì):可操作性強(qiáng),可維護(hù)性強(qiáng),使用效率高,安全性及事務(wù)處理能力高。
3.專用網(wǎng)絡(luò)數(shù)據(jù)庫訪問技術(shù)
一般來說,每種數(shù)據(jù)庫都具備專用web數(shù)據(jù)庫訪問技術(shù),因其專用性故效率頗高。在數(shù)據(jù)庫行業(yè)里,Oracle 提供了行業(yè)領(lǐng)先的業(yè)務(wù)流程管理(BPM)和業(yè)務(wù)流程自動(dòng)化(BPA) 產(chǎn)品,有助企業(yè)提高效率與可視性,積極推動(dòng)實(shí)現(xiàn)卓越的客戶服務(wù)與運(yùn)營,并促進(jìn)實(shí)現(xiàn)新一代的面向服務(wù)的SOA體系結(jié)構(gòu)的價(jià)值。因Oracle 的極強(qiáng)優(yōu)越性,現(xiàn)在通信行業(yè)的業(yè)務(wù)支撐系統(tǒng)都使用Oracle數(shù)據(jù)庫作為用戶數(shù)據(jù)庫。
3.1 SQL*Net概述
ORACLE數(shù)據(jù)庫具有極強(qiáng)網(wǎng)絡(luò)功能,它支持多種網(wǎng)絡(luò)協(xié)議,如TCP/IP、X.25、SPX/IPX等,支持異種數(shù)據(jù)庫互聯(lián)、異種網(wǎng)絡(luò)協(xié)議互聯(lián)。SQL*Net是在Oracle特有的TNS技術(shù)上發(fā)展起來的網(wǎng)絡(luò)中間件產(chǎn)品軟件。ORACLE支持流行的C/S體系結(jié)構(gòu)方式,使得應(yīng)用與數(shù)據(jù)庫核心分布處理,極大地提高了資源的利用率和處理效率。Ct/S的Server端安放ORACLE Server;Client端安放用戶界面程序或ORACLE 的Client端產(chǎn)品,如SQL*Plus;SQL*Net是ORACLE的網(wǎng)絡(luò)軟件,通過SQL*Net可以實(shí)現(xiàn)Client與Server的連接,SQL*Net是建立在某一網(wǎng)絡(luò)協(xié)議之上的網(wǎng)絡(luò)中間件產(chǎn)品。
3.2 SQL*Net網(wǎng)絡(luò)功能
SQL*Net提供的網(wǎng)絡(luò)功能包括網(wǎng)絡(luò)透明性、自動(dòng)字符集轉(zhuǎn)換、異種機(jī)網(wǎng)絡(luò)、協(xié)議獨(dú)立性、位置透明。網(wǎng)絡(luò)透明性指在一個(gè)本地?cái)?shù)據(jù)庫基礎(chǔ)上開發(fā)的應(yīng)用,可以不必修改就分布到網(wǎng)絡(luò)上去運(yùn)行;自動(dòng)字符集轉(zhuǎn)換指兩個(gè)通訊節(jié)點(diǎn)之間不同的字符集和國際語言支持?jǐn)?shù)據(jù)描述可以通SQL*Net來管理;異種機(jī)網(wǎng)絡(luò)指通過多協(xié)議轉(zhuǎn)換來實(shí)現(xiàn)多種網(wǎng)絡(luò)協(xié)議之間的互聯(lián);協(xié)議獨(dú)立性是指在任何一臺(tái)計(jì)算機(jī)上編制的應(yīng)用,都可以不必修改就分布到任何協(xié)議的網(wǎng)絡(luò)上去運(yùn)行;位置透明是指通過位置透明的策略,可以使網(wǎng)絡(luò)中的數(shù)據(jù),如同放在單一本地?cái)?shù)據(jù)庫中一樣使用,若數(shù)據(jù)分布發(fā)生變化,應(yīng)用程序不必作任何修改。
3.3 SQL*Net的C/S結(jié)構(gòu)系統(tǒng)配置
在客戶/服務(wù)器結(jié)構(gòu)下,通信的兩端不論是客戶端或服務(wù)器端都需配置SQL*Net中介軟件,服務(wù)器端在數(shù)據(jù)庫主機(jī)上還需啟動(dòng)一個(gè)偵聽程序(listener),以便能夠不斷偵聽所有來自網(wǎng)絡(luò)各地的客戶端聯(lián)機(jī)請(qǐng)求。偵聽程序處理客戶端聯(lián)機(jī)請(qǐng)求的做法有以下類型:
(1)專用服務(wù)器:當(dāng)偵聽程序受到一個(gè)客戶端聯(lián)機(jī)請(qǐng)求時(shí),偵聽程序新啟動(dòng)一個(gè)專用服務(wù)器程序負(fù)責(zé)服務(wù)用戶程序的各項(xiàng)要求,并將執(zhí)行結(jié)果傳回給用戶程序。整個(gè)通信過程,專用服務(wù)器程序與用戶程序通過SQL*Net來對(duì)話。
(2)多線程服務(wù)器:當(dāng)偵聽程序受到一個(gè)客戶端聯(lián)機(jī)請(qǐng)求時(shí),偵聽程序?qū)⒂脩舫绦蜻B接到一個(gè)已預(yù)先啟動(dòng)的共享調(diào)度程序(Shared Dispatcher)上,此共享調(diào)度程序負(fù)責(zé)接受用戶程序的各項(xiàng)要求,并將之放入要求隊(duì)列,共享服務(wù)器從隊(duì)列中取出數(shù)據(jù)加以執(zhí)行,然后將執(zhí)行結(jié)果放至響應(yīng)隊(duì)列中,同享調(diào)度程序再自響應(yīng)隊(duì)列中取得數(shù)據(jù)后傳回給客戶端,整個(gè)通信過程,專用服務(wù)器程序與用戶程序通過 SQL*Net來對(duì)話。
參考文獻(xiàn)
[1]劉一,李玲.跨數(shù)據(jù)庫中間件在ERP中的應(yīng)用[J].RFID 世界網(wǎng),2011(01).
[2]Oracle Company.Oracle 10g數(shù)據(jù)庫應(yīng)用教程[J].移動(dòng)通信,2009(10).
[3]郭亞,劉曉晴.基于WEB技術(shù)的自助服務(wù)開發(fā)平臺(tái)[J].中國金融電腦,2003(12).