多租户数据库设计 - 每个用户的数据库

时间:2013-04-22 16:37:32

标签: mysql database-design multi-tenant

我正在开发一个Web应用程序,它要求用户拥有自己的一组私有数据。我最初的计划是创建一个商店表,一个用户表和一个user_stores交叉表。然后,我会在stores表中保存该存储的数据库名称(并使用应用程序用户和密码创建每个特定于商店的数据库,以便Web应用程序始终可以登录)。

每个商店都有类似的数据(用户,产品,运输方法等),我知道我可以使用外键引用将所有内容绑定在一个巨大的数据库中。但是,由于数据是非常具体的并且可能是专有的,使用我的原始设计或者在其中创建包含每个人数据的单个数据库会更好吗?

我正在考虑扩展问题,单独的数据库会更好,因为我们可以将更活跃的帐户放在他们自己(或更强大的)数据库服务器上,如果需要,只需在stores表中添加服务器位置字段。此外,它可能更安全,因为我们可以将用户登录信息添加到数据库,只允许他们访问他们的数据(阻止一个用户编辑其他用户的东西)。我的问题是,是否有我担心的问题?几乎每一篇我读过的帖子都说没有使用我想到的方法,而且我不是DBA。任何输入都会有所帮助。

其他信息: 这将托管在我将具有root访问权限的专用服务器上。我可以根据需要创建尽可能多的MySQL数据库。

2 个答案:

答案 0 :(得分:7)

我肯定会使用单个数据库。使用以下内容开始。使用单个数据库有几个原因,但最重要的原因是为了避免维护噩梦。如果你必须改变架构,那么你手上就会弄得一团糟。

http://msdn.microsoft.com/en-us/library/aa479086.aspx

答案 1 :(得分:3)

在多租户数据库中,数据库设计人员会考虑查询,成本,数据隔离和保护,维护和灾难恢复。

多租户解决方案的范围从每个租户一个数据库("无共享")到每个租户一行("共享所有内容")。 This SO answer总结了权衡。如果您正在设计属于某种监管环境(HIPAA,FERPA等)的数据库,那么该监管环境可能会超越所有其他考虑因素。

在某些情况下,每个租户一个数据库是一个可辩护的决定。但是,不清楚这是你的案例中的最佳答案。