新聞中心
隨著互聯(lián)網(wǎng)的快速發(fā)展,數(shù)據(jù)庫連接池作為一種基礎(chǔ)技術(shù)成為了每個開發(fā)人員必須掌握的技能。數(shù)據(jù)庫連接池可以提高數(shù)據(jù)庫連接的效率和穩(wěn)定性,特別是在高并發(fā)的情況下,其重要性更加凸顯。然而,不同的數(shù)據(jù)庫連接池在性能和穩(wěn)定性方面有著不同的取舍。在開發(fā)過程中,我們必須根據(jù)應(yīng)用場景選擇最合適的數(shù)據(jù)庫連接池。那么,在性能和穩(wěn)定性兩個方面,哪個更重要呢?本文將從不同的角度進(jìn)行分析。

一、性能
如果我們要查詢一條數(shù)據(jù),需要經(jīng)過的步驟如下:應(yīng)用程序發(fā)出請求、Java連接數(shù)據(jù)庫、建立連接、傳輸數(shù)據(jù)、關(guān)閉連接等等。這個過程很耗費時間,而連接池在連接的建立和關(guān)閉上都要比單獨進(jìn)行連接要快,這樣就可以在單個連接和并發(fā)連接之間平衡。因此,性能是連接池最為關(guān)鍵的優(yōu)勢之一。
1.1 普通連接和連接池的對比
給定一個請求,該請求要在五秒鐘內(nèi)從數(shù)據(jù)庫中完成。如果使用普通連接,則查詢步驟如下:
1. 與數(shù)據(jù)庫建立連接(假定需要3秒鐘);
2. 進(jìn)行查詢操作(假定需要2秒鐘);
3. 關(guān)閉連接(假定需要1秒鐘)。
使用連接池的情況下:
1. 從連接池中取得一個連接(假定需要一秒鐘);
2. 進(jìn)行查詢操作(假定需要2秒鐘);
3. 關(guān)閉連接并返回到連接池中(假定需要一秒鐘)。
通過性能的對比可以發(fā)現(xiàn),使用連接池的效率要更高。之一種情況需要6秒鐘,而第二種情況只需要4秒鐘。
1.2 數(shù)據(jù)庫連接池的性能對比
不同的數(shù)據(jù)庫連接池在性能上也有所不同。我們將以Tomcat和HikariCP連接池為例,進(jìn)行性能對比。
Tomcat連接池是在Tomcat服務(wù)器上的JDBC連接池,它封裝了通用的JDBC操作并提供了功能強大的線程池、連接池等機(jī)制,具有高可擴(kuò)展性和可用性。
HikariCP連接池是一個非常快速、輕量級的連接池,使用Java編寫,內(nèi)置了線程池和快速連接機(jī)制。
測試環(huán)境:4核Intel?Core?i7-2600CPU @ 3.40GHz,Ubuntu 16.04,上海云棲實驗室。
測試結(jié)論:HikariCP連接池的讀寫速度更快、連接數(shù)更快。
1.3
性能就像是燃油,直接關(guān)系到汽車的速度。無論是普通連接,還是使用連接池,性能都是開發(fā)人員必須考慮到的問題。并且在連接池的選用上,也需要根據(jù)實際情況進(jìn)行選擇。
二、穩(wěn)定性
性能是連接池一個重要的優(yōu)點,但穩(wěn)定性同樣重要。當(dāng)數(shù)據(jù)庫運行不正?;虺霈F(xiàn)故障時,連接池的穩(wěn)定性就更顯得重要。
2.1 可用性
連接池的可用性根據(jù)數(shù)據(jù)采樣進(jìn)行測試。我們用Apache JMeter對Tomcat和HikariCP連接池進(jìn)行測試,并進(jìn)行數(shù)據(jù)對比。我們通過三次隨機(jī)請求測試,測試結(jié)果如下:
可以看出,HikariCP連接池的錯誤處理機(jī)制次數(shù)少于Tomcat連接池,拉近兩者之間的平均響應(yīng)時間消耗,讓整個響應(yīng)更加穩(wěn)定。
2.2 連接池的失效和恢復(fù)
要確保數(shù)據(jù)庫連接池的穩(wěn)定性,我們需要進(jìn)行故障測試和恢復(fù)測試。
用于測試HikariCP連接池的簡單Python腳本在連接中斷和快速恢復(fù)后的響應(yīng)時間上表現(xiàn)出色。這是因為HikariCP使用了一種名為“不公平”的機(jī)制,這種機(jī)制允許一個線程阻塞更長時間,從而確保更快的Irakesponsetimes。
2.3
穩(wěn)定性就像氣囊,是我們開發(fā)人員不得不考慮的一個因素。這是因為如果連接池不穩(wěn)定,我們使用數(shù)據(jù)庫的體驗就會很差,甚至可能出現(xiàn)程序中斷等問題,這樣會對整個系統(tǒng)造成極大的影響。
三、 性能和穩(wěn)定性哪個更重要?
性能和穩(wěn)定性是連接池開發(fā)中最關(guān)鍵的兩個方面,它們對應(yīng)的是馬力和安全性。這兩個因素是互相關(guān)聯(lián)的,不能單純地將二者分開。如果只關(guān)注性能,導(dǎo)致連接池的穩(wěn)定性不足,就像一個過于強勁的賽車,可能產(chǎn)生各種危險,同時也會讓程不停地炸,從而造成整個系統(tǒng)的崩潰。同理,如果只考慮穩(wěn)定性,可能會得到一個過分保守的解決方案,這樣可能會破壞連接池的性能優(yōu)勢。
結(jié)論:
盡管性能和穩(wěn)定性的關(guān)系復(fù)雜,但我們?nèi)匀恍枰獙ふ乙粋€平衡點。我們需要知道什么是穩(wěn)定性,它是我們與用戶共享的安全感,以及什么是性能,它是我們向用戶提供高效Web應(yīng)用程序的方式。我們需要記住,在實際開發(fā)中,我們需要根據(jù)應(yīng)用程序、數(shù)據(jù)集和場景來選擇最合適的連接池,以確保我們達(dá)到了良好的性能和穩(wěn)定性兩者之間的平衡。
相關(guān)問題拓展閱讀:
- JDBC數(shù)據(jù)庫連接池問題
- 用的proxool的數(shù)據(jù)庫連接池,怎么把cpu占用率降下去
JDBC數(shù)據(jù)庫連接池問題
1.可以
2.可以
3.如果都用一個Connection,并發(fā)怎么辦,事物怎么處理?
4.同上
5.(DBCP,C0)只是連接池,關(guān)閉連接是在程序中控制的。如果是用spring是在請求結(jié)束時spring自動關(guān)閉的梁此。
6.不是,連接池的姿雀作用就是close連接是不close物理連接。橡冊迅
7.連接池是web應(yīng)用層面東西。在Web服務(wù)器都關(guān)了,連接池就沒有了啊。
8.同上。
9.“關(guān)閉全部連接”有語義歧義。
用的proxool的數(shù)據(jù)庫連接池,怎么把cpu占用率降下去
更好不要用數(shù)據(jù)庫連接池,而要用Access 2023數(shù)據(jù)庫管理系統(tǒng),它對中央處理器的占用率比較低。
Access 2023界面。
在Windows 7操作系統(tǒng)下,在Windows 7操作系統(tǒng)中,依次選擇【開始】|【所有程序】|【Microsoft Office】|【Microsoft Access 2023】,便可以啟動Access 2023,出現(xiàn)Access數(shù)據(jù)庫的窗口。
在Access 2023窗口中,可以看到Office 2023窗口的常見組成,如標(biāo)題欄、【文件】菜單、功能區(qū)、快速訪問工具欄、更大化按鈕、最小化按鈕、關(guān)閉按鈕、幫助按鈕、滾動條和狀態(tài)欄等。這個窗口中還有一個導(dǎo)航窗格,相當(dāng)于Access 2023之前的Access版本中的數(shù)據(jù)庫窗口。
導(dǎo)航窗格的使用。
導(dǎo)航窗格可以幫助組織或歸類數(shù)據(jù)庫對象,并且是打開更改數(shù)據(jù)庫對象設(shè)計的主要方式。在打開數(shù)據(jù)庫時,數(shù)據(jù)庫對象的名稱將顯示在導(dǎo)航窗格中,數(shù)據(jù)庫對象包括表、窗體、報表、頁、宏和模塊。導(dǎo)航窗格把數(shù)據(jù)庫對象劃分為幾個類別,各個類別又分為幾個組。
選項卡式文檔的裂肢使用。
Access 2023用選項卡式文檔顯示數(shù)據(jù)庫對象,而不是數(shù)據(jù)庫窗口。為了便于日常的交互使用,采用選項卡式文檔界面將更加方便。
創(chuàng)建空白數(shù)據(jù)庫。
利用Access 2023創(chuàng)建的數(shù)據(jù)庫屬于關(guān)系型數(shù)據(jù)庫,是相關(guān)對象的,包括表、查詢、窗體、報表、宏、模塊和數(shù)據(jù)訪問頁。每個對象都是數(shù)據(jù)庫中的一個組成部分。表是數(shù)據(jù)庫的,記錄了數(shù)據(jù)庫中全部的數(shù)據(jù)內(nèi)容,其它對象是Access提供的工具,用來對數(shù)據(jù)庫進(jìn)行維護(hù)和管理。
在Access 2023中,所謂空白數(shù)據(jù)庫,指的是一個沒有表、查詢和報表等內(nèi)容的數(shù)據(jù)庫。
啟動Access 2023,單擊【文件】菜單,選擇【新建】命令,在右側(cè)的皮枝可用模板中選燃源敏擇【空數(shù)據(jù)庫】按鈕,單擊【文件名】右側(cè)的按鈕,打開【文件新建數(shù)據(jù)庫】對話框,在對話框中選擇保存新文檔的文件夾,單擊【確定】按鈕。
在【文件名】文本框中輸入新建的數(shù)據(jù)庫名,單擊【創(chuàng)建】按鈕即可創(chuàng)建一個空白數(shù)據(jù)庫。
現(xiàn)在常用的開源數(shù)據(jù)庫連接池主要有c3p0、dbcp、proxool三種,其中:
Spring推薦使用dbcp;
Hibernate 推薦使用c3p0和proxool;
1、 DBCP:apache
DBCP(DataBase connection pool)數(shù)據(jù)庫連接池。是apache上的一個 java連接池項目,也是 tomcat使用的連接池組件。單獨使用dbcp需要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立數(shù)據(jù)庫連接是一個非常耗時耗資源的行為,所以通過連接池預(yù)先同數(shù)據(jù)庫建立一些連接,放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫連接時直接到連接池中申請一個就行,用完后再放回去。dbcp沒有自動的去回收空閑連接的功能。
2、 C0:
C0是一個開源的jdbc連接池,它實現(xiàn)了數(shù)據(jù)源和jndi綁定,支持jdbc3規(guī)范和jdbc2的標(biāo)準(zhǔn)擴(kuò)展。c3p0是異步操作的,緩慢的jdbc操作通過幫助進(jìn)程完成。磨凳散擴(kuò)展這些操作可以有效的提升性能。目前使用它的開源項目有Hibernate,Spring等。c3p0有自動回收空閑連接功能。
3、 Proxool:Sourceforge
Proxool是一種Java數(shù)據(jù)庫連接池技術(shù)。是sourceforge下的一個開源項目,這個項目提供一個健壯、易用的連接池,最為關(guān)鍵的是這個連接池提供監(jiān)控的功能,方便易用,便于發(fā)現(xiàn)連接泄漏的情況。
對比:
1> 相同時間內(nèi)同等量的線程數(shù)和循環(huán)次數(shù)下:通過對三個連接池的三個標(biāo)志性性能測試參數(shù)(Average,median,90%Line)進(jìn)行比較發(fā)現(xiàn):性能dbcp粗枝 不同情況下的同一數(shù)據(jù)庫連接池測試:通過觀察 Average,median,90%Line三瞎氏個參數(shù)發(fā)
現(xiàn)三個連接池的穩(wěn)定性(三種連接池的三個測試參數(shù)的變化情況)依次:穩(wěn)定性dbcp>=c3p0>proxool。
結(jié)論:
通過對三種數(shù)據(jù)庫連接池的性能測試發(fā)現(xiàn),proxool和 c3p0能夠更好的支持高并發(fā),但是在穩(wěn)定性方面略遜于 dpcp;
關(guān)于數(shù)據(jù)庫連接池比較的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章名稱:比較不同數(shù)據(jù)庫連接池的優(yōu)劣:性能與穩(wěn)定性哪個更重要?(數(shù)據(jù)庫連接池比較)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/djespih.html


咨詢
建站咨詢
