gpt4 book ai didi

sql - 如何在 Golang 中缓存到不同 Postgres/MySQL 数据库的连接?

转载 作者:行者123 更新时间:2023-12-03 10:06:27 24 4
gpt4 key购买 nike

我有一个应用程序,其中不同的用户可以连接到不同的数据库(可以是 MySQL 或 Postgres),跨不同数据库缓存这些连接的最佳方法是什么?我看到了一些连接池,但似乎它们更适用于一个数据库多个连接而不是多个数据库多个连接。
PS:
为了添加更多上下文,我正在设计一个 Multi-Tenancy 架构,其中每个租户连接到一个或多个数据库,我可以选择使用 map[string]*sql.DB其中 key 是数据库的 url,但是当我们有大量数据库时,它很难扩展。或者我们是否应该为每个传入请求通过连接 url 分片一个分片层,这样每台机器都会以 map[string]*sql.DB 的形式包含恰到好处的数据库连接数量。 ?
我想构建的软件的一个例子是 https://www.sigmacomputing.com/用户可以连接到多个数据库以处理不同的表。

最佳答案

MySQL 和 Postgres 都不允许在多个数据库用户之间共享连接,连接凭据中指定了单个数据库用户。如果您的意思是您的不同用户拥有自己的数据库凭据,则无法在他们之间共享连接。
如果“不同用户”是指您的应用程序用户,并且如果他们共享单个数据库用户以在应用程序中更深入地访问数据库,那么您无需对“缓存”连接执行任何特定操作。 sql.DB默认情况下,在其池中保留并重用打开的连接。
Go 使用 *database/sql.DB 自动打开、关闭和重用数据库连接.默认情况下,它保持最多 2 个连接打开(空闲)并在所有打开的连接都已经忙时在并发下打开无限数量的新连接。
如果您需要对池效率与数据库负载进行一些微调,您可能需要更改 sql.DB配置 .Set*方法,例如 SetMaxOpenConns .

关于sql - 如何在 Golang 中缓存到不同 Postgres/MySQL 数据库的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64672647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com