學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

數(shù)據(jù)庫連接池

來源:北大青鳥總部 2023年02月07日 13:28

摘要: 數(shù)據(jù)庫連接的工作原理由三部分組成,包括連接池的建立、連接的使用管理、連接詞的關(guān)閉。

自互聯(lián)網(wǎng)誕生以來,不斷的產(chǎn)生了很多新架構(gòu)、新技術(shù)、新思想,在架構(gòu)層次來看,從之前的單機(jī)架構(gòu)—》SOA架構(gòu)— 〉微服務(wù)架構(gòu)—》中臺(tái)架構(gòu);在技術(shù)層次看,從之前的物理機(jī)部署—〉虛擬機(jī)部署— 》容器部署—〉kubernets部署,算法也逐漸演變成數(shù)據(jù)庫、云計(jì)算、機(jī)器學(xué)習(xí),移動(dòng)基站建設(shè)也從2G、3G、4G、5G、6G進(jìn)行演變;在設(shè)計(jì)思想上來看,從最初的瀑布式開發(fā)演變成敏捷開發(fā)、devops。所有在互聯(lián)網(wǎng)發(fā)生的這一切都只有一個(gè)目的,讓用戶更快的找到自己想要的東西、更快的解決問題,同時(shí)降低企業(yè)的成本。

所以對(duì)于應(yīng)用程序來說,資源是非常寶貴和稀缺的,這既包含了計(jì)算資源、存儲(chǔ)資源、網(wǎng)絡(luò)資源,也包含線程池資源、數(shù)據(jù)庫連接資源。如何利用好資源、提供最好的用戶體驗(yàn)成為企業(yè)最大的問題?應(yīng)用程序的執(zhí)行過程往往是這樣的,用戶在瀏覽器或app發(fā)起一個(gè)請(qǐng)求,通過web服務(wù)器解析加載前端資源給到用戶,同時(shí)將請(qǐng)求發(fā)送給應(yīng)用服務(wù)器處理用戶請(qǐng)求,在應(yīng)用服務(wù)器處理時(shí)可能會(huì)調(diào)用其它業(yè)務(wù)模塊、也可能會(huì)調(diào)用遠(yuǎn)程服務(wù)、但一定會(huì)調(diào)用數(shù)據(jù)庫,所以最重要的模塊便是數(shù)據(jù)庫,而最容易出現(xiàn)問題的地方也是數(shù)據(jù)庫,因此充分利用好數(shù)據(jù)庫資源十分重要。

在傳統(tǒng)互聯(lián)網(wǎng)時(shí)代,如果一個(gè)程序要訪問mysql要經(jīng)過tcp的三次握手與數(shù)據(jù)庫服務(wù)器建立可靠的連接、再進(jìn)行mysql用戶名和密碼認(rèn)證、執(zhí)行sql語句、關(guān)閉msql、關(guān)閉tcp連接,每一次訪問數(shù)據(jù)庫都要去建立連接,然后執(zhí)行,在釋放連接。這就會(huì)讓企業(yè)和用戶不“快”。用戶不快是因?yàn)樗群芫?,在這個(gè)過程中不斷的建立釋放網(wǎng)絡(luò)連接、不斷的訪問數(shù)據(jù)庫服務(wù)器,占據(jù)了網(wǎng)絡(luò)io資源,而且極可能達(dá)到數(shù)據(jù)庫服務(wù)器能處理的瓶頸,從而造成了用戶請(qǐng)求的等待。企業(yè)不快(樂)是因?yàn)橛脩舨豢欤ㄋ伲?/p>



在云計(jì)算時(shí)代,我們的思想是要充分的利用資源,將重復(fù)的事情抽象出來共用。在這個(gè)過程中,每個(gè)數(shù)據(jù)庫連接都需要去tcp三次握手建立連接、釋放連接,如果所有的數(shù)據(jù)庫連接都可以共享這建立連接和釋放連接的過程,那么網(wǎng)絡(luò)開銷、數(shù)據(jù)庫負(fù)載就會(huì)降下來了。這就是我們的數(shù)據(jù)庫連接池,它就是負(fù)責(zé)分配、管理、釋放數(shù)據(jù)庫連接的數(shù)據(jù)庫中間件,使得應(yīng)用程序可以重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接。



數(shù)據(jù)庫連接的工作原理由三部分組成,包括連接池的建立、連接的使用管理、連接詞的關(guān)閉。 目前在市場(chǎng)上有商用和開源的數(shù)據(jù)庫連接池,商用的以IBM的weblogic為主,而開源的則以阿里的DBCP為主,在互聯(lián)網(wǎng)時(shí)代,大家都習(xí)慣了免費(fèi)(雖然免費(fèi)的往往是最貴的),加上開源也便于大家操作實(shí)踐,因此我們使用DBCP將理論與實(shí)際結(jié)合來介紹數(shù)據(jù)庫連接池的“最佳實(shí)踐”~


