數(shù)據(jù)庫連接池(Connection pooling)是程序啟動時建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池,由程序動態(tài)地對池中的連接進行申請,使用,釋放。
創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務器托管報價,主機托管價格性價比高,為金融證券行業(yè)四川移動機房托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
簡單的說:創(chuàng)建數(shù)據(jù)庫連接是一個很耗時的操作,也容易對數(shù)據(jù)庫造成安全隱患。所以,在程序初始化的時候,集中創(chuàng)建多個數(shù)據(jù)庫連接,并把他們集中管理,供程序使用,可以保證較快的數(shù)據(jù)庫讀寫速度,還更加安全可靠。
不使用數(shù)據(jù)庫連接池
如果不使用數(shù)據(jù)庫連接池,對于每一次SQL操作,都要走一遍下面完整的流程:
1.TCP建立連接的三次握手(客戶端與 MySQL服務器的連接基于TCP協(xié)議)
2.MySQL認證的三次我收
3.真正的SQL執(zhí)行
4.MySQL的關(guān)閉
5.TCP的四次握手關(guān)閉
可以看出來,為了執(zhí)行一條SQL,需要進行大量的初始化與關(guān)閉操作
使用數(shù)據(jù)庫連接池
如果使用數(shù)據(jù)庫連接池,那么會 事先申請(初始化)好 相關(guān)的數(shù)據(jù)庫連接,然后在之后的SQL操作中會復用這些數(shù)據(jù)庫連接,操作結(jié)束之后數(shù)據(jù)庫也不會斷開連接,而是將數(shù)據(jù)庫對象放回到數(shù)據(jù)庫連接池中
資源重用:由于數(shù)據(jù)庫連接得到重用,避免了頻繁的創(chuàng)建、釋放連接引起的性能開銷,在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增進了系統(tǒng)運行環(huán)境的平穩(wěn)性(減少內(nèi)存碎片以及數(shù)據(jù)庫臨時進程/線程的數(shù)量)。
更快的系統(tǒng)響應速度:數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫連接置于池中備用。 此時連接的初始化工作均已完成。對于業(yè)務請求處理而言,直接利用現(xiàn)有可用連接,避免了從數(shù)據(jù)庫連接初始化和釋放過程的開銷,從而縮減了系統(tǒng)整體響應時間。
統(tǒng)一的連接管理,避免數(shù)據(jù)庫連接泄露:在較為完備的數(shù)據(jù)庫連接池實現(xiàn)中,可根據(jù)預先的連接占用超時設定,強制收回被占用連接。從而避免了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄露。
如果說你的服務器CPU是4核i7的,連接池大小應該為((4*2)+1)=9
相關(guān)視頻推薦
90分鐘搞懂數(shù)據(jù)庫連接池技術(shù)|linux后臺開發(fā)
《tcp/ip詳解卷一》: 150行代碼拉開協(xié)議棧實現(xiàn)的篇章
學習地址:C/C++Linux服務器開發(fā)/后臺架構(gòu)師【零聲教育】-學習視頻教程-騰訊課堂
需要C/C++ Linux服務器架構(gòu)師學習資料加qun 812855908 獲取(資料包括 C/C++,Linux,golang技術(shù),Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK,ffmpeg 等),免費分享
源碼下載
下載方式:(Github中下載)
db_pool目錄下有兩個目錄,mysql_pool目錄為MySQL連接池代碼,redis_pool為redis連接池代碼
下面介紹mysql_pool
CDBConn解析
概念: 代表一個數(shù)據(jù)連接對象實例
相關(guān)成員:
m_pDBPool:該數(shù)據(jù)庫連接對象所屬的數(shù)據(jù)庫連接池
構(gòu)造函數(shù): 綁定自己所屬于哪個數(shù)據(jù)庫連接池
Init()函數(shù): 創(chuàng)建數(shù)據(jù)庫連接句柄
CDBPool解析
概念:代表一個數(shù)據(jù)庫連接池
相關(guān)成員:
Init()函數(shù):常見指定數(shù)量的數(shù)據(jù)庫實例句柄,然后添加到m_free_list中,供后面使用
GetDBConn()函數(shù): 用于從空閑隊列中返回可以使用的數(shù)據(jù)庫連接句柄
RelDBConn()函數(shù): 程序使用完該數(shù)據(jù)庫句柄之后,將句柄放回到空閑隊列中
測試之前,將代碼中的數(shù)據(jù)庫地址、端口、賬號密碼等改為自己的(代碼中有好幾處)
進入MySQL, 創(chuàng)建mysql_pool_test數(shù)據(jù)庫
進入到mysql_pool目錄下, 創(chuàng)建一個build目錄并進入 :
然后輸入如下的命令進行編譯
之后就會在目錄下生成如下的可執(zhí)行文件
輸入如下兩條命令進行測試: 可以看到不使用數(shù)據(jù)庫連接池,整個操作耗時4秒左右;使用連接池之后,整個操作耗時2秒左右,提升了一倍
源碼下載
下面介紹redis_pool
測試
進入到redis_pool目錄下, 創(chuàng)建一個build目錄并進入 :
然后輸入如下的命令進行編譯
之后就會在目錄下生成如下的可執(zhí)行文件
輸入如下的命令進行測試: 可以看到不使用數(shù)據(jù)庫連接池,整個操作耗時182ms;使用連接池之后,整個操作耗時21ms,提升了很多
進入redis,可以看到我們新建的key:
數(shù)據(jù)庫連接池的主要操作如下: (1)建立數(shù)據(jù)庫連接池對象(服務器啟動)。 (2)按照事先指定的參數(shù)創(chuàng)建初始數(shù)量的數(shù)據(jù)庫連接(即:空閑連接數(shù))。 (3)對于一個數(shù)據(jù)庫訪問請求,直接從連接池中得到一個連接。如果數(shù)據(jù)庫連接池對象中沒有空閑
這是關(guān)于php進階到架構(gòu)之 swoole 系列學習課程:第三節(jié):mysql連接池
學習目標 :
了解什么是mysql連接池,以及mysql使用場景。能在實際工作使用連接池(數(shù)據(jù)庫連接池,redis連接池等等)解決高并發(fā)帶來的問題。
場景 :
每秒同時1000個并發(fā),但mysql數(shù)據(jù)庫同時只支持400個連接,這樣mysql就會宕機
解決方案 :
使用連接池,這個連接池建立了300個與mysql的連接對象,這1000個并發(fā)有序地共享連接池里的300個連接。
連接池的使用不但解決了mysql在高并發(fā)情況下宕機問題,還額外提高了性能。因為和mysql建立連接,消耗較大。使用連接池只需要連接一次mysql。
永不斷開,需要程序常駐內(nèi)存,這就需要借助swoole實現(xiàn)。
數(shù)據(jù)庫連接池是程序啟動時,建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接。由程序動態(tài)的對連接池中的連接進行申請,使用,釋放和回補。
分類: 電腦/網(wǎng)絡 程序設計 其他編程語言
問題描述:
JSP MYSQL 連接池的配置,高手來QQ***********在線等詳細哦
解析:
Jboss數(shù)據(jù)庫連接池
wwx 為數(shù)據(jù)庫名
UserInfor為表名
數(shù)據(jù)庫用戶名和密碼分別為:root root
參考 matrix/translation/Wiki.jsp?page=J2EEEJB_JbossJDBC
(該blog 包括幾個主要數(shù)據(jù)庫的連接)
MySQL是一個開放源代碼的數(shù)據(jù)庫,有很多開源項目和小型的社團都在使用它。
一 把mysql-connector-java-3.1.11-bin.jar復制到/server/default/lib目錄下,
(需要mysql-connector-java-3.0.16-ga.zip包 將里面的jar文件取出)
二 再把/docs/examples/jca/mysql-ds.xml復制到/server/default/deploy目錄下。修改mysql-ds.xml文件,設置為 .mysql.jdbc.Driver再把設置為jdbc:mysql/,其中是數(shù)據(jù)庫主機名是數(shù)據(jù)庫名。
例:datasources
local-tx-datasource
jndi-nameMySqlDS/jndi-name
connection-urljdbc:mysqllocalhost:3306/wwx/connection-urlwwx
driver-class.mysql.jdbc.Driver/driver-class
user-nameroot/user-name
passwordroot/password
/local-tx-datasource
/datasources
注意:如果localhost不行 就用127.0.0.1 這個一定沒問題!
還有就是如果數(shù)據(jù)庫沒有密碼!那么就這樣password/password
三 然后需要設置standardjaws.xml (或 jaws.xml 注: \server\default\conf目錄下)文件的和元素:
jaws
datasourcejava:/MySqlDS/datasource
type-mappingmySql/type-mapping
。。。。。。。
/jaws
四 同樣也需要把standardjbosscmp-jdbc.xml (或 jbosscmp-jdbc.xml文件 注: \server\default\conf目錄下)的 和 元素設置為下面這樣:
jbosscmp-jdbc
defaults
datasourcejava:/MySqlDS/datasource
datasource-mappingmySql/datasource-mapping
/defaults /jbosscmp-jdbc
說明:datasource-mappingmySql/datasource-mapping在我的Jboss里面是被注釋掉的,但我把拿回來! 就是把 ----和------ 都刪掉!
五 最后再修改login-config.xml(\server\default\conf目錄下)文件來使用MySQL:
application-policy name = "MySqlDbRealm"
authentication
login-module code = ".jboss.resource.security.ConfiguredIdentityLoginModule" flag = "required"
module-option name ="principal"wwx/module-option
module-option name ="userName"root/module-option
module-option name ="password"root/module-option
module-option name=managedConnectionFactoryName jboss.jca:service=LocalTxCM,name=MySqlDS
/module-option
/login-module
/authentication
/application-policy
說明:這段代碼就直接 copy到login-config.xml里面就ok!不知道往哪放嗎?
嘿嘿,就放在policy 下面吧!
還有就是如果數(shù)據(jù)庫沒有密碼!那么就這樣module-option name ="password"/module-option
六 修改了mysql-ds.xml, standardjaws.xml, standardjbosscmp-jdbc.xml,和 login-config.xml 文件就可以在Jboss上使用MySQL了。
七 調(diào)試代碼
在jboss-4.0.2/server/default/deploy下 建個文件夾 : test.war
里面test.jsp, 代碼如下!
%@pageimport="javax.naming.*"%
%@pageimport="javax.sql.*"%
%@pageimport="java.sql.*"%
%
try {
Context ctx = new InitialContext(); 得到初始化上下文
Object obj = ctx.lookup("java:/MySqlDS");查找連接池
DataSource ds = (DataSource) obj;轉(zhuǎn)換成DataSource
Connection connect = ds.getConnection();從連接池中得到一個連接
Statement stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery("select * from num");這是你的數(shù)據(jù)庫的表噢!
while(rs.next()){
out.println(rs.getObject("NO"));取出一個字段
}
} catch (NamingException e) {
e.printStackTrace();
} catch(SQLException e1){
e1.printStackTrace();
}
out.flush();
out.close();
%