一个数据库与许多数据库

时间:2011-11-28 07:59:29

标签: mysql database multi-tenant

我知道这个问题已被多次询问,但我希望得到一个答案。

我正在开发一个网络应用程序,它将允许我的客户管理他们的客户,兑现,发票,预订,网站和许多其他事情。我正在使用MySQL和一个包含大约30个表的数据库。

我希望我的解决方案能够处理大约100,000个或更多客户。我的客户的需求将大不相同。从一年100次插入到另一次插入每天1000次。

现在我正在使用一个数据库(但我还在开发中),其中每个表都有一个帐户字段。我创建了一个模型层来访问数据,该数据自动将帐户附加到每个查询( WHERE guid = 1 成为 WHERE帐户= X AND guid = 1 )。这项工作非常好,并且很容易维护,但我担心混合客户数据的事实。请注意,我使用的是增量ID而不是GUID。

我的问题是,我应该继续做这样的事情,还是应该为每个客户创建一个数据库?

1 个答案:

答案 0 :(得分:6)

您正在查看多租户数据库。多租户解决方案的范围从每个客户端一个数据库(无共享)到每个客户端一行(共享所有内容)。

“无共享”是每个客户最贵的。大量客户意味着大量服务器。客户端灾难恢复简单明了。 “无共享”减少了意外地将客户端数据暴露到几乎为零的可能性。

“共享一切”是每个客户最便宜的。每个表都有一列,用于标识行所属的客户端。客户端灾难恢复非常复杂;您必须恢复每个表中的各个行。 “共享一切”是最容易意外暴露客户数据的架构。

微软在multi-tenant architecture上有一篇很好的文章。他们的术语是

  • 单独的数据库(无共享)
  • 单独架构
  • 共享架构(共享所有内容)