【发布时间】:2017-06-15 08:53:15
【问题描述】:
在我当前的项目中,每次用户提出请求时,我都会打开一个新的数据库连接。例如:
func login(w http.ResponseWriter, r *http.Request) {
...
db, err := sqlx.Connect("postgres", "user=postgres password=*** dbname=postgres")
if err != nil {
ErrorWithJSON(w, err.Error(), http.StatusBadRequest)
return
}
db.SetMaxIdleConns(0)
db.SetConnMaxLifetime(time.Second * 30)
user, err := loginManager(db, m)
...
err = db.Close()
}
当我搜索其他人的代码时,我看到大多数开发人员为数据库连接创建了一个全局变量,将其设置在 main 上并在整个项目中使用此变量。
我想知道这些方法之间有什么区别吗?如果我使用全局变量,当 5 个不同的用户请求注册/登录等时会有任何延迟。如果会有延迟,我是否应该创建多个数据库连接并将它们存储在一个切片中以供将来的请求,以便我可以在用户时随机选择提出要求。像一个简单的负载均衡器,我不知道?
很抱歉有多个问题。谢谢!
【问题讨论】:
标签: sql performance go connection-pooling