【问题标题】:goroutine create multiple mongodb connectiongoroutine 创建多个 mongodb 连接
【发布时间】:2021-06-07 05:11:05
【问题描述】:

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

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

【问题讨论】:

  • mongo.Client 管理一个内部连接池。您不必为此担心。 mongo.Client 可以安全地并发使用。您有什么问题或疑问?
  • @icza 但它显示超过 10000 个连接并且操作速度太慢,您能否提出任何解决方案,谢谢 :)

标签: mongodb go mongo-go


【解决方案1】:

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 指定驱动程序的连接池中允许到每个服务器的最大连接数。如果达到此最大值,对服务器的请求将被阻止。这也可以通过“maxPoolSize”URI 选项设置(例如“maxPoolSize=100”)。默认为 100。如果为 0,则设置为 math.MaxInt64。

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

但要知道这不会加快速度。如果你有十万个 goroutine 都与 MongoDB 交互,那么 MongoDB 很可能会成为你的瓶颈。

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2021-12-13
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2022-07-09
    • 2014-05-29
    相关资源
    最近更新 更多