GoLang 多租户应用数据库连接

3

我是golang的新手,目前正在尝试构建一个多租户应用程序。在我的应用程序中,每个租户都有自己的数据库。我的要求是,我需要在每个租户请求时切换数据库连接,如何在golang中实现这一点。我更喜欢在此项目中使用postgresql

我可以拥有一个将数据库连接映射到租户的映射表,但不确定这是否是一个好的做法。

非常感谢您的帮助和建议。


1
每个租户都有一个数据库连接映射,这有什么问题吗?它需要在某个地方进行映射。 - JimB
1
问题在于,假设我们有1000个租户,假设他们都在访问应用程序,那么我们最终会有1000个数据库连接处于打开状态。 - Hari Narasimhan
2个回答

1
我曾在Rails中处理过类似的需求。也许你可以在go-lang中采用相同的方法。
我将拥有一个主数据库,它将仅保存租户信息,例如租户名称和db_name。
我有一个Rack中间件,它将基于子域名切换数据库(我使用子域名来识别租户)。
例如,您的主数据库可以有一个表格“tenants”,一个示例记录可能如下所示: { id:1, name:“XYZ”, db_name:“xyz” }
当您的应用程序接收到带有子域名“xyz”的请求时,您的中间件应该切换到“xyz”数据库。

3
这些数据库是否都驻留在一个数据库集群中?你们是如何避免每次用户发送请求时重新连接到数据库的? - xxx222
@xxx222 我也在想同样的问题。 - Stefanos Chrs

0

相较于整个数据库的创建,在每个请求中更改请求标识租户的架构是更好的解决方案。其他解决方案是在中间件上识别租户后,为每个请求创建一个数据库并重新打开连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接