學習足跡

2013年12月13日 星期五

Node.js的MySQL連線管理

在PHP的環境中,對伺服器發出Request時,PHP才去對MySQL建立連線並撈取或異動資料,而當PHP處理完成的時候會釋放原本的MySQL連線,或是連線斷線時自動重連。

但在使用Node.js去做連線時如果要在請求結束時,並不會自己釋放與MySQL的連線,或者連線斷線時也不會自己重新連線,所以要自己去控制所有的資料庫連線狀況。


我使用的Node.js的MySQL套件是node-mysql

npm install mysql@2.0.0-rc1
npm install felixge/node-mysql



Node.js

自己控制資料庫連線





在上述的情況下,可以在資料庫斷線時,自動去重新連線,但這樣的問題是,所有使用者都會使用到同一個連線去對資料庫(吃同一個全域變數),當使用者過多時會有連線會負荷不了的問題。

亦或可以使用區域變數來進行資料庫連線,這樣每個使用者用到的連線都會不一樣,可是這樣的話就要在使用者對資料庫請求結束後,手動關閉每個連線,因為這個連線當前的使用者已經沒有用到了,若未關閉會佔著資料庫連線數的資源。




使用資料庫連線池(Pooling connections)




使用資料庫連線池的時候,在連線池有可用還沒斷線的連線時,會將連線提供給使用者使用,若沒有可用連線,則會建立新的連線放到連線池中。

若連線池建立的總連線數等於設定的最多可建立的總連線數上限(connectionLimit),則不會再建立連線,再來會看設定的”是否等待pool連線釋放”設定值,如果為true,則這個查詢會一直等待有可用的連線時,再執行並呼叫callback,若設定值為false,則直接回傳查詢失敗的錯誤訊息。

在查詢完畢後,務必將該連線釋放回連線池,否則這個連線會一直閒置且也沒有辦法被使用,必須要安裝最新版的node-mysql(2.0.0-rc1)才有連線釋放的功能。

使用連線池時,當連線閒置過久被中斷,連線池則會自動移除已失效連線,並在已建立連線數扣掉已中斷的連線,可以供下次讓連線池繼續建立新的連線,不用擔心連線中斷的問題。



參考資料




沒有留言:

張貼留言