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