同一数据库上的多个应用程序实例

时间:2009-11-26 14:14:20

标签: php mysql zend-framework multi-tenant

我正在编写一个应用程序,我将作为服务提供,也可以作为独立应用程序提供。 它是用Zend Framework编写的,并使用MySQL。

将其作为服务提供时,我希望用户在我的网站上注册,并拥有customer1.mysite.com,customer2.mysite.com等子域名。

我希望将所有内容都放在一个数据库中,而不是为每个用户创建新的数据库。

但现在我想知道如何做得更好。 我想出了两个解决方案: 1.在每个表中都有用户ID,并在每个数据库请求中将其添加到WHERE子句中。 2.重新创建具有唯一前缀的表,例如'customer1_tablename','customer2_tablename'。

哪种方法更好?优点和缺点? 是否有另一种方法可以在同一个数据库中分隔用户?

Leonti

4 个答案:

答案 0 :(得分:3)

我会坚持将所有表保持在一起,否则使用单个数据库几乎没有任何意义。这也意味着您可以在轨道上实现某种跨站点交互。只要确保你将索引放在差异化字段(customer_number或其他)上,你应该没问题。

如果表格变得非常大而且速度慢,请查看table partitioning

答案 1 :(得分:1)

这取决于您打算如何处理数据。如果客户不共享数据,客户细分可能会更好;另外,你可能会有更好的表现。

另一方面,当你想要改变结构时,拥有许多具有相同结构的桌子可能是一场噩梦。

答案 2 :(得分:1)

我建议为每个用户使用单独的数据库。这使您的应用程序更容易编码,并使MySQL维护(单个帐户的迁移,帐户删除等)。

此规则的唯一例外是,您需要跨帐户访问数据或共享数据。

答案 3 :(得分:1)

这称为多租户应用程序,很多人运行它们;见

multi tenant tag

对于其他一些人的问题