为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中使用全局 mongo (mgo) 数据库有什么缺点?

在 golang 中使用全局 mongo (mgo) 数据库有什么缺点?

Go
慕工程0101907 2023-07-04 10:02:53
如果我们使用全局变量来处理数据库操作而不是将其作为参数传递给函数和方法或将其存储为结构中的字段,是否有任何缺点?这些缺点是什么(如果有的话)?假设我们在一个名为 Database 的项目中创建一个包,在该包内定义一个名为 DB 的变量var DB *mgo.Database,然后在项目的 main 函数中用我们的 mongo 数据库填充它:func main() {    session, err := mgo.Dial("localhost")    if err != nil {        fmt.Println(err)        return    }    database.DB = session.DB("mydatabase")    // project code    defer session.Close()}之后,我们使用database.DB与我们的数据库进行交互。请注意,将会有很多 goroutine 使用database.DB(如果有什么区别的话)该问题不基于意见,请花更多时间阅读和理解我再次重复这个问题不是基于意见,请花更多时间阅读和理解
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

使用全局初始化的数据库将其传递到需要的地方的过程是完善且合理的。


但是,只需database.DB以类似的方式使用


_ = database.DB.C(foo).Find(q).One(&bar)

整个地方有一个显着的缺点:您只使用底层连接池的一个连接,实际上确保了所有请求都按顺序处理。


所以你更想做的是这样的:


s := database.DB.Session.Copy()

_ = database.DB.C(foo).With(s).Find(q).One(&bar)

defer s.Close()

对于“并行”请求(有一些关于并行请求的警告,为了简洁起见,我省略了这些警告)。


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信