【问题标题】:Single DB or multiple DB (for multiple users in a single aplication)单个 DB 或多个 DB(针对单个应用程序中的多个用户)
【发布时间】:2013-04-24 14:14:14
【问题描述】:

我是 php/mysql 的新手,我正在编写一个简单的 CMS。但在这种情况下,我将托管多个公司(每个公司都有多个用户),这需要付费才能使用该系统。

所以...我的问题是关于如何组织数据库...谈到安全性、管理和性能,我只是想知道这些案例中你们的意见是最好的:

  1. 将所有公司托管在一个数据库中,它们会获得与用户匹配的公司 ID。

  2. 每家公司都有一个单独的数据库来保存用户(不再需要公司 ID)。

我会在第一种情况下开始开发......但是如果我有一些黑客攻击/sql注入,每个客户端都会受到伤害。分离 DB 后,损害只会得到一个客户。因此,就安全性而言,第二种情况可能会更好。但在管理和绩效方面就不能这么说了。

因此,根据您的经验,任何帮助或提示都会很棒!

在此先感谢,并为我糟糕的英语感到抱歉。

【问题讨论】:

  • 我倾向于使用单独的数据库。 1) 如果需要,您可以选择为公司提供直接数据库访问权限。 2)为每个客户定制变得更容易,因为您不再使用(尽可能多的)复合主键。 3)每个公司的保留数据在一个单独的地方,一个公司看到另一个公司的数据的风​​险要小得多。

标签: php mysql database content-management-system


【解决方案1】:

我会选择单独的数据库。但不仅仅是为了黑客。

可扩展性: 假设您的服务器可以处理 10 个网站,但其中 1 个网站的请求、内容等增长很快。您的服务器很难托管所有这些网站。

使用单独的数据库,分散在多个服务器上是小菜一碟。使用一个单独的数据库,您必须升级您当前的数据库或将其集群化,但这有时对于托管公司来说是不可能的,或者非常昂贵。

性能: 你他们都在 1 个 DB 上,多个用户的数据在 1 个表中,锁可能会减慢其他用户的速度。

大型表,意味着大型索引,大型查找等。因此,拆分到不同的数据库实际上会加快速度。

您必须处理每个 DB 的额外内存和 CPU 开销,但它们通常不会产生惊人的大影响。

是的,管理多个数据库需要更多的工作,但是拥有适当的更新脚本并密切关注数据库架构的版本将大大减少您的管理问题。

更新:另见这篇文章。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

【讨论】:

  • 嘿,非常感谢您的提示...所以我将按照您的建议继续使用多个数据库!这篇文章是我最喜欢的。今晚要读它!
【解决方案2】:

单独的数据库具有许多优势,包括性能、安全性、可扩展性、移动性等。尝试将所有内容打包到 1 个数据库中,尤其是在谈论单独的公司数据时,风险更大,回报更少。

【讨论】:

    【解决方案3】:

    您没有提供任何详细信息,但一般来说,我会选择单独的数据库。

    为每个客户端使用自治数据库可以实现更精细的控制,因为可以管理/备份/垃圾/等。他们单独,而不影响其他人。它还需要较少的修饰,因为数据更容易区分,并且一个数据库不能破坏其他数据库。

    更不用说它会使开发过程更容易——请注意,单独的数据库意味着您不必总是验证行的“所有者”。

    【讨论】:

      【解决方案4】:

      如果您计划将此数据库托管在云环境中,例如 Azure 数据库,其中资源(相对)便宜,客户端运行相同的代码库,数据库架构相同(显然),并且有可能在公司之间共享一些数据的情况下,多租户数据库可能是要走的路。对于其他任何事情,您可能会为多租户数据库创建大量额外工作。

      请记住,如果您采用单独的数据库路线,那么稍后尝试迁移到多租户云解决方案是一项艰巨的任务。我之所以提到这一点,是因为过去几年我听到的关于 IT 水冷却器的所有内容都是“云!云!云!”。

      【讨论】:

      • 该计划确实是继续进行云托管...但起初我会选择经销商托管计划,直到我获得支付云计划的最低收入。
      • 您仍然可以在云中托管多个数据库,而不是使用多租户数据库。重读您的问题后,我对您的主要担心是您说您是 php/mysql 新手,作为初学者,我不建议增加多租户数据库的复杂性;没有什么是“简单的”。
      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 2012-09-19
      • 2023-04-08
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多