Php 使用Zend的多个数据库

Php 使用Zend的多个数据库,php,mysql,database-design,zend-framework,zend-db,Php,Mysql,Database Design,Zend Framework,Zend Db,我正在构建一个应用程序(使用zend框架),在这个应用程序中,我们将有多个客户端登录并使用该应用程序,每个客户端都将存储大量关于其用户的数据(顺便说一句,我使用的是MySQL) 基本上我想知道两件事: 拥有多个数据库,每个客户机一个(即ipd_client_CLIENTNAME)和相同的表是一个愚蠢的想法吗?或者,如果我们有50个客户机,他们的数据库中有20000个用户的数据,那么它的响应速度会更快(比将所有数据都放在一个数据库中)吗? 我已经成功地构建了相同的系统,但都在一个数据库上,我的模型

我正在构建一个应用程序(使用zend框架),在这个应用程序中,我们将有多个客户端登录并使用该应用程序,每个客户端都将存储大量关于其用户的数据(顺便说一句,我使用的是MySQL)

基本上我想知道两件事:

  • 拥有多个数据库,每个客户机一个(即ipd_client_CLIENTNAME)和相同的表是一个愚蠢的想法吗?或者,如果我们有50个客户机,他们的数据库中有20000个用户的数据,那么它的响应速度会更快(比将所有数据都放在一个数据库中)吗? 我已经成功地构建了相同的系统,但都在一个数据库上,我的模型类只需获取登录的客户机的名称(在模型类的init()方法中),然后动态地更改它们获取数据的表的名称,这样就可以了吗

  • 如果“系统上的每个客户机都有自己的数据库”是有意义的,那么我将如何动态地更改我的数据库模型连接到的数据库(基于哪个客户机登录)

  • 如果这没有意义,下面是两个不同场景中数据库的示例(给定在系统上注册的2个客户端):

    多个数据库:

    ClientA有一个名为“ipd_clients_ClientA”的数据库,其中包含表“users”、“list”

    ClientB有一个名为“ipd_clients_ClientB”的数据库,其中包含表“users”、“list”

    单个数据库:

    ClientA的表名为“users\u ClientA”、“lists\u ClientA”

    ClientB有一些表,称为“users\u ClientB”、“lists\u ClientB”

    希望这是有道理的


    任何帮助都将不胜感激,谢谢

    我将使用解决方案2,将多个表与mit MySQL主/从复制相结合,用于客户端。

    如果要使用不同的数据库,可以使用Zend Framework的本机函数:


    然后通过某种前缀为客户端选择一个。

    我将使用解决方案2,将多个表与mit MySQL主/从复制相结合,用于客户端。

    如果要使用不同的数据库,可以使用Zend Framework的本机函数:


    然后通过某种前缀为客户选择一个。

    尽管你接受了这个答案,我还是不同意。我认为拥有多个数据库会更容易管理

    教程使用多个数据库的方式比需要的复杂得多。我这样做的方法是在根文件(index.php?)中简单地定义客户机名称,然后我的引导程序使用这个常量加载到正确的ini文件中

    如果您从分离开始,那么就可以继续使用相同的原则在单独的结构中缓存数据,这要容易得多


    使用单独的数据库将使管理单个客户更加容易。

    尽管你接受了这个答案,但我不同意。我认为拥有多个数据库会更容易管理

    教程使用多个数据库的方式比需要的复杂得多。我这样做的方法是在根文件(index.php?)中简单地定义客户机名称,然后我的引导程序使用这个常量加载到正确的ini文件中

    如果您从分离开始,那么就可以继续使用相同的原则在单独的结构中缓存数据,这要容易得多


    使用单独的数据库将使管理单个客户机更加容易。

    虽然ZF支持多个数据库连接,但我不会在这种特殊情况下使用它们

    对我来说,在每个数据表中存储一个客户机id(或站点id)并使用它进行筛选更有意义。重复使得在应用程序范围内进行更改非常困难。每当我看到这样的动态命名表时,我通常认为这是糟糕的设计


    对于缓存,只需在任何缓存键前面加上客户端标识符。

    虽然ZF支持多个数据库连接,但在这种特殊情况下,我不会使用它们

    对我来说,在每个数据表中存储一个客户机id(或站点id)并使用它进行筛选更有意义。重复使得在应用程序范围内进行更改非常困难。每当我看到这样的动态命名表时,我通常认为这是糟糕的设计


    对于缓存,只需在任何缓存键前加上客户端标识符。

    为了让您更好地了解我在做什么,我正在构建类似于MailChimp的东西,因此我们使用该应用程序的客户端将存储有关其订户的各种信息(当我使用术语“用户”时)上面,我指的是订阅者,所以他们不是我们系统上的用户,只有我们的客户才是)。为了让你更好地了解我在做什么,我正在构建类似于MailChimp的东西,所以我们使用应用程序的客户将存储关于订阅者的各种信息(当我使用“用户”这个术语时)以上,我指的是订户,所以他们不是我们系统的用户,只有我们的客户才是)。谢谢ArneRie!我想,如果使用多个数据库(就性能而言)没有真正的优势,那么我将继续使用单数据库、多表的方法。谢谢ArneRie!我想如果使用多个数据库(就性能而言)没有真正的优势,那么我将继续使用单数据库、多表方法。