用 1.3 版本使用 Go 開始,鏈接 MongoDB 使用的驅動中,最多見的就是:mgo.v2git
這個庫一度是惟一的選擇,它的接口設計合理,與 Golang/MongoDB/bson 適配的也作的不錯。然而這個庫長期處於無人看管的狀態,有一大堆讓人難以忍受 bug,其中咱們遇到的就有很多:github
maxIdleTimeout
和 minPoolSize
)。在咱們的線上項目中,偶爾的業務峯值會照成某幾個服務短期大量的 db 操做,而一旦這些 db 操做帶來的鏈接數量被撐大以後,耗盡 db 的鏈接數資源以後。其餘的服務就沒法鏈接到此 db 了( lass 的雲服務器供應商提供的 MongoDB 實例的鏈接數都不高)。服務器
後來終於有人受不了了:數據結構
globalsign/ mgo
新的 MongoDB 驅動,不只修復了 mgo.v2
可怕的鏈接池問題,還帶來的不少很是棒的特性:併發
sync.Pool
提升了 bson 序列化的性能,參見這裏。剩下的各類 bug 修復和改進能夠參考該項目的 github 主頁,改進點很是多,強烈建議替換掉 mgo.v2
。性能