阅读本文:http://go-database-sql.org/accessing.html
它说sql.DB对象设计为长期存在,并且我们不应经常使用Open()和Close()数据库。但是,如果我有10个不同的MySQL服务器,我应该怎样做呢?我在每个服务器中都有511个数据库,例如Pinterest用MySQL分割数据的方式,我应该怎么做?
那么我不需要一直使用新数据库不断访问新节点吗?据我所知,我必须始终打开和关闭数据库连接,具体取决于我必须访问的节点和数据库。
它还说:
如果不将sql.DB视为长期存在的对象,则可以 遇到诸如重用不良和连接共享等问题, 耗尽可用的网络资源,或者由于偶发的故障 许多TCP连接仍处于TIME_WAIT状态。这样 问题是你没有使用数据库/ sql的迹象 设计的。
这会有问题吗?那我该怎么解决这个问题呢?
答案 0 :(得分:0)
我也对这个问题感兴趣。我猜可能有这样的解决方案:
最小化池db.SerMaxIdleConns(N)
制作map[serverID]*sql.DB
。如果没有这样的连接 - 将其添加到地图中。
让Dara更加本地 - 所以后端通常会转到“他们的”数据库。然而Pinterest似乎没有使用它。
增加后端计算机上的套接字和文件数量,以便它们可以保持更多的开放连接。
提供一些合理的空闲超时,以便可以关闭非常旧的未使用连接。