同一MySQL数据库中的多个站点

时间:2009-10-10 15:39:31

标签: php mysql

我计划在同一个数据库表中有20个或更多站点。

就像这样的结构: cms_config cms_pages cms_users cms_modules

我一直在想这些表中的每一个都应该有一个customer_id列,因此我可以轻松选择并调用给定客户的行。但是,当涉及到加载时间,内存使用和所有这些东西时,这是最好的方法吗?

我想要一个易于更新和修复的设置,所以我认为运行具有相同结构的单独数据库会是一个坏主意吗?

2 个答案:

答案 0 :(得分:2)

如果您负责维护,将所有内容放在同一个数据库中,是进行更新,维护和备份的最简单方法。

将每个数据库分开可以提高安全性和隐私性(因为每个客户数据库用户都可以通过能够读取/写入cms_pages的方式访问所有其他客户数据),但价格较高(维持成本较高) 。分离数据库还可以简化性能扩展,您可以更快地将超出预期的客户移动到自己的服务器上。记住更新和备份可以自动化,因此这不是什么大不了的事。

性能方面,拥有大量数据的客户将以较少的数据影响客户的性能(因为索引扫描时间将与页面总量成比例增长,即使可以通过使用多列索引来缓解。)

因此,为每个客户建立一个单独的数据库并支付价格是有道理的,除非您确定这些网站是流量不太大的小网站,他们都是朋友或永远不会找到他们自己的数据库用户名: - 。)

答案 1 :(得分:1)

这称为多租户架构。有几种方法可以实现这一点。如果你花一些时间开发一个合适的数据库库,你可以(理想情况下)重写所有查询,在所有查询中注入tenantId标准。这样您就知道每个租户只能访问他们的数据(只要所有查询都是由您创建的db lib传递的)。

另一个挑战是创建适当的数据库索引。您通常需要使用customerId / tenantId列+您查找的字段创建多列索引。