Mysql 一个数据库vs多个数据库

Mysql 一个数据库vs多个数据库,mysql,database,multi-tenant,Mysql,Database,Multi Tenant,我知道这个问题已经被问过很多次了,但我想知道我的情况的答案 我正在开发一个web应用程序,它将允许我的客户管理他们的客户、兑现、发票、预订、网站和许多其他事情。我使用的是MySQL和一个包含大约30个表的数据库 我希望我的解决方案能够处理大约100000个或更多的客户。我客户的需求将非常不同。从一年100次插入到另一次每天1000次插入 现在我使用的是一个数据库(但我还在开发中),其中每个表都有一个account字段。我已经创建了一个模型层来访问自动将帐户附加到每个查询的数据(其中guid=1变

我知道这个问题已经被问过很多次了,但我想知道我的情况的答案

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

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

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


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

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

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

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

微软在这方面有一篇很好的文章。他们的术语是

  • 独立数据库(无共享)
  • 独立模式
  • 共享架构(共享所有内容)

您现在有100000个客户吗?如果不是的话,你可以尝试将其作为一个要求来进行预优化,而你的问题的答案是一个巨大的“视情况而定”。如果没有更多的细节,就没有什么可说的了。你还想要更多的细节吗?正如我所说,我还在开发中,所以我只有很少的测试人员。但是我在想,在向公众开放我的申请之前,应该考虑一下这种事情。我错了吗?最好的解决方案是,使用一个包含所有元数据(如ur clientid)的模式,并将它们的模式(数据库)映射到该模式。有可能为每一个客户都提供一个模式吗???可能是写得很好的副本,我也试着简要介绍一下,但你的回答非常好。谢谢你的回答和文章。在我看来,单独的模式是我的最佳选择,但据我所知,mysql不允许这样做。所以现在,我有3个选择,保持这样,移动到PostgreSQL(在我看来这是一个好的选择),或者使用一个单独的数据库(看起来是一个坏的选择,因为我不希望为客户机进行特定的开发)。有什么建议吗?就我个人而言,我更愿意使用PostgreSQL而不是MySQL。但是提供MySQL的web主机比PostgreSQL的多。MySQL数据库与PostgreSQL模式没有太大区别。两者都提供了名称空间,MySQL可以跨数据库查询,就像跨模式的PostgreSQL查询一样。PostgreSQL不支持跨两个数据库直接查询。我使用的是专用服务器,所以我可以使用我想要的。我主要关心的是维护。我很想分离我的用户数据,但我希望能够轻松地为我的所有用户(以及所有数据库或模式)在表中添加一列。现在我更好地理解了模式的概念,如果我为每个用户使用1个模式或为每个用户使用1个数据库,那么它似乎不会改变任何事情。因此,正如您所说的,每个用户使用MySQL数据库或每个用户使用PostgreSQL模式几乎是一样的(从维护的角度来看也是一样的)。