資料來源和串連池,資料來源串連池
資料來源是用來串連資料庫,獲得Connection對象的,在java中使用javax.sql.DataSource介面來表示。
有了資料來源,我們就不需要在編寫其他串連資料庫代碼,直接從資料來源中擷取串連就可以了,而且,不管使用什麼樣的資料庫,都是用一樣的方式擷取資料庫連接對象。
資料來源對象一般由容器建立的,在程式中可以使用JNDI來擷取。通過資料來源建立的連線物件可以被自動的放入串連池統一管理。
串連池是用來管理Connection對象的,串連池可以從資料來源中擷取串連,串連池中可以有若干個資料庫連接對象,這些連線物件可以被重用。應用程式需要串連時就向串連池申請,如果串連池有閒置串連,就會分配給應用程式,如果沒有,可能需要在等待隊列裡等待。而如果從串連池中獲得一個連線物件,等到使用完畢後,通過調用Connection的close()方法,就能將串連還給串連池,這樣這個連線物件就又編程閒置了,可以等待下一次串連請求。而串連池中的連線物件將一直保持與資料庫的串連,這樣就避免了頻繁的串連盒關閉。但是這些連線物件會佔用一定的記憶體空間,所以我們要根據資料庫的並發訪問量,和伺服器的硬體條件來覺得串連池中的最大串連數。
資料來源和串連池一個是用來建立連線物件的,一個是用來管理連線物件的。
在Tomcat中使用資料來源可以使用如下步驟:
1、在Tomcat中加入資料庫驅動檔案,在Tomcat的lib目錄下匯入資料庫驅動包。
2、配置Tomcat的conf/context.xml檔案,在該檔案中加入如下代碼:
<Context><Resource name="jdbc/books" auth="Container" type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000" username="myhr" password="myhr"driverClassName="oracle.jdbc.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:orcl"/></Context>
name:指定Resource的JNDI名稱。auth:指定管理Resource的Manager(Container:由容器建立和管理,Application:由WEB應用建立和管理)。type:指定Resource所屬的java類。maxActive指定串連池中處於活動狀態的資料庫連接的最大數目。maxIdle:指定串連池中處於空閑狀態的資料庫連接的最大數目。maxWait:指定串連池中處於閒置最長時間,超過這個時間會拋出異常,取值為-1表示無限期等待。
3、使用JNDI擷取連線物件。
import java.sql.Connection;import java.sql.SQLException;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.sql.DataSource;public class JNDIConnection {public Connection JNDIgetConnection() {Connection conn = null;Context ic;try {ic = new InitialContext();DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/books");conn = ds.getConnection();} catch (NamingException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}}
這時我們就可以使用連線物件,並且對資料庫進行一系列操作。
1什事資料來源? 2配置資料來源是什? 3資料來源跟串連池有什關係?
用TCP來串連你的應用程式與資料庫是一件昂貴的事情(很費時的事情),微軟的開發人員可以通過用串連池來反覆的使用資料庫的串連。比起每次請求都用TCP來連一次資料庫,串連池只有在不存在有效串連時才建立一個TCP串連。當關閉一個串連的時候,它會被放到池中,它仍然會保持與資料庫的串連,這樣就可以減少與資料庫的TCP串連次數。
當然,你要注意那些忘記關的串連,你應在每次用完串連後馬上關閉它。我要強調的是:無論什麼人說.net framework中的GC(垃圾收集器)總會在你用完連線物件後調用連線物件的Close或者Dispose方法顯式的關閉你的串連。不要期望CLR會在你想象的時間內關掉串連,雖然CLR最終都要銷毀對象和關閉邊接,但是我們並不能確定它到底會在什麼時候做這些事情。
要用串連池最佳化,有兩條規則,第一,開啟串連,處理資料,然後關閉串連。如果你必須在每次請求中多次開啟或關閉串連,這好過一直開啟一個邊接,然後把它傳到各個方法中。第二,用相同的連接字串(或者用相同的使用者標識,當你用整合認證的時候)。如果你沒有用相同的連接字串,如你用基於登入使用者的連接字串,這將不能利用串連池的最佳化功能。如果你用的是整合的論證,因為使用者很多,所以你也不能充分利用串連池的最佳化功能。.NET CLR提供了一個資料效能計數器,它在我們需要跟蹤程式效能特性的時候非常有用,當然也包括串連池的跟蹤了。
無論你的應用程式什麼時候要連在另一台機子的資源,如資料庫,你都應該重點最佳化你連資源所花的時間,接收和發送資料的時間,以及往返回之間的次數。最佳化你的應用程式中的每一個處理點(process hop),它是提高你的應用的效能的出發點。
應用程式層包含與資料層串連,傳送資料到相應的類的執行個體以及業務處理的邏輯。例如,在Community Server中,要組裝一個Forums或者Threads集合,然後應用商務邏輯,如授權,更重要的,這裡要完成緩衝邏輯。
資料來源與資料連線池一樣
不一樣的例如:
ODBC用於資料庫連接的程式設計語言介面
ODBC 總體結構
應用程式
執行處理並調用odbc函數,提交sql語句並檢索結果
Driver Manager
管理應用程式和驅動程式之間的通訊,根據應用程式載入並卸載驅動程式,
處理odbc函數調用,獲把它們傳送到驅動程式
驅動程式
處理odbc函數調用,把sql語句提交到資料來源,並返回結果到應用程式,如有必要,
驅動程式修改一個應用程式請求,以使請求與相關的DBMS支援的文法一致
資料來源
使用者要訪問的DBMS,以及相關os
Application
|
|
Driver Manager
| | |
| | |
驅動程式 驅動程式 驅動程式
| | |
資料來源 資料來源 資料來源
資料庫連接池概述:
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連接池正是針對這個問題提出來的。
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程式重複使用一個現有的資料庫連接,而再不是重建立立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的效能。
資料庫連接池在初始化時將建立一定數量的資料庫連接放到串連池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,串連池都將一直保證至少擁有這麼多的串連數量。串連池的最大資料庫連接數量限定了這個串連池能佔有的最大串連數,當應用程式向串連池請求的串連數超過最大串連數量時,這些請求將被加入到等待隊列中。資料庫連接池的最小串連數和最大串連數的設定要考慮到下列幾個因素:
1) 最小串連數是串連池一直保持的資料庫連接,所以如果應用程式對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2) 最大串連數是串連池能申請的最大串連數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3) 如果最小串連數與最大串連數相差太大,那麼最先的串連請求將會獲利,之後超過最小串連數量的串連請求等價於建立一個新的資料庫連接。不過,這些大於最小串連數的資料庫連接在使用完不會馬上被釋放,它將被放到串連池中等待重複使用或是空閑逾時後被釋放。...餘下全文>>