GoLang多租户应用程序数据库连接

huangapple go评论100阅读模式
英文:

GoLang multi-tenant application database connections

问题

我是你的中文翻译助手,以下是你要翻译的内容:

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

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

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

英文:

I am new to golang and currently trying to build a multi-tenant application. In my application each tenants have their own database. My requirement is that I need to switch database connection per tenant request, how can this be accomplished in golang. I prefer postgresql for this project.

I can have a map of database connection to tenant, but not sure if this is a good practice.

Your help and suggestion is highly appreciated

答案1

得分: 1

我在Rails中处理过类似的需求。可能你也可以在Go语言中使用相同的方法。

我会有一个主数据库,只保存租户信息,比如租户名称和数据库名称。

我有一个Rack中间件,根据子域名来切换数据库(我使用子域名来识别租户)。

例如,你的主数据库可以有一个名为tenants的表,一个示例记录可能如下所示:
{ id: 1, name: 'XYZ', db_name: 'xyz' }

当你的应用程序接收到一个带有子域名xyz的请求时,你的中间件应该切换到xyz数据库。

英文:

I've handled a similar kind of requirement in Rails. Probably you can use the same approach in go-lang also.

I will have one master DB, which will hold just the tenant information. Like tenant name and db_name.

And I've got a rack middleware which will switch DB based on a subdomain(I'm using the subdomain to identify the tenant).

For example, Your master DB can have table tenants and an example record might probably look like this:
{
id: 1,
name: 'XYZ',
db_name: 'xyz'
}

and when your application receives a request with subdomain xyz, Your middleware should switch to xyz DB.

答案2

得分: 0

创建一个模式(schema)而不是整个数据库是一个更好的解决方案,在每个请求中更改请求的模式以识别租户。另一种解决方案是在中间件上识别租户后,创建一个数据库并在每个请求上重新打开连接。

英文:

its a better solutions to create an schema instead of an entire database and on each request change the schema of the request identifying the tenant.other solutions is to create a database and reopen a connection on each request after the tenant recognition on the middleware

huangapple
  • 本文由 发表于 2014年12月12日 23:11:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/27446532.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定