用 1.3 版本使用 Go 开始,连接 MongoDB 使用的驱动中,最常见的就是:mgo.v2

这个库一度是唯一的选择,它的接口设计合理,与 Golang/MongoDB/bson 适配的也做的不错。然而这个库长期处于无人看管的状态,有一大堆让人难以忍受 bug,其中我们遇到的就有不少:

maxIdleTimeoutminPoolSize

在我们的线上项目中,偶尔的业务峰值会照成某几个服务短时间大量的 db 操作,而一旦这些 db 操作带来的连接数量被撑大之后,耗尽 db 的连接数资源之后。其他的服务就无法连接到此 db 了( lass 的云服务器供应商提供的 MongoDB 实例的连接数都不高)。

后来终于有人受不了了:

mgo.v2
sync.Pool
mgo.v2