多个数据库还是许多表?

时间:2012-06-28 02:21:03

标签: mysql

我已经对这个问题进行了一些研究(通过谷歌和这里),但没有发现任何我认为符合我的情况的问题。

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

  1. 使用单个数据库,使用表前缀分隔每个环境和未加前缀的帐户表
  2. 使用许多数据库 - 一个中央帐户数据库,每个环境都有一个单独的数据库(中央数据库可能有其他中央,一次性数据,例如我们论坛软件的表格)
  3. 这两种方法都有显着的性能提升/担忧吗?数据(至少现在)都驻留在同一物理服务器上。查询应该只需要访问单个环境(非常罕见的情况除外) - 当然还有主要帐户记录。

5 个答案:

答案 0 :(得分:3)

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

在性能方面,您可以让DBMS处理群集/分发的内容,因此您不必担心它。自己拆分数据通常不会让事情变得更快,因为DBMS可以(通常)做得更好,然后就可以了。

答案 1 :(得分:3)

我们有多个数据库工作正在运行 - 以及不同的数据库供应商(DB2,Oracle,MySQL。)巨大的PITA,尽管其中一些痛苦可能来自每个数据库归不同组所有。但是如果您需要在数据库(而不是应用程序)中加入数据(您认为情况现在很少见,但等等......),您会对多服务器解决方案感到遗憾。

答案 2 :(得分:3)

有趣的问题。 作为标准答案,我建议让一个实例运行所有帐户。即前缀解决方案。这是主机提供商全面使用的方法。

让一个RDBMS运行show似乎是有意义的。更容易进行备份和其他系统范围的任务。我建议在性能方面,运行一个实例比为每个帐户运行一个单独的进程要高效得多。

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

现代数据库系统很容易每秒处理数千个请求,通过查找花哨的自定义(前缀)表名,它们不会有任何性能损失。 只要您能够提出一种简单的层次结构(帐户前缀)方式来分离帐户,您就不会遇到运行数千个表的问题。

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

答案 3 :(得分:0)

我想说使用许多数据库来允许将来修改各种环境。你是在谈论所有网站都会使用的静态数据,这是值得怀疑的,每个网站都应该拥有自己的数据集......

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

答案 4 :(得分:0)

我目前正在进行的项目在这方面是类似的;多个站点的一个帐户。

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

设置此服务并不容易(尽管OpenID网站上有设置指南),但它确实提供了将环境移动到不同物理位置的灵活性,而无需更改代码。实际上,您可以自由地保留单个数据库,并且可以将一个环境移动到专用计算机,因为它比其他计算机获得更多的牵引力。