? 連接池的建立

在系統(tǒng)初始化時(shí),連接池根據(jù)系統(tǒng)配置建立并在池中創(chuàng)建幾個(gè)連接對(duì)象,需要使用的時(shí)候就從池子中獲取即可,并且不允許用戶隨意的創(chuàng)建和關(guān)閉連接,從而帶來不必要的網(wǎng)絡(luò)開銷(建立tcp連接和釋放連接)。



初始化時(shí)選擇JDBC(Java DataBase Connectivity,Java數(shù)據(jù)庫連接管理)驅(qū)動(dòng)程序來進(jìn)行數(shù)據(jù)的連接,并選擇連接的數(shù)據(jù)庫類型(mysql)、數(shù)據(jù)庫服務(wù)器(localhost:3306)、數(shù)據(jù)庫(day14),并配置對(duì)應(yīng)的用戶名和密碼。


? 連接池的管理

有了連接池后,對(duì)連接數(shù)需要進(jìn)行分配和釋放等工作,這就是數(shù)據(jù)庫連接池的管理工作。當(dāng)用戶請(qǐng)求數(shù)據(jù)庫連接時(shí),系統(tǒng)會(huì)先判斷有沒有空閑的,如果有的話就分配給客戶使用;如果沒有空閑連接,系統(tǒng)會(huì)看看當(dāng)前所存在的連接數(shù)是否達(dá)到了最大可用值,沒有的話就創(chuàng)建一個(gè)新的連接給到用戶;如果沒有空閑的連接也達(dá)到了最大連接數(shù),就設(shè)置一個(gè)最長(zhǎng)等待時(shí)間,超過等待時(shí)間后告知用戶發(fā)生異常,停止等待;



? 連接池的關(guān)閉

當(dāng)應(yīng)用程序退出后,關(guān)閉掉池子中所有的連接,釋放資源即可。

其實(shí)這種“池”的思想在云計(jì)算時(shí)代特別的普遍,在一定程度上可以明顯優(yōu)化服務(wù)器應(yīng)用程序的性能,提高程序執(zhí)行效率和降低系統(tǒng)資源開銷。除了數(shù)據(jù)庫連接池、線程池之外,還有內(nèi)存池、對(duì)象池等。其中,對(duì)象池可以看成保存對(duì)象的容器,在進(jìn)程初始化時(shí)創(chuàng)建一定數(shù)量的對(duì)象。需要時(shí)直接從池中取出一個(gè)空閑對(duì)象,用完后并不直接釋放掉對(duì)象,而是再放到對(duì)象池中以方便下一次對(duì)象請(qǐng)求可以直接復(fù)用。內(nèi)存池也是如此的思想。池技術(shù)的優(yōu)勢(shì)是,可以消除應(yīng)用程序創(chuàng)建所帶來的延遲,從而提高系統(tǒng)的性能,讓用戶更快的找到自己想要的東西、更快的解決問題、更快樂。

這其實(shí)和我們生活中取快遞的場(chǎng)景很像。當(dāng)遇上618或雙十一這樣的大促時(shí),仿佛每個(gè)人都積蓄了洪荒之力一樣頃刻之間要把需要的、不需要的、想買的、不想買的全都買了,反正就是一個(gè)字,買。那買了東西,就會(huì)有物流公司和快遞小哥給你送過來啊。你購(gòu)買的是不同平臺(tái)不同商家的不同商品,那么不同的發(fā)貨時(shí)間不同的快遞公司不同的取件時(shí)間也是非常正常的現(xiàn)象,就會(huì)出現(xiàn)這樣的場(chǎng)景,每來一個(gè)快遞,你就得下樓去取一趟然后再回到寢室,而快遞小哥也是得等每個(gè)快遞都被人取了才算完成任務(wù),運(yùn)氣好點(diǎn)吧,能一次多取幾個(gè),運(yùn)氣不好的話只能一次取一個(gè),這樣你很不快(速)取到自己的所有包裹,你自然也不(快)樂。

但是人類是聰明的,不怕困難,迎難而上。在很多學(xué)校里都會(huì)有這樣的一個(gè)收貨點(diǎn)的存在,快遞小哥把快件放到收貨點(diǎn)就走了,你根據(jù)自己合適的時(shí)間去收貨點(diǎn)取快遞,通過這個(gè)收貨點(diǎn),將之前每次送快遞與取快遞的過程抽象為只要一次即可,這樣你很快(速)取到自己的所有包裹,你自然也很(快)樂。

至此,相信大家已經(jīng)完全掌握了數(shù)據(jù)庫連接池這個(gè)知識(shí)點(diǎn)了吧~


熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開班
報(bào)名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接