資料庫連接池原理-ag真人国际官网
1. 什麼是java web開發中資料庫的連接池技術,它的原理大致是什麼
什麼是連接池
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而不是再重新建立一個。
為什麼要使用連接池
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。 一個資料庫連接對象均對應一個物理資料庫連接,每次操作都打開一個物理連接,使用完都關閉連接,這樣造成系統的 性能低下。 資料庫連接池的解決方案是在應用程序啟動時建立足夠的資料庫連接,並講這些連接組成一個連接池(簡單說:在一個「池」里放了好多半成品的資料庫聯接對象),由應用程序動態地對池中的連接進行申請、使用和釋放。對於多於連接池中連接數的並發請求,應該在請求隊列中排隊等待。並且應用程序可以根據池中連接的使用率,動態增加或減少池中的連接數。 連接池技術盡可能多地重用了消耗內存地資源,大大節省了內存,提高了伺服器地服務效率,能夠支持更多的客戶服務。通過使用連接池,將大大提高程序運行效率,同時,我們可以通過其自身的管理機制來監視資料庫連接的數量、使用情況等。
2. 什麼是資料庫連接池,有什麼作用
資料庫連接是一種有限的昂貴的資源,
資料庫連接影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、
管理和釋放資料庫連接,
它允許應用程序重復使用一個現有的資料庫連接,
而再不是重新建立一個;
釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放數
據庫連接而引起的資料庫連接遺漏。
這項技術能明顯提高對資料庫操作的性能。
3. 簡單介紹連接池的優點和原理。
連接池運作原理在實際應用開發中,特別是在web應用系統中,如果jsp、servlet或ejb使用jdbc直接訪問資料庫中的數據,每一次數據訪問請求都必須經歷建立資料庫連接、打開資料庫、存取數據和關閉資料庫連接等步驟,而連接並打開資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系統的性能必然會急劇下降,甚至會導致系統崩潰。資料庫連接池技術是解決這個問題最常用的方法,在許多應用程序伺服器(例如:weblogic,websphere,jboss)中,基本都提供了這項技術,無需自己編程,但是,深入了解這項技術是非常必要的。資料庫連接池技術的思想非常簡單,將資料庫連接作為對象存儲在一個vector對象中,一旦資料庫連接建立後,不同的資料庫訪問請求就可以共享這些連接,這樣,通過復用這些已經建立的資料庫連接,可以克服上述缺點,極大地節省系統資源和時間。資料庫連接池的主要操作如下:(1)建立資料庫連接池對象(伺服器啟動)。(2)按照事先指定的參數創建初始數量的資料庫連接(即:空閑連接數)。(3)對於一個資料庫訪問請求,直接從連接池中得到一個連接。如果資料庫連接池對象中沒有空閑的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的資料庫連接。(4)存取資料庫。(5)關閉資料庫,釋放所有資料庫連接(此時的關閉資料庫連接,並非真正關閉,而是將其放入空閑隊列中。如實際空閑連接數大於初始空閑連接數則釋放連接)。(6)釋放資料庫連接池對象(伺服器停止、維護期間,釋放資料庫連接池對象,並釋放所有連接)。連接池的實現1、連接池模型 本文討論的連接池包括一個連接池類(dbconnectionpool)和一個連接池管理類(dbconnetionpoolmanager)。連接池類是對某一資料庫所有連接的「緩沖池」,主要實現以下功能:①從連接池獲取或創建可用連接;②使用完畢之後,把連接返還給連接池;③在系統關閉前,斷開所有連接並釋放連接佔用的系統資源;④還能夠處理無效連接(原來登記為可用的連接,由於某種原因不再可用,如超時,通訊問題),並能夠限制連接池中的連接總數不低於某個預定值和不超過某個預定值。 連接池管理類是連接池類的外覆類(wrapper),符合單例模式,即系統中只能有一個連接池管理類的實例。其主要用於對多個連接池對象的管理,具有以下功能:①裝載並注冊特定資料庫的jdbc驅動程序;②根據屬性文件給定的信息,創建連接池對象;③為方便管理多個連接池對象,為每一個連接池對象取一個名字,實現連接池名字與其實例之間的映射;④跟蹤客戶使用連接情況,以便需要是關閉連接釋放資源。連接池管理類的引入主要是為了方便對多個連接池的使用和管理,如系統需要連接不同的資料庫,或連接相同的資料庫但由於安全性問題,需要不同的用戶使用不同的名稱和密碼。 2、連接池實現 下面給出連接池類和連接池管理類的主要屬性及所要實現的基本介面: public class dbconnectionpool implements timerlistener{ private int checkedout;//已被分配出去的連接數 private arraylist freeconnections = new arraylist();//容器,空閑池,根據//創建時間順序存放已創建但尚未分配出去的連接 private int minconn;//連接池裡連接的最小數量 private int maxconn;//連接池裡允許存在的最大連接數 private string name;//為這個連接池取個名字,方便管理 private string password;//連接資料庫時需要的密碼 private string url;//所要創建連接的資料庫的地址 private string user;//連接資料庫時需要的用戶名 public timer timer;//定時器 public dbconnectionpool(string name, string url, string user, string password, int maxconn)//公開的構造函數 public synchronized void freeconnection(connection con) //使用完畢之後,//把連接返還給空閑池 public synchronized connection getconnection(long timeout)//得到一個連接,//timeout是等待時間 public synchronized void release()//斷開所有連接,釋放佔用的系統資源 private connection newconnection()//新建一個資料庫連接 public synchronized void timerevent() //定時器事件處理函數 } public class dbconnectionmanager { static private dbconnectionmanager instance;//連接池管理類的唯一實例 static private int clients;//客戶數量 private arraylist drivers = new arraylist();//容器,存放資料庫驅動程序 private hashmap pools = new hashmap ();//以name/value的形式存取連接池//對象的名字及連接池對象 static synchronized public dbconnectionmanager getinstance()//如果唯一的//實例instance已經創建,直接返回這個實例;否則,調用私有構造函數,創//建連接池管理類的唯一實例 private dbconnectionmanager()//私有構造函數,在其中調用初始化函數init() public void freeconnection(string name, connection con)// 釋放一個連接,//name是一個連接池對象的名字 public connection getconnection(string name)//從名字為name的連接池對象//中得到一個連接 public connection getconnection(string name, long time)//從名字為name //的連接池對象中取得一個連接,time是等待時間 public synchronized void release()//釋放所有資源 private void createpools(properties props)//根據屬性文件提供的信息,創建//一個或多個連接池 private void init()//初始化連接池管理類的唯一實例,由私有構造函數調用 private void loaddrivers(properties props)//裝載資料庫驅動程序 } 3、連接池使用 上面所實現的連接池在程序開發時如何應用到系統中呢?下面以servlet為例說明連接池的使用。 servlet的生命周期是:在開始建立servlet時,調用其初始化(init)方法。之後每個用戶請求都導致一個調用前面建立的實例的service方法的線程。最後,當伺服器決定卸載一個servlet時,它首先調用該servlet的 destroy方法。 根據servlet的特點,我們可以在初始化函數中生成連接池管理類的唯一實例(其中包括創建一個或多個連接池)。如: public void init() throws servletexception { connmgr = dbconnectionmanager.getinstance(); } 然後就可以在service方法中通過連接池名稱使用連接池,執行資料庫操作。最後在destroy方法中釋放佔用的系統資源,如: public void destroy() { connmgr.release(); super.destroy(); } 結束語在使用jdbc進行與資料庫有關的應用開發中,資料庫連接的管理是一個難點。很多時候,連接的混亂管理所造成的系統資源開銷過大成為制約大型企業級應用效率的瓶頸。對於眾多用戶訪問的web應用,採用資料庫連接技術的系統在效率和穩定性上比採用傳統的其他方式的系統要好很多。本文闡述了使用jdbc訪問資料庫的技術?討論了基於連接池技術的資料庫連接管理的關鍵問題並給出了一個實現模型。文章所給出的是連接池管理程序的一種基本模式,為提高系統的整體性能,在此基礎上還可以進行很多有意義的擴展。 http://www.webdevelopersjournal.com/columns/connection_pool.html http://www.webdevelopersjournal.com/columns/dbconnectionmanager.java
4. 資料庫連接池的工作機制是什麼
資料庫連接池在初始悄嫌化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個,釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒啟衫手有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
(4)資料庫連接池原理擴展閱讀:
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的塌衡數量是由最小資料庫連接數制約。無論這些資料庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。
5. 說出數據連接池的工作機制是什麼
以典型的資料庫連接池為例: 首先普通的資料庫訪問是這樣的:程序和資料庫建立連接,發送數據操作的指令,完成後斷開連接。等下一次請求的時候重復這個過程,即每個請求都需要和資料庫建立連接和斷開連接,這樣當數據量大的時候系統的消耗是很大的。連接池就是為了解決這個問題:在一個空間中預先建立好一定數量的連接,當程序請求數據時直接使用池中的現存的連接,不需要重復建立連接和斷開的過程,節省了時間提高了性能