管理多租户数据库连接

时间:2017-03-11 13:39:44

标签: php mysql database laravel multi-tenant

我知道很多人都在讨论这个问题,但我有一个具体的问题,我希望得到你的意见。 我提前道歉,因为这不是编码问题。

我是一名自学成才的开发者,我没有CS学位或任何形式。我所知道的大部分内容都是通过网络学习的。

我正在计划开发一个多租户应用程序,它使用角度作为前端,laravel用于后端/ api连接,mysql用于存储数据。

我计划为每个租户分配一个唯一的密钥,该密钥由2或3个字母(稍后决定)标识,用户在登录时必须键入该密钥以识别租户。我们称之为tenantId。 此外,我正在考虑使用子域并将子域作为分隔的租户ID。让我们假设在这种情况下,我有tenantId和我在一起。

此外,laravel将定义2个连接。让我们说tenantconnection(用于保存单个租户数据库凭证)和masterconnection。

Masterconnection为数据库保存数据库凭据,该数据库在其中一个表中保存了tenantkey,db username,db password,db name,mysql server address。

从mastertenant获取数据库凭据后,laravel将更新在config文件夹中的database.php文件中初始化的tenantconnection。

因此,每次API调用时,laravel都必须连接到master获取tenantconnection的凭据,然后调用db。

在您看来/体验这是多么实用/适用?

即使数据库服务器和应用服务器位于同一数据中心内,这是否会造成任何延迟?

这种方法是在多租户环境中连接可接受的连接方法吗?

此外,在laravel的每个API调用中,我计划通过JWT发送tenantid。我不太愿意在本地存储上保存tenantid。

可以使用任何工具(例如萤火虫或类似性质的东西)来操纵本地存储吗?

我想过使用共享数据库并在同一个数据库中使用模式,但该应用程序旨在保存财务数据,所以我认为将它们分开将是最好的。我研究了利弊,并决定为每个租户使用单独的数据库是最好的。

非常感谢您的反馈。 对不起,如果发布在错误的堆栈网站上。 抱歉阅读时间很长。

1 个答案:

答案 0 :(得分:0)

您的大多数问题都是基于意见的,这使得它成为一种偏离主题的问题。我只想添加评论,但它不合适。

  

即使数据库服务器和应用服务器位于同一数据中心内,这是否会造成任何延迟?

我认为10~20ms的延迟不会造成任何问题。确保您了解MySQL索引的基本知识,因为如果有一天您遇到数据库问题,重要的是不要自动认为它是租赁错误。它通常是糟糕的索引。

  

这种方法是在多租户环境中连接可接受的连接方法吗?

我是这么认为的,我正在使用它。唯一的区别是我的应用程序不是Web App + API。我用刀片。

  

此外,在laravel的每个API调用中,我计划通过JWT发送tenantid。我不太愿意在本地存储上保存tenantid。

我不知道你的项目规格。如果每个用户可以访问超过1个租户,那么是的,这似乎是一个很好的方法。如果每个用户BelongsTo a  独特的租户,那么为什么还要考虑租户?只需从用户通过身份验证的用户中获取租户。

  

可以使用任何工具(例如萤火虫或类似性质的东西)来操纵本地存储吗?

How to view or edit localStorage