我已经对此问题进行了一些研究(无论是通过google还是在这里),但没有找到我认为与我的情况相符的任何东西,所以我问。

我有一个项目,目前有一个帐户-一个环境模型,并且希望扩展到一个帐户-许多环境。这些环境将是相同的(至少就表结构而言),并且将需要大约100个表。我陷入两种可能的方法之间:

使用单个数据库,其表前缀可分隔每个环境和一个不带前缀的帐户表

使用许多数据库-一个中央帐户数据库,并为每个环境使用一个单独的数据库(中央数据库可能会具有其他中央的,一次性的数据,例如我们论坛软件的表)

两种方法都有明显的性能提升/关注点吗?数据将(至少到目前为止)都驻留在同一台物理服务器上。查询应该只需要访问一个环境(在极少数情况下除外)-当然还有主帐户记录。

找到了这个链接stackoverflow.com/questions/696682/

也这个链接forums.mysql.com/read.php?125,181078,181078

有趣的问题。

作为标准答案,我建议让一个实例运行所有帐户。即前缀解决方案。这是托管服务提供商在整个过程中使用的方法。

让一个RDBMS运行该节目似乎很有意义。更容易进行备份和其他系统范围的任务。我建议就性能而言,一个实例的运行要比为每个帐户运行一个单独的流程要高效得多。

如果您需要启用负载平衡,则"前缀"模型也将更易于扩展,因为大多数现代RDBMS都具有支持此类功能的插件/功能,而不必为每个帐户的每个实例多次设置。

现代数据库系统可以轻松地每秒处理数千个请求,通过查找精美的自定义(前缀)表名称,它们不会造成任何性能损失。

只要您能提出一种简单的层次结构(帐户前缀)来分隔帐户,您就不会在运行数千个表时遇到问题。

唯一的潜在缺点是安全性。在大多数情况下,即使拥有多个服务器也无法解决您的安全问题。

我们已经在使用多个数据库,并且有不同的数据库供应商(DB2,Oracle,MySQL。)巨大的PITA,尽管其中一些痛苦可能来自每个数据库都属于不同组的事实。但是,如果您需要在数据库(而不是应用程序)中加入数据(您认为情况现在很少见,但是您要等待...),您将后悔多服务器解决方案。

我认为只管理一个数据库会更简单。与使许多数据库担心正确配置相比,这将使开发和配置更加容易。

在性能方面,您可以让DBMS处理集群/分布式事务,因此您不必担心。自己拆分数据通常不会使事情变得更快,因为DBMS可以(通常)在此方面做得更好。

在这方面,我目前正在从事的项目是相似的。一个帐户用于多个站点。

我所寻求的解决方案是委托身份验证,这是一项仅处理身份验证并发布有关身份的可验证断言的服务。这也可以与授权结合在一起。要了解所需的内容,可以查看OpenID项目和OAuth2进行授权。

设置此服务并不容易(尽管OpenID网站提供了设置指南),但它确实提供了将环境移到不同物理位置的灵活性,而无需更改代码。实际上,您甚至可以保留一个数据库,并可以在一个环境获得比其他环境更大的吸引力时将一个环境转移到专用计算机上。

我会说使用许多数据库来允许将来对各种环境进行修改。您是否在谈论所有站点都将使用的静态数据,每个站点都应拥有其自己的数据集是令人怀疑的...

如果没有其他原因,(如我之前所说)允许进行修改。