gopkg.in/mgo.v2中的并发(Mongo,Go)
我希望在用Go编写的webapp中使用MongoDB。
我可以mgo.Session
同时在Web应用程序中使用它吗?例如在http.Handler
或者我应该叫Session.Copy
和Session.Close
- >会议的化妆池。
在我读到某个池已经在其中实现mgo.Session
,我可以同时使用会话以及在其他地方读到我需要Copy
和的地方,这听起来很矛盾Close
。
回答:
的mgo.Session
是同时使用安全。引用其文档:
所有Session方法都是并发安全的,可以从多个goroutine中调用。
但这并不意味着您不应该通过在拨号时获得的初始会话上调用Session.Copy()
或来并行创建和使用更多它们Session.Clone()
。
并发安全并从中使用更多好处不会 彼此排斥 (它们不是 互斥的
)。虽然你可以使用一个单一mgo.Session
的够程的任意数,不会很好地扩展,将无法形成规模 ,在所有
。会话会自动管理一个连接池,甚至可能管理到多个服务器节点的连接,但是如果您使用的是单个Session
,则不会利用这一点。通过Session
在每个请求的开始处创建一个新请求(如果需要),并在结束时适当关闭它(使用Session.Close()
;最好使用来调用defer
),您正在利用可能同时使用多个连接(可能与多个服务器节点(如果有)的连接)的优势,从而更好地利用服务器资源;并获得更快的响应时间(从数据库,最终到HTTP最终用户)。调用Session.Close()
不会关闭与服务器的基础连接,它只会将连接放回池中,以供其他会话使用。
以上是 gopkg.in/mgo.v2中的并发(Mongo,Go) 的全部内容, 来源链接: utcz.com/qa/420535.html