goroutine 创建多个 mongodb 连接

goroutine create multiple mongodb connection

如何在 golang 中管理 MongoDB 超过 100000 个 goroutines 的连接。

我创建了一个 *mongo.Client 实例,然后使用同一个客户端,但它创建了多个连接。

mongo.Client 管理一个内部连接池。您不必为此担心。 mongo.Client 同时使用是安全的。

如果你想限制内部池,你可以在连接时使用 ClientOptions。例如:

clientOpts := options.Client().ApplyURI("<your-connection-string>").
    SetMaxPoolSize(100) // Allow no more than 100 connections

client, err := mongo.Connect(context.TODO(), clientOpts)
if err != nil {
    log.Fatal(err)
}

引用自ClientOptions.SetMaxPoolSize()

SetMaxPoolSize specifies that maximum number of connections allowed in the driver's connection pool to each server. Requests to a server will block if this maximum is reached. This can also be set through the "maxPoolSize" URI option (e.g. "maxPoolSize=100"). The default is 100. If this is 0, it will be set to math.MaxInt64.

ClientOptions 也有设置 MaxConnIdleTimeMinPoolSize 属性的方法。

但要知道这不会加快速度。如果你有十万个 goroutines 都与 MongoDB 交互,很可能 MongoDB 将是你的瓶颈。