mysql - 多个数据库或许多表?

标签 mysql

我已经对这个问题做了一些研究(通过谷歌和在这里),但没有找到任何我认为符合我的情况的东西所以我问。

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

  1. 使用单一数据库,使用表前缀分隔每个环境和一个无前缀的帐户表
  2. 使用多个数据库 - 一个中央帐户数据库,以及一个用于每个环境的独立数据库(中央数据库可能还有其他中央的、一次性的数据,例如我们论坛软件的表格)

这两种方法是否有任何显着的性能提升/问题?数据将(至少目前)全部驻留在同一台物理服务器上。查询应该只需要访问单一环境(极少数情况除外)——当然还有主要帐户记录。

最佳答案

有趣的问题。 作为标准答案,我建议让一个实例运行所有帐户。 IE。前缀解决方案。这是托管服务提供商普遍使用的方法。

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

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

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

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

关于mysql - 多个数据库或许多表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237280/

相关文章:

php - mysql_real_escape_string() 是否足以用于 MySQL REGEXP?

mysql - 外键与主键匹配吗?

c# - Visual Studio 2012 代理需要授权

php - 我应该如何将 HTML 标签存储到数据库中?

mysql - 为什么会出现列表索引越界 (1) 错误?

c++ - MySQL cppconn 线程段错误

排除结果时 MySQL NOT REGEXP 不起作用

mysql - 为什么我不能对此形成外键?

php - 来自包含的 php 文件的变量

MySQL 选择一组列作为一个别名