gpt4 book ai didi

mongodb - gopkg.in/mgo.v2 中的并发性(Mongo、Go)

转载 作者:IT王子 更新时间:2023-10-29 01:08:30 29 4
gpt4 key购买 nike

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

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

或者我应该调用 Session.CopySession.Close -> 生成 session 池。

这听起来很矛盾,我读到池已经在 mgo.Session 内部实现,我可以同时使用 session ,而在其他地方我读到我需要 Copy关闭

最佳答案

mgo.Session同时使用是安全的。引用其文档:

All Session methods are concurrency-safe and may be called from multiple goroutines.

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

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

另请参阅有关使用 Session 的相关问题:mgo - query performance seems consistently slow (500-650ms)

关于mongodb - gopkg.in/mgo.v2 中的并发性(Mongo、Go),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42492020/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com