加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

什么时候在golang Web服务器上准备postgresql语句?

发布时间:2020-12-16 09:28:06 所属栏目:大数据 来源:网络整理
导读:我有一个连接到 postgresql数据库的Web服务器.据我所知,postgresql驱动程序在内部管理连接池,因此我将数据库连接作为全局变量. 我正在使用准备好的语句,我不知道在服务器启动之前在我的main函数中提前准备它们是不是一个好主意,或者在我的请求处理程序中进行
我有一个连接到 postgresql数据库的Web服务器.据我所知,postgresql驱动程序在内部管理连接池,因此我将数据库连接作为全局变量.

我正在使用准备好的语句,我不知道在服务器启动之前在我的main函数中提前准备它们是不是一个好主意,或者在我的请求处理程序中进行(如下所示).我是golang的新手.我认为使语句全局化更有效,但我不确定.请帮忙.

var db *sql.DB

func main() {
  router = pat.New()
  router.Get("/",handler)
  db,e := sql.Open("postgres","...")
  ...
  http.ListenAndServe("127.0.0.1",router)
}

func handler(w http.ResponseWriter,r *http.Request) {
  s,e := db.Prepare("select * from mytable where field=$1")
  r,e := s.Exec(123)
  ...
}

解决方法

这一切都取决于您的用例.根据经验,我会说你应该在运行服务器之前准备好你的语句,原因有很多:

>如果语句未正确准备,则无法启动.如果您即时准备它们,失败的语句可能会在启动后很长时间内使整个程序无效.
>如果事先准备它们,则不必处理并发:如果需要时进行准备,则必须使用同步机制来确保不会多次并行准备语句,这将导致SQL服务器停止运行在火焰中……
>处理起来更简单.

至于你的数据库句柄,你应该使语句全局化,以便随时使用它们而不必传递指针.如果您发现自己处理许多语句,例如超过10-15(任意数字),您可能会发现将所有与数据库相关的内容(数据库初始化,查询等)放入主包的子包中会更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读