對于連接池,其實(shí)你多想想就明白了。
發(fā)表時間:2023-08-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]>是否每一個用戶連接都要占用一個Connection,such as 在pool中設(shè)定最大連接數(shù)為10,比如有10個用戶同時連接時就達(dá)到pool的最大連接了呢?如果訪問量很大的門戶站點(diǎn),最大連...
>是否每一個用戶連接都要占用一個Connection,such as 在pool中設(shè)定最大連接數(shù)為10,比如有10個用戶同時連接時就達(dá)到pool的最大連接了呢?如果訪問量很大的門戶站點(diǎn),最大連接數(shù)是不時應(yīng)該設(shè)置很大呢?
::一般來說,連接池設(shè)置的時候,是允許設(shè)置最小連接數(shù)和最大連接數(shù)的。最小連接數(shù)是用于系統(tǒng)空閑的時候的,這樣可以降低database的壓力。當(dāng)訪問增多,所需連接數(shù)超出最小連接數(shù)時,系統(tǒng)會再創(chuàng)建連接,并放入連接池。當(dāng)訪問量很大時,最大連接數(shù)當(dāng)然也會相應(yīng)增大。但對于設(shè)計的好的系統(tǒng)來說,數(shù)據(jù)庫訪問時間占總處理時間的比例不應(yīng)該很高。比如可以利用cache的技術(shù),來降低對數(shù)據(jù)庫的訪問次數(shù)。
>
>當(dāng)訪問連接超過了最大連接數(shù)時,怎么處理?
>繼續(xù)為用戶創(chuàng)建新連接,這時保存conn的vector的size()已經(jīng)超過了最大連接數(shù),如何對超過這部分的連接進(jìn)行管理,繼續(xù)把他們加入到pool中?
::如果超出了最大連接數(shù),一般的pool manager會重試數(shù)次,做等待。而往往等一會兒就會有空閑連接了。若仍未取到連接,可以有不同的處理方法,一般是返回一個null啦。這種情況應(yīng)該記錄,這可以幫助你了解最大連接數(shù)應(yīng)該是多少。
>
>連接超過過期的處理,比如在一個jsp頁面中調(diào)用一個poolbean中的conn,這個bean的scope設(shè)置為什么比較好?page嗎?
>是否需要在這個jsp頁面最后把這個conn歸還給pool呢?還是留著給用戶下一個頁面使用?
>
::用完的連接當(dāng)然應(yīng)該立即返回,要知道從連接池取一個連接是很快的,而若你一直霸占著連接,導(dǎo)至池中連接不夠,再創(chuàng)建連接的時間是很長的。一個connection永遠(yuǎn)只應(yīng)該在一個頁面甚至一次事務(wù)的范圍內(nèi)使用。
>如果不把他歸還的給pool的話,這個conn會在多久后就超時失效呢?怎么處理這種失效的connection, Hashtable他并不知道這個conn是否已經(jīng)失效呢,Hashtable只是保留這個object而已?
>
::這會根據(jù)你的設(shè)置來定的。若總是不返回連接,池中連接委有快會耗盡,后臺進(jìn)程就會檢查空連接的情況,并加以釋放。
事實(shí)上在poolman中,是有一個線程一直在運(yùn)行的,可以設(shè)置隔多少時間就重建連接。
Hashtable當(dāng)然是什么都不知道的啦。它只是一個裝東西的房間而已。另外會有一個線程來做倉庫管理員的。