node.js - Node中如何正確使用MySQL的連接池?
問題描述
在學(xué)習(xí)NodeJs連接數(shù)據(jù)庫做處理時(用的node-mysql庫),書中建議使用連接池的方式管理connection,說是可以降低開銷。但是具體如何在生產(chǎn)環(huán)境中使用,沒有給出更多的說明。所以我產(chǎn)生了如下疑問:我到底該在什么情況下創(chuàng)建一個連接池?
想法1:在web服務(wù)器啟動之后收到第一個數(shù)據(jù)庫連接請求時,就創(chuàng)建一個連接池,然后它就一直存在,當(dāng)有需要用到數(shù)據(jù)庫的時候,就從連接池中拿出來使用。直到下一次服務(wù)器重啟,連接池才會被關(guān)閉。
想法2:在處理一個業(yè)務(wù)請求時時,創(chuàng)建一個連接池,當(dāng)業(yè)務(wù)處理完之后就關(guān)掉。比如當(dāng)收到一個用戶的請求,我們要連接數(shù)據(jù)庫進(jìn)行N次查詢和N次修改時,建立一個連接池,當(dāng)這個業(yè)務(wù)處理完之后,就關(guān)閉這個連接池。不過,如果一下子有N個用戶發(fā)出請求,就需要同時創(chuàng)建多個連接池,總感覺哪里乖乖的。
官方文檔也沒有寫這些東西。請問,具體該怎么辦呢?如果有更詳細(xì)講解這個話題的文章,多謝分享。謝謝
問題解答
回答1:謝謝邀請。1.之所以用連接池,是因?yàn)轭l繁的建立、關(guān)閉連接,會極大的減低系統(tǒng)的性能。2.對于你的想法1,第一個請求過來創(chuàng)建連接池貌似挺好的,但是你的系統(tǒng)在第一次就有多個用戶同時請求時,你還來不及創(chuàng)建就要調(diào)用,這就出現(xiàn)了問題。所以建議在系統(tǒng)開啟的時候就創(chuàng)建。3.想法2,違背了為什么我們使用連接池的目的,頻繁的連接,關(guān)閉。
回答2:基本是第一種的意思。連接池的目的就是減少數(shù)據(jù)庫連接的創(chuàng)建,所以當(dāng)然是不關(guān)閉的啦。然后稱為池是因?yàn)樗且环N緩沖機(jī)制。比如這個池里一開始是空的,來了一個請求,就創(chuàng)建一個連接交出去,用完了就還到這個池里,再來請求的時候,又能借出去了。那這時候如果又來一個請求,之前的連接還沒換回來,池是空的,就需要再創(chuàng)建一個連接了,等大家都用完還回來,池里就有兩個連接了??偨Y(jié)就是,如果池是空的,那就創(chuàng)建一個新連接借出去,不然就從池里拿一個連接借出去。當(dāng)然你也可以設(shè)置池的連接數(shù)上限,或者在連接一段時間都沒有被使用的情況下銷毀等等。
相關(guān)文章:
1. python的文件讀寫問題?2. javascript - jquery hide()方法無效3. mysql里的大表用mycat做水平拆分,是不是要先手動分好,再配置mycat4. 怎么用css截取字符?5. css - 定位為absolute的父元素中的子元素 如何設(shè)置在父元素的下面?6. python - 獲取到的數(shù)據(jù)生成新的mysql表7. CSS3可否做出這個效果?8. window下mysql中文亂碼怎么解決??9. javascript - 圖片鏈接請求一直是pending狀態(tài),導(dǎo)致頁面崩潰,怎么解決?10. javascript - 請問 chrome 為什么會重復(fù)加載圖片資源?
