【问题标题】:Working with MySQL on large projects - multiple databases or not? [closed]在大型项目上使用 MySQL - 是否有多个数据库? [关闭]
【发布时间】:2018-06-02 21:49:45
【问题描述】:

在工作中,我们正在开展一个以不错的速度增长的项目,我们目前正在计划如何在 2018 年进一步扩展。

我们办公室的一位技术人员向我们讲述了他在使用 PHP + MySQL 的大型项目中与其他公司合作的经历。

我是我们项目中唯一的开发人员,所以当我感到困惑时,没有其他人可以与之辩论或提问 - 所以我会在这里尝试。

这个技术人员问我我们的数据库是如何构建的,我告诉他 MySQL。他问是否有一个数据库包含所有表或多个数据库,每个数据库都有自己的表(例如,按任务/功能分组的数据库等),我回答只有一个数据库包含项目中的所有表。

然后他建议将我的表拆分为多个数据库。这是个坏主意吗?

我们运营一个锦标赛平台,提供不同的比赛形式,例如小组赛、单淘汰和双淘汰季后赛等等。小组赛功能正在开发中,他建议创建一个名为“tournament_groups”的单独数据库并将所有相关表格放入其中。

注意:我使用 Laravel 5.4 和 Eloquent ORM 进行开发。

总而言之:多个数据库,每个数据库都有几个表,还是一个数据库包含所有表?

【问题讨论】:

  • 我认为使用一个数据库更容易。并且不必连接到另一个。这是我的看法。
  • 你的同事提出使用多个数据库的原因是什么?
  • @Strawberry,我认为原因是如果表格要填满数百万个会消耗太多数据的条目,这就是他希望我将其拆分的原因......不过我不太确定,因为我相信 MySQL 能够处理这个问题。
  • 我想知道你的同事是否也在探索 Stack Overflow? ;-)
  • 金枪鱼似乎是一个更合理的解释

标签: php mysql database laravel eloquent


【解决方案1】:

嗯,答案并不那么明显。有很多事情需要考虑:

1) 易于开发 - 事实上,拥有单个数据库要容易得多 - 您只需将迁移运行到该单个数据库中,如果您想验证实时数据库中的某些内容,您只需验证单个数据库,但您需要为多个模型添加条件,例如where('company_id', 5),您需要非常小心,不要让一家公司的人访问另一家公司的数据

2) 安全或业务/法律要求 - 在某些情况下,由于法律问题,每个客户都应该有单独的数据库。例如,如果公司的管理员应该访问数据库,您可以轻松地让他访问他的公司数据库,但您不能让他访问包含多个公司的数据库。

3) 性能 - 取决于由于性能原因您期望的数据量,如果您期望表中的行数为数百万,则为每个客户端拥有单独的数据库可能会更好

我在这两种情况下都工作过,对于作为开发人员的我来说,拥有单个数据库要方便得多,但正如我所说,在某些情况下,唯一的选择可能是拥有多个数据库。

【讨论】:

  • 感谢您的解释。我不希望这些表上有数百万行。如果我们快进 5 年,也许我会建议几十万。那么在您自己看来,坚持使用一个数据库会是首选方式吗?我同意将所有内容都放在一个数据库中很方便。
  • 对我来说,如果 2 和 3 不是那么重要,我宁愿拥有单个数据库
  • 谢谢,我会把这些事情记在心里。
  • 第 2 点:授予 MySQL 用户权限以仅访问某些表很容易。需要在 PHP 中进行一些工作来确定应该使用哪个数据库连接用户,并在 MySQL 中设置一些后端(以创建用户),但这很容易,只是设置起来有点费时。
  • @Martin 但是如果多个客户端的数据都在一个表中就不会那么容易了
【解决方案2】:

我认为您的同事正在谈论microservice 架构,您不仅可以拆分数据库,还可以将整个应用程序拆分为一组独立的组件。这不仅仅是拆分数据库。

Martin Fowler 的 article 可能是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多