但在使用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)才有連線釋放的功能。
使用連線池時,當連線閒置過久被中斷,連線池則會自動移除已失效連線,並在已建立連線數扣掉已中斷的連線,可以供下次讓連線池繼續建立新的連線,不用擔心連線中斷的問題。
沒有留言:
張貼留言