用于PHP中许多客户端的一个或多个数据库

时间:2010-12-02 23:08:26

标签: php performance zend-framework database-design

我正在ZF中编写PHP应用程序。客户将使用它将产品销售给最终客户。客户将在我的服务器上托管他们的应用程序,或者他们可以自己使用他们中的大多数人都会在我的服务器上托管这个应用程序。

我可以同时为所有客户设计一个数据库,因此每个客户都将使用相同的数据库,但当然产品等将分配给特定客户。微不足道的。

我可以为每个客户使用单独的数据库,因此数据库结构将更简单。然后,我可能会使用单独的子域,甚至可能使用文件位置,但这只是一个细节。

哪种解决方案会有更好的性能,差异有多大?你会选择哪一个?

5 个答案:

答案 0 :(得分:5)

我会为每个客户使用一个单独的数据库。它使备份和扩展更容易。如果您的大客户需要对架构进行一些自定义更改,您可以轻松完成。

如果一个客户需要您恢复他们的数据,使用单个数据库则很简单。在共享数据库上,要困难得多。

如果大客户获得大量流量,您可以轻松地将它们放在另一台服务器上,而且变化很小。

如果一个网站遭到入侵,您在一个地方没有为所有人提供所有数据,那么损害就会减少到被黑客攻击的网站。

如果可能,我绝对建议每个客户使用1分贝。

答案 1 :(得分:2)

就个人而言,我会选择多个数据库 - 即每个客户的数据库。

据我所知,您的所有客户都只使用您的应用程序实例,因此这些实例应该有自己的数据库。

如果您使用单个数据库,则会产生巨大的潜在安全风险。一个客户端将登录详细信息泄露给数据库服务器会自动危害所有客户端的数据。

此外,单个安全漏洞(SQL注入攻击)可能会破坏所有客户端的数据(使用多个dbs,您仍有时间修复安全漏洞并在所有其他站点受到攻击之前释放补丁)。

你不想拥有一支100万疯狂的客户,而不只是一个愤怒的客户。

多个数据库还为您提供了更大的负载平衡可能性(您可以将dbs分布在更多服务器上)。

答案 2 :(得分:1)

在某种程度上,这是个人意见的问题。这两种模式都有利弊。

就个人而言,由于“他们可以使用他们自己的”评论,我会按照每个客户使用单独的数据库。这给你

  • 在必要时移动客户数据的能力。例如,根据加载等内容将单个客户移动到不同的服务器/设置上。
  • 如果出现问题,你只会影响一个客户,而不是每个人。
  • 如有必要,您可以在多个数据库服务器之间传播数据库负载。
  • 如果客户找到了特定要求,您可以更轻松地满足这一要求,而不会影响其他客户。

从性能的角度来看,说实话,我认为这两种型号都没有任何真正的性能增益。这说明当然这取决于数据库的结构及其运行的硬件。

答案 3 :(得分:1)

性能方面,你基本上是从'分片'方法开始的。因此,分片性能策略将是小菜一碟。

缺点是你可能会认为你在重复中丢失了一些(未定义的)开销。

一个缺陷是您可能不会很快注意到主要组件中的性能问题。这是因为它们如此分散,所以它们可能在您的雷达上不可见。负载测试是领先于此的方法。

答案 4 :(得分:-1)

如果您的需求可以通过一个数据库来满足,请不要选择多个数据库解决方案。因为多个数据库会导致长期负担,并且随着您的成长,您的系统将变得非常复杂且无法管理。

使用适当的关系,你可以走得很远

  

客户端模型可以有多个产品//为什么有多个数据库?

性能可以通过任何一种方式实现,只需多个dbs NOT 就可以从这个方向受益