網(wǎng)站數(shù)據(jù)庫(kù)連接池作用及配置;
連接池用于創(chuàng)建和管理數(shù)據(jù)庫(kù)連接的緩沖池技術(shù),緩沖池中的連接可以被任何需要他們的線程使用。當(dāng)一個(gè)線程需要用JDBC對(duì)一個(gè)數(shù)據(jù)庫(kù)操作時(shí),將從池中請(qǐng)求一個(gè)連接。當(dāng)這個(gè)連接使用完畢后,將返回到連接池中,等待為其他的線程服務(wù)。
連接池的主要優(yōu)點(diǎn)有以下三個(gè)方面。
1、減少連接創(chuàng)建時(shí)間。連接池中的連接是已準(zhǔn)備好的、可重復(fù)使用的,獲取后可以直接訪問(wèn)數(shù)據(jù)庫(kù),因此減少了連接創(chuàng)建的次數(shù)和時(shí)間。
2、簡(jiǎn)化的編程模式。當(dāng)使用連接池時(shí),每一個(gè)單獨(dú)的線程能夠像創(chuàng)建一個(gè)自己的JDBC連接一樣操作,允許用戶直接使用JDBC編程技術(shù)。
3、控制資源的使用。如果不使用連接池,每次訪問(wèn)數(shù)據(jù)庫(kù)都需要?jiǎng)?chuàng)建一個(gè)連接,這樣系統(tǒng)的穩(wěn)定性受系統(tǒng)連接需求影響很大,很容易產(chǎn)生資源浪費(fèi)和高負(fù)載異常。連接池能夠使性能大化,將資源利用控制在一定的水平之下。連接池能控制池中的連接數(shù)量,增強(qiáng)了系統(tǒng)在大量用戶應(yīng)用時(shí)的穩(wěn)定性。
下面,簡(jiǎn)單的闡述下連接池的工作原理。
連接池技術(shù)的核心思想是連接復(fù)用,通過(guò)建立一個(gè)數(shù)據(jù)庫(kù)連接池以及一套連接使用、分配和管理策略,使得該連接池中的連接可以得到高效、安全的復(fù)用,避免了數(shù)據(jù)庫(kù)連接頻繁建立、關(guān)閉的開(kāi)銷。
連接池的工作原理主要由三部分組成,分別為連接池的建立、連接池中連接的使用管理、連接池的關(guān)閉。
1、連接池的建立。一般在系統(tǒng)初始化時(shí),連接池會(huì)根據(jù)系統(tǒng)配置建立,并在池中創(chuàng)建了幾個(gè)連接對(duì)象,以便使用時(shí)能從連接池中獲取。連接池中的連接不能隨意創(chuàng)建和關(guān)閉,這樣避免了連接隨意建立和關(guān)閉造成的系統(tǒng)開(kāi)銷。Java中提供了很多容器類可以方便的構(gòu)建連接池,例如Vector、Stack等。
2、連接池的管理。連接池管理策略是連接池機(jī)制的核心,連接池內(nèi)連接的分配和釋放對(duì)系統(tǒng)的性能有很大的影響。
其管理策略是:當(dāng)客戶請(qǐng)求數(shù)據(jù)庫(kù)連接時(shí),首先查看連接池中是否有空閑連接,如果存在空閑連接,則將連接分配給客戶使用;如果沒(méi)有空閑連接,則查看當(dāng)前所開(kāi)的連接數(shù)是否已經(jīng)達(dá)到大連接數(shù),如果沒(méi)達(dá)到就重新創(chuàng)建一個(gè)連接給請(qǐng)求的客戶;如果達(dá)到就按設(shè)定的大等待時(shí)間進(jìn)行等待,如果超出大等待時(shí)間,則拋出異常給客戶。
當(dāng)客戶釋放數(shù)據(jù)庫(kù)連接時(shí),先判斷該連接的引用次數(shù)是否超過(guò)了規(guī)定值,如果超過(guò)就從連接池中刪除該連接,否則保留為其他客戶服務(wù)。
該策略保證了數(shù)據(jù)庫(kù)連接的有效復(fù)用,避免頻繁的建立、釋放連接所帶來(lái)的系統(tǒng)資源開(kāi)銷。
3、連接池的關(guān)閉。當(dāng)應(yīng)用程序退出時(shí),關(guān)閉連接池中所有的連接,釋放連接池相關(guān)的資源,該過(guò)程正好與創(chuàng)建相反。
數(shù)據(jù)庫(kù)連接池的作用以及配置;
連接池是創(chuàng)建和管理多個(gè)連接的一種技術(shù),這些連接可被需要使用它們的任何線程使用。連接池技術(shù)基于下述事實(shí):對(duì)于大多數(shù)應(yīng)用程序,當(dāng)它們正在處理通常需要數(shù)毫秒完成的事務(wù)時(shí),僅需要能夠訪問(wèn)JDBC連接的1個(gè)線程。未處理事務(wù)時(shí),連接處于閑置狀態(tài)。使用連接池,允許其他線程使用閑置連接來(lái)執(zhí)行有用的任務(wù)。
事實(shí)上,當(dāng)某一線程需要用JDBC在MySQL或其他數(shù)據(jù)庫(kù)上執(zhí)行操作時(shí),需要用到由連接池提供的連接。使用連接完成線程后,線程會(huì)將連接返回給連接池,以便該連接能夠被其他需要使用連接的線程使用。從連接池“借出”連接時(shí),該連接僅供請(qǐng)求它的線程使用。從編程觀點(diǎn)看,其效果等同于每次需要JDBC連接時(shí)調(diào)用DriverManager.getConnection(),但是,采用連接池技術(shù),可通過(guò)使用新的或已有的連接結(jié)束線程。連接池技術(shù)能顯著增加Java應(yīng)用程序的性能,同時(shí)還能降低資源使用率。
連接池技術(shù)的主要優(yōu)點(diǎn)包括:
(1) 縮短了連接創(chuàng)建時(shí)間
創(chuàng)建新的JDBC連接會(huì)導(dǎo)致聯(lián)網(wǎng)操作和一定的JDBC驅(qū)動(dòng)開(kāi)銷,如果這類連接是“循環(huán)”使用的,使用該方式,可避免這類不利因素。
(2)簡(jiǎn)化的編程模型
使用連接池技術(shù)時(shí),每個(gè)單獨(dú)線程能夠像創(chuàng)建了自己的JDBC連接那樣進(jìn)行操作,從而允許使用直接的JDBC編程技術(shù)。
(3)受控的資源使用
如果不使用連接池技術(shù),而是在每次需要時(shí)為線程創(chuàng)建新的連接,那么應(yīng)用程序的資源使用將十分浪費(fèi),而且在負(fù)載較重的情況下會(huì)導(dǎo)致無(wú)法預(yù)期的結(jié)果。
注意,與數(shù)據(jù)庫(kù)的每個(gè)連接均會(huì)在客戶端和服務(wù)器端造成一定的開(kāi)銷(CPU、關(guān)聯(lián)轉(zhuǎn)換等)。
每個(gè)連接均會(huì)對(duì)應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器的可用資源帶來(lái)一定的限制。無(wú)論連接是否執(zhí)行任何有用的任務(wù),仍將使用這些資源中的相當(dāng)一部分。
連接池能夠使性能大化,同時(shí)還能將資源利用控制在一定的水平之下,如果超過(guò)該水平,應(yīng)用程序?qū)⒈罎⒍粌H僅是變慢。幸運(yùn)的是,Sun公司通過(guò)JDBC-2.0“可選”接口,完成了JDBC中連接池概念的標(biāo)準(zhǔn)化實(shí)施,所有主要應(yīng)用服務(wù)器均實(shí)施了能夠與MySQL Connector/J一起良好工作的
這類API。
通常,你可以在應(yīng)用服務(wù)器的配置文件中配置連接池,并通過(guò)Java命名和目錄接口(JNDI)訪問(wèn)它。
使用連接池時(shí)需要牢記的最重要事項(xiàng)是,無(wú)論在代碼中出現(xiàn)了什么(異常、控制流等),連接以及由連接創(chuàng)建的任何部分(語(yǔ)句、結(jié)果集等)均應(yīng)被關(guān)閉,以便能再次使用它們。如不然,它們將糾纏在一起,在最好的情況下,意味著它們所代表的數(shù)據(jù)庫(kù)服務(wù)器資源(緩沖區(qū)、鎖定、套接字等)可能會(huì)捆綁一段時(shí)間,在最壞的情況下,可能會(huì)導(dǎo)致永久捆綁。
連接池的好大小是什么?
取決于具體情況。盡管好大小取決與預(yù)期的負(fù)載和平均的數(shù)據(jù)庫(kù)事務(wù)時(shí)間,好的連接池大小小于你的預(yù)期。
例如,如果使用的是Sun公司的Java Petstore Blueprint應(yīng)用程序,對(duì)于包含15~20個(gè)連接的連接池,使用MySQL和Tomcat,在可接受的相應(yīng)時(shí)間下,可服務(wù)于中等程度的負(fù)載(600個(gè)并發(fā)用戶)。
要想確定用于應(yīng)用程序的連接池大小,應(yīng)使用諸如Apache Jmeter或The Grinder等工具創(chuàng)建負(fù)載測(cè)試腳本,并對(duì)應(yīng)用程序進(jìn)行負(fù)載測(cè)試。確定出
發(fā)點(diǎn)的一種簡(jiǎn)單方法是,將連接池的大連接數(shù)配置為“無(wú)限”,運(yùn)行負(fù)載測(cè)試,并測(cè)量大的并發(fā)連接數(shù)。隨后,應(yīng)進(jìn)行反向操作,確定出使應(yīng)
用程序具有好性能的連接池的最小和大值。
連接池與數(shù)據(jù)源區(qū)別?
數(shù)據(jù)庫(kù)連接池是在應(yīng)用程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組
成一個(gè)連接池,由應(yīng)用程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng)、使用和釋放。
對(duì)于多于連接池中連接數(shù)的并發(fā)請(qǐng)求,應(yīng)在請(qǐng)求隊(duì)列中排隊(duì)等待。并且應(yīng)用程序可根據(jù)池中連接的使用率,動(dòng)態(tài)增加或減少池中的連接數(shù)。當(dāng)關(guān)閉連接操作時(shí),連接并不真正的關(guān)閉,而是返回到連接池中作為空閑連接在后面繼續(xù)使用,連接池技術(shù)解決了數(shù)據(jù)庫(kù)連接頻繁打開(kāi)關(guān)閉所帶來(lái)的性能問(wèn)題。
有了連接池,我們沒(méi)必要直接找數(shù)據(jù)源打交道了,連接池在你的程序所在的機(jī)器內(nèi)存,數(shù)據(jù)源不一定,并且數(shù)據(jù)源和連接池會(huì)保持一定數(shù)量
的連接,這樣我們?cè)L問(wèn)數(shù)據(jù)庫(kù)的時(shí)候就不需要找數(shù)據(jù)源要連接,直接在本地內(nèi)存中取得連接,可以提高程序的性能。連結(jié)池的存在是為了效率,因?yàn)閷?shí)例化一個(gè)連接很耗費(fèi)資源,而連接又有可重用的特征,所以可以把一定數(shù)量的連接放在連接池里面以提高效率。
新聞標(biāo)題:網(wǎng)站數(shù)據(jù)庫(kù)連接池作用及配置
URL地址:http://jinyejixie.com/news39/144139.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、微信小程序、手機(jī)網(wǎng)站建設(shè)、App開(kāi)發(fā)、靜態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)