使用gopkg.in/mgo.v2 進行MongoDB 時的同時注意事項
使用gopkg.in/mgo 將MongoDB 整合到Go Web 應用程式時.v2,必須考慮並發最佳實務以獲得最佳效能和資源利用率。本文解決了以下問題:
單一 mgo.Session 是否可以在 Web 應用程式中同時使用,例如在 http.Handler 中,或者應該使用 Session.Copy 和Session.Close建立會話池
解釋:
與最初的假設相反,mgo.Session 確實可以安全地並發使用。如官方文件中所述,「所有Session 方法都是並發安全的,並且可以從多個Goroutine 調用。」
但是,這並不意味著在並發設定中僅使用一個mgo.Session 是有利的。會話會自動管理連線池,但使用單一會話會限制同時利用多個連線的能力,並且可能會跨伺服器節點分散(如果可用)。
為每個請求建立新會話,必要時複製它們,然後關閉正確地使用它們(使用 Session.Close 和 defer)可以實現最佳的資源利用率。透過管理多個連接,系統可以同時使用更多連接和伺服器節點,從而為資料庫和最終用戶提供更快的回應時間。
Session.Close 不會終止與伺服器的底層連接,但而是將其返回到池中,使其可供其他會話拾取。
有關進一步的見解,請參閱有關會話效能的相關討論:mgo - 查詢效能似乎始終很慢(500-650 毫秒)。
以上是單一 mgo.Session 足以在 Go Web 應用程式中並發使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!