摘 要:ADONE是NE架構下的數據庫訪問技術,ADONE以XML作為傳遞和接收數據的格式,與ADO相比,它提供了更大的兼容性和靈活性。這里就其Web數據庫訪問提出一個性能優化模型,并對這些性能優化技術進行比較、討論和測試。通過對測試結果的分析可知,要開發出一種高效檢索和存取數據的APNE應用程序,應該優化ADONE數據訪問代碼,應用這樣的模式進行
Web應用程序開發,能大大提高對數據庫訪問的效率和性能。
關鍵詞:ADONE;性能;優化;模型
Analysis on Optimization Model of Ability of ADONE Used in Web
LIAO hirong
(Chengdu Vocational College of Agricultural cience and echnology,Chengdu,611130,China)
Abstract:ADONE is the database visiting technology under the NE frame,which takes XML as the format to transfer and receive data,and is more compatible and flexible compared with ADOhe article introduces an optimized performance mode,meanwhile makes a series of comparisons,discussions and tests between these optimized performance technologieshrough the analysis of the results,it is clear that we should optimize the visiting code of ADONE data and apply this mode to exploit Web application in order to get the APNE application and greatly improve the efficiency and performance of visiting database
Keywords:ADONE;performance;optimization;model
1 問題的提出
數據庫技術與Web技術相結合是當前應用的熱點,其中最關鍵的就是Web數據庫訪問技術。ADONE以ActiveX數據對象(ADO)為基礎,但與依賴于連接的ADO不同,ADONE是專門為了對數據存儲進行無連接數據訪問而設計的。
ADONE以XML(擴展標記語言)作為傳遞和接收數據的格式,與ADO相比,它提供了更大的兼容性和靈活性。當前的桌面應用程序大都推出B/版本,對于Web應用程序,需要大量的訪問數據庫,如何提高Web數據庫訪問的效率和性能,是一個現實問題。
本文就ADONE在數據存取方面的性能優化,如何得到更快、更可信的數據訪問代碼進行分析。
2 ADONE概述
ADONE對象模型有兩個核心組件:Dataet 和NE Framework,基本架構見圖1。
(1) NE Framework 數據提供程序
它是面向連接的,由一組對象組成,包括 Connection,Command,DataReader和DataAdapter 等核心對象。主要功能為:連接到數據源,以便檢索和修改數據源中的數據,并在數據源和 Dataet 之間起著橋梁的作用。
(2) Dataet
Dataet是ADONE的中心概念可以把Dataet當成內存中的數據庫,Dataet是不依賴于數據庫的獨立數據集合。即使斷開數據鏈路,或者關閉數據庫,Dataet依然是可用。Dataet在內部是用XML描述數據,由于XML是一種與平臺無關、與語言無關的數據描述語言,而且可以描述復雜關系的數據,所以Dataet可以容納具有復雜關系的數據,而且不在依賴于數據庫鏈路。Dataet 是數據的內存駐留表示形式,無論數據源是什么,它都會提供一致的關系編程模型;它可以用于多個不同的數據源,用于 XML 數據,或用于管理應用程序本地的數據。Dataet表示包括相關表、約束和表間關系在內的整個數據集,通過 DataAdapter 控制其與現有數據源的交互。
3 ADONE性能優化模型
要開發出一個能以有效的方式來檢索和存取數據的APNE應用程序,就應該編寫高效率高性能經過優化的ADONE數據訪問代碼,充分發揮ADONE的優勢。為達到這一目的,需要對ADONE的不同優化技術和使用方法進行全面的分析,并給出客觀的性能測試,特別是數據存取性能上。
ADONE數據訪問的性能優化內容如圖2所示,即:連接池的性能分析;NE數據提供程序選擇比較使用;DataReader,Dataet和Recordet的性能比較分析;存儲過程的性能分析;Dataet和DataReader的調用細節性能分析等。
31 連接池的性能分析
對于要訪問數據庫的APNE應用程序,需要建立到數據庫的連接并使用該連接進行數據存取。然而,與數據庫建立連接要花費相對較長的時間進行協商,數據庫連接也會消耗寶貴的系統資源如CPU處理能力、內存和網絡帶寬等。解決辦法:使用連接池技術(connection pooling),用來加速連接過程和避免浪費系統資源。連接池是一組簡單的帶有類似于連接字符串的連接。在開發一個多層應用程序時,有效地利用連接池可以提高應用程序的性能。圖3展示了一個帶連接池的多層應用程序。
ADONE中的連接池非常簡單,在ADONE中的每個NE數據提供程序(QL erver和OLE DB)都可實現連接池。當請求一個新連接時,NE數據提供程序會檢查該請求已提供的憑據(數據庫位置、用戶名等),并在池中以匹配憑據的方式搜索打開的連接,如果找到有這樣的一個連接,就將該連接遞交給該請求;否則就只有創建并返回一個新建的連接。
當關閉連接對象時,NE數據提供程序并不真正的關閉實際的數據庫連接。它將連接對象標記為已關閉,并將其存儲在連接池中。如果該數據庫連接在特定的時間內未被再次使用,NE數據提供程序就會真正的關閉此連接。
表1展示了有無連接池情況下,連續循環1 000次,建立連接(打開后馬上關閉)所需要的時間對比。
32 ADONE數據提供者比較
要訪問不同的數據源,選擇適當的數據提供者,對性能的影響很大。
NE數據提供者是處理特定類型的數據庫的一組類“集”。所有的數據提供者都必須提供一組基本的功能,但不同的數據提供者可能有許多額外的屬性和方法,只能被用來訪問某一特定的數據存儲。也就是說不同的數據提供者是對不同的數據存儲類型進行專門的優化,使得其訪問不同的數據源有不同的運行效率和性能。NE架構共提供了4種數據提供程序,他們是:QL Client,OLE DB,ODBC,Oracle Client 數據提供程序。其中QL Client數據提供程序是專門針對QL erver 70及以上版本作了優化。
QL ClientNE 數據提供程序:用于使用QL erver 70 及更高版本的中間層和單層應用程序;用于 QL erver 的 OLE DB 提供程序 (QLOLEDB) 與 OLE DBNE數據提供程序一起使用。OLE DB NE 數據提供程序:用于使用QL erver 6 或較早版本的中間層應用程序,或任何支持 OLE DBNE數據提供程序所使用的 OLE DB 接口中所列 OLE DB 接口(不支持 OLE DB 2 接口)的 OLE DB 提供程序;使用Access 數據庫的單層應用程序。ODBC NE數據提供程序:用于使用 ODBC 數據源的中間層應用程序和單層應用程序。OracleNE數據提供程序:用于使用 Oracle 數據源的中間層應用程序和單層應用程序;支持 Oracle 客戶端軟件 817 版和更高版本。
測試及分析:
分別用QL ClientNE,OLE DBNE,ODBCNE,OracleNE數據提供程序(由于不能訪問QL erver數據庫,未作考慮)分別去連接QL erver 數據庫,并完成相關的連接、檢索(簡單的)、更改操作,測試其運行的效率。完成3項的測試內容為:
分別連接數據庫所需時間,即cnnopen();分別從數據庫中去檢索出200 000條記錄所需的時間,采用的方式是用DataAdapter去將數據檢索出來并填充到相應的數據集(Dataet)中;分別對這200 000條記錄中每條記錄都更新一個字段值。通過命令的ExecuteNonQuery方法實現。運行結果見表2。
分析:從上表可以看出,QL ClientNE效率最高,OLE DBNE次之,ODBCNE最慢。當數據庫為QL erver 2000時,無論是在數據庫連接、數據提取、數據更新方面,QL ClientNE提供程序執行效率都比OLE DBNE提供程序和ODBCNE提供程序都具有非常明顯的優勢。因此當連接微軟QL erver數據庫時,建議采用QL ClientNE數據提供程序訪問數據庫;而對于ORACLE 數據庫,則采用OracleClientNE提供程序;對于ybase,Informix,DB2,Access等數據庫則采用OLE DBNE提供程序來連接。
33 存儲過程的性能優化
使用存儲過程與直接使用QL語句相比具有事務處理、執行速度、進程控制、安全性、減少網絡通信流量、模塊化等優勢。
對存儲過程的使用可以通過DataAdapter對象執行存儲過程將數據送到Dataet或送往數據庫;或直接通過Command對象執行存儲過程將數據送到DataReader、界面或數據庫中去。它們都可以使用參數對象向存儲過程傳遞參數。下面通過使用存儲過程和直接傳遞QL語句來進行測試比較:
將\"delete from publishers\"+\";\"+ \"insert publishers (pub_name,city,state,country) values(@pub_name,@city,@state,@country)\"+\";\"+\"update publishers set state=@state\"+\";\"+\"select from publishers\"。分別編寫存儲過程和直接使用QL語句分別執行 000次。運行結果見表3。
分析:其實上面的測試代碼并沒有完全發揮出存儲過程的優勢,但可以看出它們之間的性能差別。存儲過程通常是數據庫交互的首選方法,盡管存儲過程很多優點,但仍有某些情況不適合使用存儲過程。存儲過程存在的主要問題是可擴展性。
34 DataReader,Dataet和Recordet性能比較
DataReader提供對來自數據源的數據流的只讀,只向前訪問;主要用于讀取數據以填充像標簽、列表或者DataGrid之類的數據感知控件,并最小限度使用資源,適合Web應用程序(無狀態應用)。
Dataet專門針對斷開連接開發的,用作數據的本地存儲機制,為數據源提供一個本地的不連接的副本,通過DataAdapter與數據源保持同步,也可以用作獨立的數據存儲對象。主要用途:顯示復雜的數據(來自于多個數據源或者相關數據)、寫(編輯、創建、刪除、寫回)數據源中的數據。
Recordet:為目前大量存在的 使用ADO的應用程序而提供的向前兼容版本。
三種形式在APNE應用程序中的測試和分析:
測試內容:針對Northwind數據庫中的Orders和Order Details兩個表的內連來查詢數據。其中Orders表的記錄為830條。 使用QL servernet 提供程序連接QL erver。
循環100次測試的結果見表4。
對于Web應用程序而言,一般不會出現重復讀取完整的緩存中的數據集,因為Web應用程序這樣的無狀態的程序,是不能利用由Dataet提供的高速緩存。在APNE 中,DataReader效率最高,將數據從數據庫中提取到內存中,Dataet的填充最耗時,但如果對于桌面程序,可能要反復使用緩存中的數據,這時Dataet效率最高,因為它耗時最小,這也是Dataet為斷開的連接而開發的主要原因。
ADONE中不同的調用方法、屬性使用、數據類型使用都存在不同的性能差異。主要有:
(1) 基于名稱或序號對數據元素的訪問
使用基于名稱的訪問,DataReader要根據提供的字符串在其內部結構中定位該列,它要對結果集中的每行都要執行一個基于字符串的查找,必然浪費一定的性能;使用基于序號或索引的訪問,性能要高一些。
(2) 使用適當的類型指定Get方法
使用與結果集中列返回的數據相對應的類型指定Get方法,可以提高應用程序性能。如DataReaderInstanceGetValue(i)otring()與DataReaderInstanceGettring(i)在執行效率上是不同的。前者返回的是Object類型,還必須將其轉換為字符串數據。而后者直接返回的是字符串數據,無須轉換,性能當然會提高。
下面分別按名稱和索引循環從庫中取數據,結果見表。
數據測試結果見表所示,從測試數據也說明Dataet和DataReader在使用上的性能優化差異。
4 結 語
對于APNE應用程序而言,要開發出速度更快更可信的數據訪問代碼,提高數據訪問性能,應該就其模型進行優化,在連接池,NE數據提供者的選擇,存儲過程的使用,DataReader,Dataet和Recordet的選擇及其具體的調用方法等方面作出優化的選擇。從而使系統的性能得到改善。
參 考 文 獻
[1]John Kauffman,Brian MatsikAPNE數據庫入門經典-C#編程篇[M].張哲峰,黃翔宇,譯.北京:清華大學出版社,2003
[2][美]David ceppaADONE技術內幕[M]梁超,張莉,賀錕,譯北京:清華大學出版社,2003
[3]涂靜ADONE調用存儲過程的方法[J]電腦與信息技術,2003(3):33-36
[4]Microsoft Visual tudioNE 2003文檔[Z]2003
魏崢ADONE程序設計教程與實驗[M] 北京:清華大學出版社,2007
[6]David ceppaProgramming Microsoft ADONE 影印[M]北京:清華大學出版社,2003
[7]劉友華NE環境下數據庫應用系統開發技術[M]北京:科學出版社,2004
[8][美]巴克VBNE與ADONE數據庫編程[M]北京:機械工業出版社,2003
[9]田麗平基于APNE的科研管理信息系統的建立[J]內蒙古農業大學學報,2007(1):-7
[10][美]昌德APNE交互式Web數據庫程序設計[M]韓江,譯北京:電子工業出版社,200
[11]孔延香,李永忠,郭秀峰ADONE數據庫訪問技術研究與實現[J] 現代電子技術,200,16(29):1-2,9
作者簡介 廖世蓉 女,194年出生,副教授。研究方向為數據庫原理及應用。