熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

高性能Java設計與開發

2013-11-23 19:41:04  來源: Java高級技術 

     ——JDBC 篇(一)
  
  驅動程序的選擇
  
  在企業級的Java應用中訪問數據庫是一個必備的環節數據庫作為數據資源的集散地往往位於企業級軟件體系的後方供前方的應用程序訪問在Java技術的體系中應用程序是通過JDBC(Java Database Connectivity)接口來訪問數據庫的JDBC支持建立連接SQL語句查詢處理結果等基本功能在應用JDBC接口訪問數據庫的過程中只要根據規范來操作這些功能的實現不會出差錯但是有些時候進行數據查詢的效率著實讓開發人員懊惱不已明明根據規范編寫的程序卻得不到預期的運行效果造成了整個軟件的執行效率不高
  
  訪問數據庫的性能主要有兩個因素決定一是數據庫服務器本身的性能如數據庫管理系統數據庫結構的設計其二就是與數據庫相對獨立的JDBC應用編程接口(API)的使用也很大程度上影響著JDBC程序的性能前一點不屬於我們討論的范圍我們不做詳細論述
  
  JDBC數據庫訪問機制
  
  

   
  圖一
  
  
  圖二
  

  
  · 圖一左邊的分支稱為Type 驅動模式即通常由Sun公司提供的JDBCODBC橋加上一個ODBC驅動它提供了經由一種或多種ODBC驅動進行訪問的JDBC接口通常的DBMS都支持微軟提出的ODBC規范因此該模式可以普遍使用非常靈活具有很好的代碼移植性 但該模式不適用於hightransaction環境也沒有好的支持並且功能有限因為每次調用都要轉換成ODBC調用所以這種模式與其他模式相比性能最差因而Type 僅適用於下載和自動安裝Java程序不重要實驗用途或者沒有其它JDBC驅動可用的情況下絕不推薦用於生產
  
  · 圖一右邊的分支成為Type 驅動模式類似於JDBCODBC橋接器需要加載到客戶機卻是一個部分用Java實現的驅動接口使用本地API它將JDBC調用轉換為對數據庫(OracleSybaseInformixDB等)客戶端接口的調用
  
  · 圖二左邊的分支稱為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數據庫來說有OracleSilverStreamDataDirect等公司提供這種類型的驅動其性能往往被評價為最高效的最可靠的驅動程序但偶爾也有比較麻煩的情況例如微軟就不會提供MS SQL的JDBC接口(至少目前筆者了解的情況是這樣)這時就需要到Sun的網站()查找相關的模式驅動上面提到的DataDirect公司(/jdbc/jdbcasp)就提供了支持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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.