——JDBC 篇(一)
驅動程序的選擇
在企業級的Java應用中
訪問數據庫是一個必備的環節
數據庫作為數據資源的集散地
往往位於企業級軟件體系的後方
供前方的應用程序訪問
在Java技術的體系中
應用程序是通過JDBC(Java Database Connectivity)接口來訪問數據庫的
JDBC支持
建立連接
SQL語句查詢
處理結果
等基本功能
在應用JDBC接口訪問數據庫的過程中
只要根據規范來操作
這些功能的實現不會出差錯
但是
有些時候進行數據查詢的效率著實讓開發人員懊惱不已
明明根據規范編寫的程序
卻得不到預期的運行效果
造成了整個軟件的執行效率不高
訪問數據庫的性能主要有兩個因素決定
一是數據庫服務器本身的性能
如數據庫管理系統
數據庫結構的設計
其二就是與數據庫相對獨立的JDBC應用編程接口(API)的使用也很大程度上影響著JDBC程序的性能
前一點不屬於我們討論的范圍
我們不做詳細論述
JDBC數據庫訪問機制
圖一
圖二
· 圖一左邊的分支稱為Type
驅動模式
即通常由Sun公司提供的JDBC
ODBC橋
加上一個ODBC驅動
它提供了經由一種或多種ODBC驅動進行訪問的JDBC接口
通常的DBMS都支持微軟提出的ODBC規范
因此該模式可以普遍使用
非常靈活
具有很好的代碼移植性
但該模式不適用於high
transaction環境
也沒有好的支持
並且功能有限
因為每次調用都要轉換成ODBC調用
所以這種模式與其他模式相比性能最差
因而Type
僅適用於下載和自動安裝Java程序不重要
實驗用途或者沒有其它JDBC驅動可用的情況下
絕不推薦用於生產
· 圖一右邊的分支成為Type
驅動模式
類似於JDBC
ODBC橋接器
需要加載到客戶機
卻是一個部分用Java實現的驅動接口
使用本地API
它將JDBC調用轉換為對數據庫(Oracle
Sybase
Informix
DB
等)客戶端接口的調用
· 圖二左邊的分支稱為Type
驅動模式
它一般是數據庫廠商才能實現的純Java的基於本地協議的驅動
直接調用DBMS(數據庫管理系統)使用的網絡協議
對於企業內部互聯網來說
是一個實用的解決方案
· 圖二右邊的分支稱為Type
驅動模式
它同樣是一個純Java驅動
不同於Type
驅動模式的是基於網絡協議
它的機制是將JDBC調用轉換為中間網絡協議
然後轉換為DBMS協議
中間網絡協議層起到一個讀取數據庫的中間件的作用
能夠連接許多類型的數據庫
因而是最靈活的JDBC模式
了解了現有的JDBC驅動類型以後
我們做一下綜合分析
Type
驅動支持多種數據庫訪問
理論上利用客戶機本地代碼庫
可以加速數據訪問的執行
但因為要做JDBC——ODBC轉換
相應的開銷絕對大於前者產生的性能提高
因此不可能有好的性能支持
由於多種原因
該類驅動得不到服務商的好的支持
使其無論性能還是功能都相對差勁
事實上該類驅動基本上得不到使用
Type
驅動類似於Type
利用了客戶機本地代碼
雖然不需要將數據庫請求轉換成ODBC調用
但有二進制代碼客戶端裝載開銷
不太可能有好的性能
另外
雖然其上層用Java實現
但因為與下層本地代碼邦定緊密
無論是跨平台應用還是多數據庫支持都很限制
因此不推薦該類型驅動
Type
驅動是純Java驅動
一般由應用服務器提供商集成到應用服務器中
為三層結構
能連接許多類型的數據庫
非常靈活
看似中間多了一個環節
但應用服務器提供這種驅動程序的同時也提供了很多優化的功能
它們一般還會配套的提供連接池
數據緩沖區
負載均衡等
所以性能並不差
Type
驅動也是純Java驅動
但其直接訪問數據庫
一般說來
商業DBMS的提供者往往會為自己的數據庫提供Type
的JDBC接口
這種模式的優勢在於和數據庫本身結合比較緊密
而且是純Java的實現
在企業級的軟件應用中
應該是首選
另外
第三方也給於大力支持
例如
對於Oracle數據庫來說
有Oracle
SilverStream
DataDirect等公司提供這種類型的驅動
其性能往往被評價為最高效的
最可靠的驅動程序
但偶爾也有比較麻煩的情況
例如微軟就不會提供MS SQL的JDBC接口(至少目前筆者了解的情況是這樣)
這時就需要到Sun的網站()查找相關的模式
驅動
上面提到的DataDirect公司(/jdbc/jdbc
asp)就提供了支持MS SQL的Type
驅動
只是你需要支付$購買這個JDBC驅動
Type
和Type
第三方驅動可能會提供比數據庫商的驅動更好的性能
並且能更好的執行
究其原因也是顯而易見的
驅動商全神貫注於驅動
數據庫商有更多其他的事情要考慮
同樣是純Java實現的Type
與Type
相比
優勢在於對多種數據庫的支持
體現了其靈活性
在大型的企業級的軟件應用中
後台數據庫往往不是一個
而且是由不同的廠商支持的
不過
Type
的JDBC驅動往往提供許多企業級的特征
例如SSL安全
支持分布式事務處理和集中管理等
因而會對你特殊的用途有很大的幫助
至於其性能
二者相當
如何選擇
就看你應用的需要了
綜上所述
如果可能
Type
絕不要用
Type
和Type
由於眾多廠商的支持
有連接池
數據緩沖等技術的使用
性能比Type
和Type
都要好
又都是純Java的實現
屬於首選
另外普遍反映
對於Oracle數據庫
盡管Oracle說OCI驅動為最佳的客戶端訪問驅動
但事實上Thin驅動程序可以獲得更好的性能
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27289.html