A. 什麼是資料庫連接池,有什麼作用
1、基本概念及原理
由上面的分析可以看出,問題的根源就在於對資料庫連接資源的低效管理。我們知道,對於共享資源,有一個很著名的設計模式:資源池 (Resource Pool)。該模式正是為了解決資源的頻繁分配?釋放所造成的問題。為解決上述問題,可以採用資料庫連接池技術。資料庫連接池的基本思想就是為資料庫連接 建立一個「緩沖池」。預先在緩沖池中放入一定數量的連接,當需要建立資料庫連接時,只需從「緩沖池」中取出一個,使用完畢之後再放回去。我們可以通過設定 連接池最大連接數來防止系統無盡的與資料庫連接。更為重要的是我們可以通過連接池的管理機制監視資料庫的連接的數量?使用情況,為系統開發?測試及性能調 整提供依據。
2、伺服器自帶的連接池
JDBC的API中沒有提供連接池的方法。一些大型的WEB應用伺服器如BEA的WebLogic和IBM的WebSphere等提供了連接池的機制,但是必須有其第三方的專用類方法支持連接池的用法。
連接池關鍵問題分析
1、並發問題
為了使連接管理服務具有最大的通用性,必須考慮多線程環境,即並發問題。這個問題相對比較好解決,因為Java語言自身提供了對並發管理的支 持,使用synchronized關鍵字即可確保線程是同步的。使用方法為直接在類方法前面加上synchronized關鍵字,如:
public synchronized Connection getConnection()
2、多資料庫伺服器和多用戶
對於大型的企業級應用,常常需要同時連接不同的資料庫(如連接Oracle和Sybase)。如何連接不同的資料庫呢?我們採用的策略是:設計 一個符合單例模式的連接池管理類,在連接池管理類的唯一實例被創建時讀取一個資源文件,其中資源文件中存放著多個資料庫的url地址()?用戶名()?密 碼()等信息。如 tx.url=172.21.15.123:5000/tx_it,tx.user=yang,tx.password=yang321。根據資源文件提 供的信息,創建多個連接池類的實例,每一個實例都是一個特定資料庫的連接池。連接池管理類實例為每個連接池實例取一個名字,通過不同的名字來管理不同的連 接池。
對於同一個資料庫有多個用戶使用不同的名稱和密碼訪問的情況,也可以通過資源文件處理,即在資源文件中設置多個具有相同url地址,但具有不同用戶名和密碼的資料庫連接信息。
3、事務處理
我們知道,事務具有原子性,此時要求對資料庫的操作符合「ALL-ALL-NOTHING」原則,即對於一組SQL語句要麼全做,要麼全不做。
在Java語言中,Connection類本身提供了對事務的支持,可以通過設置Connection的AutoCommit屬性為 false,然後顯式的調用commit或rollback方法來實現。但要高效的進行Connection復用,就必須提供相應的事務支持機制。可採用 每一個事務獨佔一個連接來實現,這種方法可以大大降低事務管理的復雜性。
4、連接池的分配與釋放
連接池的分配與釋放,對系統的性能有很大的影響。合理的分配與釋放,可以提高連接的復用度,從而降低建立新連接的開銷,同時還可以加快用戶的訪問速度。
對於連接的管理可使用空閑池。即把已經創建但尚未分配出去的連接按創建時間存放到一個空閑池中。每當用戶請求一個連接時,系統首先檢查空閑池內 有沒有空閑連接。如果有就把建立時間最長(通過容器的順序存放實現)的那個連接分配給他(實際是先做連接是否有效的判斷,如果可用就分配給用戶,如不可用 就把這個連接從空閑池刪掉,重新檢測空閑池是否還有連接);如果沒有則檢查當前所開連接池是否達到連接池所允許的最大連接數(maxConn),如果沒有 達到,就新建一個連接,如果已經達到,就等待一定的時間(timeout)。如果在等待的時間內有連接被釋放出來就可以把這個連接分配給等待的用戶,如果 等待時間超過預定時間timeout,則返回空值(null)。系統對已經分配出去正在使用的連接只做計數,當使用完後再返還給空閑池。對於空閑連接的狀 態,可開辟專門的線程定時檢測,這樣會花費一定的系統開銷,但可以保證較快的響應速度。也可採取不開辟專門線程,只是在分配前檢測的方法。
5、連接池的配置與維護
連接池中到底應該放置多少連接,才能使系統的性能最佳?系統可採取設置最小連接數(minConn)和最大連接數(maxConn)來控制連接 池中的連接。最小連接數是系統啟動時連接池所創建的連接數。如果創建過多,則系統啟動就慢,但創建後系統的響應速度會很快;如果創建過少,則系統啟動的很 快,響應起來卻慢。這樣,可以在開發時,設置較小的最小連接數,開發起來會快,而在系統實際使用時設置較大的,因為這樣對訪問客戶來說速度會快些。最大連 接數是連接池中允許連接的最大數目,具體設置多少,要看系統的訪問量,可通過反復測試,找到最佳點。
如何確保連接池中的最小連接數呢?有動態和靜態兩種策略。動態即每隔一定時間就對連接池進行檢測,如果發現連接數量小於最小連接數,則補充相應數量的新連接,以保證連接池的正常運轉。靜態是發現空閑連接不夠時再去檢查。
B. 資料庫連接池是什麼
問題一:什麼臘咐是資料庫連接池,有什麼作用? 資料庫連接是一種有限的昂貴的資源,
資料庫連接影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、
管理和釋放資料庫連接,
它允許應用程序重復使用一個現有的資料庫連接,
而再不是重新建立一個;
釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放數
據庫連接而引起的資料庫連接遺漏。
這項技術能明顯提高對資料庫操作的性能。
問題二:什麼是資料庫連接池?謝謝了 資料庫連接池,簡稱dbcp databa績e connection pool
存在意義:
資料庫的連接是非常耗費系統資源的,一個應用通常都是需要與資料庫打交道,也就需要經常連接資料庫,這樣導致浪費大量系統資源;
連接池的原理就是:我事先創建好幾個資料庫連接放著,當我的系統需要操作資料庫時就從連接池裡直接拿連接,並將這個連接標記為 忙 ;用完後在放會池中,標記為 空閑;;;
當連接池裡的連接都在被使用,如果此時還要連接,連接池就會在創建連接放到池裡,,這些連接的數量,都是在配置文件里由你控制的
問題三:資料庫連接池是什麼意思? 像打開關閉資料庫連接這種和資料庫的交互可能是很費時的,尤其是當客戶端數量增加的時候,會消耗大量的資源,成本是非常高的。可以在應用伺服器啟動的時候建立很多個資料庫連接並維護在一個池中。連接請求由池中的連接提供。在連接使用完畢以後,把連接歸還到池中,以用於滿足將來更多的請求。
問題四:資料庫連接池的工作機制是什麼? 為什麼要使用資料庫連接池?
答:
由於創建連接的代價是很高的, 我們每次訪問資料庫都重新創建連接的話是非常消耗性的.
我們可以再程序啟動的時候先創建出一些連接, 放在一個 *** 中, 訪問資料庫的時候從 *** 中獲取, 使用結束再放回 *** 中.
這樣做只是在程序啟動的時候消耗性能租局瞎去創建連接, 每次訪問資料庫的時候都是從內存中獲取連接, 可以大大提升效率.
注意事項:
由於池中增刪非常頻繁, 使用 *** LinkedList效率較高
*** 中所有連接都被佔用時創建新連接, 但需要注意連接總數
使用組合模式/動態代理處理釋放連接的方法, 當運行close方法時, 將連接放回池中
關於資料庫連接池:
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
資料庫弊空連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被 使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超 過最大連接數量時,這些請求將被加入到等待隊列中。
資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數是連接池一直保持的資料庫連接,所以如果應用程序對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2) 最大連接數是連接池能申請的最大連接數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接。不過,這些大於最小連接數的資料庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時後被釋放。
J2EE伺服器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。
調用:客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為 忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。
釋放:當使用的池連接調用完成後,池驅動程序將此連接表記為空閑, 其他調用就可以使用這個連接
問題五:資料庫連接池的作用是什麼? 連接池是被j2ee伺服器打開和維護的 對應1、2、4的JDBC驅動程序 連接池一般比直接連接更有優越性 因為它提高了性能的同時還保存了 寶貴的資源。 打開資料庫連接時CPU和網路的重要 任務,因此,在整個應用程序的使用過程 當中重復的打開直接連接將導致性能的下降。 而池連接只在伺服器啟動時打開一次,從而 消除了這種性能問題。 另外,因為連接只用於很短的時間, 所以,連接可以被有效共享, 而且有關連接參數的特有信息, 只對池驅動程序有效, 如資料庫用戶名稱和密碼, 從而增強了系統的安全性和可管理性。
問題六:資料庫連接池的工作機制是什麼 連接池的實現是以空間換時間。
J2EE伺服器啟動時會建立一定數量的池連接,並一直維持不少於此數目的池連接。客戶端程序需要連接時,池驅動程序會返回一個未使用的池連接並將其表記為忙。如果當前沒有空閑連接,池驅動程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成後,池驅動程序將此連接表記為空閑,其他調用就可以使用這個連接。
問題七:資料庫連接池的作用是什麼? 連接池是被j2ee伺服器打開和維護的
對應1、2、4的JDBC驅動程序
連接池一般比直接連接更有優越性
因為它提高了性能的同時還保存了
寶貴的資源。
打開資料庫連接時CPU和網路的重要
任務,因此,在整個應用程序的使用過程
當中重復的打開直接連接將導致性能的下降。
而池連接只在伺服器啟動時打開一次,從而
消除了這種性能問題。
另外,因為連接只用於很短的時間,
所以,連接可以被有效共享,
而且有關連接參數的特有信息,
只對池驅動程序有效,
如資料庫用戶名稱和密碼,
從而增強了系統的安全性和可管理性。
問題八:開源的資料庫連接池和普通的資料庫連接池有什麼區別 在項目中嘗試使用了幾種開源的資料庫連接池實現。一種是dbcp,一種是c3p0,還有一種是proxool,這幾種資料庫連接池都可以很容易的在Spring配置起來。性能總體上上感覺dbcp為最優,因為穩定性和並發性都是我的項目需要的。
項目中經過反復測試,如果web server和資料庫server不是同一個機器的話,在斷網時間比較短的時間內三種資料庫連接池都能較好的重連,但是在斷網時間超過8個鍾頭 proxool就不能恢復工作了。但是dbcp卻能很快的重新連接。實際生產環境中穩定性和總體性能是最重要的,都需要做相應的測試才能放心的讓系統上生產線。
這里給出項目中資料庫連接池配置:
dbcp的jndi:13 4 java:p/env/jdbc/mysql5 6 proxool(proxool-0.9.0RC1)的配置: .mysql.jdbc.Driver jdbc:mysql:ip:3306/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=true user password 500 15000 select CURRENT_DATE true mysqlProxoolDataSource 1000 false 建議使用DBCP,配置在tomcat中,然後在spring中使用jndi的形式獲取。 c3p0(c3p0-0.9.0): 1 3 4 .mysql.jdbc.Driver 5 6 7 jdbc:mysql:192.168.0.225:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true 8 9 10 ********11 12 13 ********14 15 16 10017 18 19 5020 21 22 10023 24 25 100026 27 28 3029 30 直接 & paste到spring配置文件里就可以使用了。 配置一些額外的tomcat 的DBCP連接池參數,也可以更好的使用到類似proxool提供的功能,只是dbcp更加穩定而已。tomcat/conf/context.xml中插入一個Resource元素: 解釋一下以下這些參數的含義:
validationQuery = select current_date()
testOnBorrow = true
testOnReturn = false
testWhileIdle = true
當 從池中獲取一個Connection後使用 select current_date() 來測試該資料庫連接的可用性,如果SQL語句返回結果則認為是一個有效的連接,否則將繼續測試知道可以拿到有效的連接。當返回Connection給池的時候不進行驗證,但是Connection空閑的時候就要進行認證。
timeBetweenEvictionRunsMillis = 15000
DBCP 清空線程睡眠的間隙,如值為負數則不運行該線程
numTestsPerEvictionRun = 10"......>>
問題九:sqlite 使用什麼資料庫連接池 資料庫連接是一種有限的昂貴的資源,
資料庫連接影響到程序的性能指標。
資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、
管理和釋放資料庫連接,
它允許應用程序重復使用一個現有的資料庫連接,
而再不是重新建立一個;
釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放數
據庫連接而引起的資料庫連接遺漏。
這項技術能明顯提高對資料庫操作的性能。
問題十:說出數據連接池的工作機制是什麼? 以典型的資料庫連接池為例:首先普通的資料庫訪問是這樣的:程序和資料庫建立連接,發送數據操作的指令,完成後斷開連接。等下一次請求的時候重復這個過程,即每個請求都需要和資料庫建立連接和斷開連接,這樣當數據量大的時候系統的消耗是很大的。連接池就是為了解決這個問題:在一個空間中預先建立好一定數量的連接,當程序請求數據時直接使用池中的現存的連接,不需要重復建立連接和斷開的過程,節省了時間提高了性能
C. 什麼是Java web開發中資料庫的連接池技術,它的原理大致是什麼
什麼是連接池
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而不是再重新建立一個。
為什麼要使用連接池
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。 一個資料庫連接對象均對應一個物理資料庫連接,每次操作都打開一個物理連接,使用完都關閉連接,這樣造成系統的 性能低下。 資料庫連接池的解決方案是在應用程序啟動時建立足夠的資料庫連接,並講這些連接組成一個連接池(簡單說:在一個「池」里放了好多半成品的資料庫聯接對象),由應用程序動態地對池中的連接進行申請、使用和釋放。對於多於連接池中連接數的並發請求,應該在請求隊列中排隊等待。並且應用程序可以根據池中連接的使用率,動態增加或減少池中的連接數。 連接池技術盡可能多地重用了消耗內存地資源,大大節省了內存,提高了伺服器地服務效率,能夠支持更多的客戶服務。通過使用連接池,將大大提高程序運行效率,同時,我們可以通過其自身的管理機制來監視資料庫連接的數量、使用情況等。
D. 請解釋資料庫連接池的原理,以及作用
貼個文章給你吧
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能佔有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。資料庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:
1) 最小連接數是連接池一直保持的資料庫連接,所以如果應用程序對資料庫連接的使用量不大,將會有大量的資料庫連接資源被浪費;
2) 最大連接數是連接池能申請的最大連接數,如果資料庫連接請求超過此數,後面的資料庫連接請求將被加入到等待隊列中,這會影響之後的資料庫操作。
3) 如果最小連接數與最大連接數相差太大,那麼最先的連接請求將會獲利,之後超過最小連接數量的連接請求等價於建立一個新的資料庫連接。不過,這些大於最小連接數的資料庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時後被釋放。
E. 資料庫連接池的作用是什麼
連接池是被j2ee伺服器打開和維護的
對應1、2、4的JDBC驅動程序
連接池一般比直接連接更有優越性
因為它提高了性能的同時還保存了
寶貴的資源。
打開資料庫連接時CPU和網路的重要
任務,因此,在整個應用程序的使用過程
當中重復的打開直接連接將導致性能的下降。
而池連接只在伺服器啟動時打開一次,從而
消除了這種性能問題。
另外,因為連接只用於很短的時間,
所以,連接可以被有效共享,
而且有關連接參數的特有信息,
只對池驅動程序有效,
如資料庫用戶名稱和密碼,
從而增強了系統的安全性和可管理性。