我在 golang 中使用 mysql 并阅读此文档。它说尽管在完成数据库后 Close() 是惯用的做法,但 sql.DB 对象被设计为长期存在的。不要频繁地打开() 和关闭() 数据库。我不知道应该连接多久。现在,如果需要,我会打开每个 http 请求的连接。是不是太频繁了?
2 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
在同一份文件的进一步下方,它写道:
相反,为您需要访问的每个不同的数据存储创建一个 sql.DB 对象,并保留它直到程序完成访问该数据存储。根据需要传递它,或者以某种方式使其在全球范围内可用,但保持打开状态。并且不要从短期函数中打开() 和关闭()。相反,将 sql.DB 作为参数传递到那个短暂的函数中。
如果不将 sql.DB 视为长期存在的对象,则可能会遇到诸如连接重用和共享不佳、可用网络资源耗尽或由于 TIME_WAIT 中剩余大量 TCP 连接而导致的零星故障等问题地位。此类问题表明您没有按照设计使用 database/sql。
打开和关闭数据库连接是一项代价高昂的操作,因此您希望尽可能避免这种情况。您绝对不想在每次请求后关闭连接(除非一天只有几个,即使这样,只要应用程序运行,您就可以保持打开状态)
database/sql 包在底层使用了连接池,因此您不必担心管理多个连接。
- 2 回答
- 0 关注
- 319 浏览
添加回答
举报
0/150
提交
取消