如果你有一个分片的MySQL数据库解决方案,你如何使用go-sql-driver?

时间:2017-11-15 00:35:40

标签: go

阅读本文:http://go-database-sql.org/accessing.html

它说sql.DB对象设计为长期存在,并且我们不应经常使用Open()和Close()数据库。但是,如果我有10个不同的MySQL服务器,我应该怎样做呢?我在每个服务器中都有511个数据库,例如Pinterest用MySQL分割数据的方式,我应该怎么做?

https://medium.com/@Pinterest_Engineering/sharding-pinterest-how-we-scaled-our-mysql-fleet-3f341e96ca6f

那么我不需要一直使用新数据库不断访问新节点吗?据我所知,我必须始终打开和关闭数据库连接,具体取决于我必须访问的节点和数据库。

它还说:

  

如果不将sql.DB视为长期存在的对象,则可以   遇到诸如重用不良和连接共享等问题,   耗尽可用的网络资源,或者由于偶发的故障   许多TCP连接仍处于TIME_WAIT状态。这样   问题是你没有使用数据库/ sql的迹象   设计的。

这会有问题吗?那我该怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

我也对这个问题感兴趣。我猜可能有这样的解决方案:

  1. 最小化池db.SerMaxIdleConns(N)

  2. 中的空闲连接数
  3. 制作map[serverID]*sql.DB。如果没有这样的连接 - 将其添加到地图中。

  4. 让Dara更加本地 - 所以后端通常会转到“他们的”数据库。然而Pinterest似乎没有使用它。

  5. 增加后端计算机上的套接字和文件数量,以便它们可以保持更多的开放连接。

  6. 提供一些合理的空闲超时,以便可以关闭非常旧的未使用连接。