一个数据库与许多数据库

Nic*_*DIA 5 mysql database multi-tenant

我知道这个问题已被多次询问,但我想答案一下.

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

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

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

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

Mik*_*ll' 6

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

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

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

微软有一篇关于多租户架构的好文章.他们的术语是

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