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
也有设置 MaxConnIdleTime
和 MinPoolSize
属性的方法。
但要知道这不会加快速度。如果你有十万个 goroutines 都与 MongoDB 交互,很可能 MongoDB 将是你的瓶颈。
如何在 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
也有设置 MaxConnIdleTime
和 MinPoolSize
属性的方法。
但要知道这不会加快速度。如果你有十万个 goroutines 都与 MongoDB 交互,很可能 MongoDB 将是你的瓶颈。