我是php / mysql的新手,我正在编写一个简单的CMS。但在这种情况下,我将托管多家公司(每家公司拥有多个用户),这需要付费才能使用该系统。
所以......我的问题是关于如何组织数据库...谈论安全性,管理和性能,我只是想知道这些案例中你们这些人的意见是最好的:
在一个数据库中托管所有公司,并获得公司ID以与用户匹配。
每家公司都有一个独立的数据库,可以将用户留在那里(并且不再需要公司ID)。
我会在第一种情况之后开始开发......但是我认为如果我有一些黑客攻击/ sql注入,每个客户端都会受到伤害。分离DB后,损坏将只有一个客户端。因此,第二种情况可能在安全性方面更好。但对管理和绩效不能说同样的话。
所以,根据您的经验,任何帮助或提示都会很棒!
提前致谢,对我可怜的英语感到抱歉。
答案 0 :(得分:2)
我会选择单独的DB。但不仅仅是为了黑客攻击。
可扩展性: 假设您有一台处理10个网站的服务器,但其中1个网站的请求,内容等增长速度很快。您的服务器很难主持所有这些网站。
使用单独的DB,分散在多个服务器上是一块蛋糕。只需一个,您就必须升级当前的数据库或集群它,但托管公司有时无法做到这一点或非常昂贵。
性能: 他们都在1个数据库上,多个用户的数据在1个表中,锁可能会减慢其他用户的速度。
大表,意味着大型索引,大型查找等。因此,拆分到不同的DB会实际加快速度。
您必须处理每个数据库的额外内存和CPU开销,但它们通常不会产生惊人的巨大影响。
是的,多个数据库的管理工作更多,但是使用适当的更新脚本并密切关注数据库模式的版本将大大减少您的管理问题。
更新:也会看到这篇文章。 http://msdn.microsoft.com/en-us/library/aa479086.aspx
答案 1 :(得分:0)
单独的数据库具有许多优势,包括性能,安全性,可扩展性,移动性等。尝试将所有内容打包到1个数据库中时,风险更低,尤其是当您谈论单独的公司数据时。
答案 2 :(得分:0)
您尚未提供任何详细信息,但一般来说,我会选择单独的数据库。
为每个客户端使用自治数据库允许更精细的控制,因为它可以管理/备份/垃圾/等。他们个人,而不影响他人。它还需要更少的修饰,因为数据更容易区分,一个数据库不能破坏其他数据库。
更不用说它会使开发过程更容易 - 请注意,单独的数据库意味着您不必总是验证行的“所有者”。
答案 3 :(得分:0)
如果您计划将此数据库托管在Azure数据库等云资源(相对)便宜的云环境中,则客户端运行相同的代码库,数据库架构是相同的(显然),并且有可能在公司之间共享一些数据然后可能是一个多租户数据库。对于其他任何事情,您可能会使用多租户数据库创建大量额外工作。
请记住,如果您使用单独的数据库路由,稍后尝试迁移到多租户云解决方案是一项巨大的任务。我只提到这一点,因为过去几年我在IT水冷却器周围听到的只是“云!云!云!”。