我正在构建一个应用程序(使用zend框架),我们将拥有多个登录和使用该应用程序的客户端,并且每个客户端都将存储大量有关其用户的数据(我正在使用MySQL btw)
基本上我想知道两件事:
是否有多个数据库,每个客户端一个(即ipd_client_CLIENTNAME),相同的表是一个愚蠢的想法?或者,如果我们在“他们的”数据库中拥有50个拥有20,000个用户数据的客户端,它实际上会更具响应性(而不是将所有内容放在一个数据库中) 我已经设法构建了相同的系统,但所有在一个数据库上,我的模型类只是获取登录的客户端的名称(在模型类的init()方法中),然后动态更改他们抓取的表的名称数据来自,这样会好吗?
如果“系统中的每个客户端都有自己的数据库”是有意义的,我究竟会如何动态更改我的数据库模型所连接的数据库(根据登录的客户端)?
< / LI> 醇>如果这没有任何意义,这里是两个不同场景中数据库的样子(给定2个在系统上注册的客户端)的示例:
多个数据库:
ClientA有一个名为“ipd_clients_ClientA”的数据库,其中包含“users”,“lists”表。
ClientB有一个名为“ipd_clients_ClientB”的数据库,其中包含表“users”,“lists”。
单个数据库:
ClientA有一个名为“users_ClientA”,“lists_ClientA”的表。
ClientB有一个名为“users_ClientB”,“lists_ClientB”的表。
希望这是有道理的。
非常感谢任何帮助,谢谢!
答案 0 :(得分:3)
我将使用解决方案2,在您的客户端中使用多个表来组合MySQL主/从复制。 MySQL Master Slave
如果要使用不同的数据库,可以使用Zend Framework的本机功能: Tutorial multipe dbs
然后通过某种前缀为客户选择一个。
答案 1 :(得分:3)
虽然你接受了这个答案,但我不同意。我认为拥有多个数据库会更容易管理。
教程使用多个数据库的方式远比它需要的复杂得多。我这样做的方法是简单地在根文件中定义客户端名称(index.php?),然后我的引导程序使用此常量加载到正确的ini文件中。
如果从分离开始,您可以继续使用相同的原则来更容易地在单独的结构中缓存数据。
使用单独的数据库可以更轻松地管理个人客户。
答案 2 :(得分:2)
虽然ZF确实支持多个数据库连接,但在这种特殊情况下我不会使用它们。
对我来说,在每个数据表中存储client_id(或site_id)并使用它进行过滤更有意义。复制使得进行应用程序范围的更改非常困难。每当我看到这样的动态命名表时,我通常认为它的设计很差。
对于缓存,只需使用客户端标识符为任何缓存键添加前缀。