node.js - Node中如何正確使用MySQL的連接池?
問(wèn)題描述
在學(xué)習(xí)NodeJs連接數(shù)據(jù)庫(kù)做處理時(shí)(用的node-mysql庫(kù)),書(shū)中建議使用連接池的方式管理connection,說(shuō)是可以降低開(kāi)銷(xiāo)。但是具體如何在生產(chǎn)環(huán)境中使用,沒(méi)有給出更多的說(shuō)明。所以我產(chǎn)生了如下疑問(wèn):我到底該在什么情況下創(chuàng)建一個(gè)連接池?
想法1:在web服務(wù)器啟動(dòng)之后收到第一個(gè)數(shù)據(jù)庫(kù)連接請(qǐng)求時(shí),就創(chuàng)建一個(gè)連接池,然后它就一直存在,當(dāng)有需要用到數(shù)據(jù)庫(kù)的時(shí)候,就從連接池中拿出來(lái)使用。直到下一次服務(wù)器重啟,連接池才會(huì)被關(guān)閉。
想法2:在處理一個(gè)業(yè)務(wù)請(qǐng)求時(shí)時(shí),創(chuàng)建一個(gè)連接池,當(dāng)業(yè)務(wù)處理完之后就關(guān)掉。比如當(dāng)收到一個(gè)用戶(hù)的請(qǐng)求,我們要連接數(shù)據(jù)庫(kù)進(jìn)行N次查詢(xún)和N次修改時(shí),建立一個(gè)連接池,當(dāng)這個(gè)業(yè)務(wù)處理完之后,就關(guān)閉這個(gè)連接池。不過(guò),如果一下子有N個(gè)用戶(hù)發(fā)出請(qǐng)求,就需要同時(shí)創(chuàng)建多個(gè)連接池,總感覺(jué)哪里乖乖的。
官方文檔也沒(méi)有寫(xiě)這些東西。請(qǐng)問(wèn),具體該怎么辦呢?如果有更詳細(xì)講解這個(gè)話(huà)題的文章,多謝分享。謝謝
問(wèn)題解答
回答1:謝謝邀請(qǐng)。1.之所以用連接池,是因?yàn)轭l繁的建立、關(guān)閉連接,會(huì)極大的減低系統(tǒng)的性能。2.對(duì)于你的想法1,第一個(gè)請(qǐng)求過(guò)來(lái)創(chuàng)建連接池貌似挺好的,但是你的系統(tǒng)在第一次就有多個(gè)用戶(hù)同時(shí)請(qǐng)求時(shí),你還來(lái)不及創(chuàng)建就要調(diào)用,這就出現(xiàn)了問(wèn)題。所以建議在系統(tǒng)開(kāi)啟的時(shí)候就創(chuàng)建。3.想法2,違背了為什么我們使用連接池的目的,頻繁的連接,關(guān)閉。
回答2:基本是第一種的意思。連接池的目的就是減少數(shù)據(jù)庫(kù)連接的創(chuàng)建,所以當(dāng)然是不關(guān)閉的啦。然后稱(chēng)為池是因?yàn)樗且环N緩沖機(jī)制。比如這個(gè)池里一開(kāi)始是空的,來(lái)了一個(gè)請(qǐng)求,就創(chuàng)建一個(gè)連接交出去,用完了就還到這個(gè)池里,再來(lái)請(qǐng)求的時(shí)候,又能借出去了。那這時(shí)候如果又來(lái)一個(gè)請(qǐng)求,之前的連接還沒(méi)換回來(lái),池是空的,就需要再創(chuàng)建一個(gè)連接了,等大家都用完還回來(lái),池里就有兩個(gè)連接了。總結(jié)就是,如果池是空的,那就創(chuàng)建一個(gè)新連接借出去,不然就從池里拿一個(gè)連接借出去。當(dāng)然你也可以設(shè)置池的連接數(shù)上限,或者在連接一段時(shí)間都沒(méi)有被使用的情況下銷(xiāo)毀等等。
相關(guān)文章:
1. java - 接口中的成員變量怎么不是常量了?2. javascript - vue使用videojs+videojs-contrib-hls報(bào)錯(cuò)3. 關(guān)于phpstudy設(shè)置主從數(shù)據(jù)庫(kù)4. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?5. docker內(nèi)創(chuàng)建jenkins訪問(wèn)另一個(gè)容器下的服務(wù)器問(wèn)題6. golang - 用IDE看docker源碼時(shí)的小問(wèn)題7. angular.js - angular 配置代理proxy.conf.json后報(bào)錯(cuò),頁(yè)面返回500internal server error?8. javascript - 求救!網(wǎng)頁(yè)播放視頻只有聲音沒(méi)有畫(huà)面,網(wǎng)頁(yè)上傳視頻文件時(shí)怎么知道視頻的編碼為H264還是MPEG4??9. mysql如何配置遠(yuǎn)程php外網(wǎng)鏈接數(shù)據(jù)庫(kù)10. dockerfile - [docker build image失敗- npm install]
