登录
首页 >  Golang >  Go问答

gopkg.in/mgo.v2 中的并发(Mongo,Go)

来源:Golang技术栈

时间:2023-04-06 17:48:54 130浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《gopkg.in/mgo.v2 中的并发(Mongo,Go)》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到golang等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我希望在用 Go 编写的 webapp 中使用 MongoDB。

我可以拥有一个mgo.Session并在网络应用程序中同时使用它吗?例如在http.Handler

或者我应该打电话Session.CopySession.Close-> 建立会话池。

在我读到池已经在其中实现的地方听起来很矛盾mgo.Session,我可以同时使用会话,而在我读到的其他地方我需要CopyClose.

正确答案

mgo.Session可以安全地同时使用。引用其文档:

所有 Session 方法都是并发安全的,可以从多个 goroutine 调用。

但这并不意味着您不应该通过在拨号时获得的初始会话上调用Session.Copy()或来并行创建和使用它们中的更多。Session.Clone()

并发安全并从使用更多它们中受益不会相互排斥(它们不是 相互排斥的 )。虽然您可以使用任意数量的 goroutines 中的一个,但它不会很好地扩展, 根本mgo.Session不会扩展。会话会自动管理一个连接池,甚至可能管理多个服务器节点,但如果您使用的是单个,则无法利用它。通过在每个请求的开头创建一个新的(如果需要),并在最后正确关闭它(使用; 最好调用 using __Session``SessionSession.Close()defer),您正在利用可能同时使用多个连接,可能连接到多个服务器节点(如果可用),从而更好地利用服务器资源;并获得更快的响应时间(从数据库,最终到您的 HTTP 最终用户)。调用Session.Close()不会关闭与服务器的底层连接,它只会将连接放回池中,准备好被另一个会话拾取。

另请参阅有关使用Sessions 的相关问题:[mgo - 查询性能似乎一直很慢(500-650ms)](https://stackoverflow.com/questions/40999637/mgo-query- performance-seems-consistently-slow-500-650ms/41000876#41000876)

到这里,我们也就讲完了《gopkg.in/mgo.v2 中的并发(Mongo,Go)》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>