1

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

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

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

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

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

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

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

4

4 回答 4

2

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

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

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

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

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

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

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

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

于 2013-04-24T14:24:24.867 回答
0

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

于 2013-04-24T14:23:25.973 回答
0

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

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

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

于 2013-04-24T14:23:49.870 回答
0

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

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

于 2013-04-24T14:47:07.407 回答