Go mgo 包中的连接池
Posted
技术标签:
【中文标题】Go mgo 包中的连接池【英文标题】:Connections pool in Go mgo package 【发布时间】:2014-06-07 01:44:57 【问题描述】:在running-mongodb-queries-concurrently-with-go 的文章中说 mgo.DialWithInfo :创建一个会话来维护与 MongoDB 的套接字连接池,但是当我在函数 DialWithInfo 的 documentacion 中查找时,我没有找到这样的东西谈谈池连接,只有我在Dial Function Dial Function 中找到了一些内容:对于给定的集群,此方法通常只调用一次。然后在获得的会话上使用 New 或 Copy 方法建立到同一集群的更多会话。这将使它们共享底层集群,并适当地管理连接池。
有人能告诉我 MGO 上的池连接是如何工作的吗?是否可以设置这个池? 是真的 DialWithInfo 创建了一个池连接还是只有 Dial 函数创建了这个池?提前致谢
【问题讨论】:
【参考方案1】:查看source code for the Dial function calls,可以看到Dial
函数调用了DialWithTimeout
函数,后者又调用了DialWithInfo
函数。因此,要回答您关于函数之间差异的问题,似乎Dial
是DialWithTimeout
的便利包装器,而后者又是DialWithInfo
的便利包装器,因此它们会产生相同的连接池。
至于如何管理该连接池,您的问题已经解决了。
然后在获得的会话上使用 New 或 Copy 方法建立到同一集群的更多会话。这将使它们共享底层集群,并适当地管理连接池。
所以单次调用Dial
或DialWithTimeout
或DialWithInfo
将建立连接池,如果您需要多个会话,请使用session.New()
或session.Copy()
方法从返回的会话中获取它从您选择使用的任何拨号功能。
【讨论】:
但是,应该使用.Copy()
,因为它保留了身份验证(如果适用)。以上是关于Go mgo 包中的连接池的主要内容,如果未能解决你的问题,请参考以下文章