我应该始终在Go Web应用程序中打开1个全局数据库连接吗?还是应该每次打开和关闭它?

时间:2019-12-24 02:57:36

标签: mysql database postgresql go web-applications

Go中的网络应用程序。假设这是一个博客。假设每天有1000次课程。

我应该创建一个全局数据库连接并一直保持活动状态吗?还是应该在每次需要查询数据库时打开和关闭它?什么是一般规则?

2 个答案:

答案 0 :(得分:0)

您应该使用sql连接池来管理您的连接。 Golang数据库/ sql软件包提供了一种用于管理连接池的机制。在数据库/ sql程序包中配置maxIdle参数,以便您可以管理免费的连接池,以便在出现新的连接请求时重新使用。当连接池中没有空闲连接时,连接池将自动打开一个新连接。

答案 1 :(得分:0)

您应该为每个应用创建一个全局连接对象。此连接对象配置有连接池。每个连接对象都会根据配置给出一定数量的连接。

如果为每个请求创建并删除此连接,它将为每个请求创建并销毁连接池。

只需使用Singleton Pattern创建具有所需配置的全局连接对象,它将为您内部管理连接池。

另外,请正常关闭应用程序。当您收到终止应用程序信号时,请确保您正确关闭了全局连接对象。像这样:-

    shutdown := make(chan os.Signal, 1)
    signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
    <-shutdown
    connection.Close()