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

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

问题描述:

我打算在同一个数据库表中有20个或更多的站点。同一个MySQL数据库中的多个站点

像类似这样的结构: cms_config cms_pages cms_users cms_modules

我一直在想,每个表中应该有一个CUSTOMER_ID列,所以我很容易可以选择并调用行是为给予客户。但是,当它涉及加载时间,内存使用和所有这些时,这是否是最好的方式呢?

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

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

使每个数据库分开后,以(维护)更高的价格提高安全性和隐私(因为每个客户数据库用户都可以访问每个其他客户数据,通过能够读取/写入cms_pages的事实)成本。分开的数据库还可以简化性能扩展,您可以更快速地将超出预期的客户移至自己的服务器。记住更新和备份可以自动执行,所以这不是什么大问题。性能方面,拥有大量数据的客户将会以较少的数据影响客户的性能(因为索引扫描时间将与页面总量成比例增长,即使可以通过使用多列来缓解索引扫描时间索引)。

因此,为每个客户分开一个数据库并付出代价是有道理的,除非您确定这些小型站点的流量不会太大,以至于他们都是朋友,或者永远不会找到他们自己的数据库用户名:-)。

+0

我明白了。感谢您的迅速回复。如果我决定为每个客户提供不同的数据库,那么更新数据库结构如何?是否有一种聪明的方式让某种“适用于所有”数据库,以便一次性对所有客户进行某种更改? – rkj 2009-10-10 16:02:06

+0

您可以拥有您自己的所有现有客户及其数据库的“元数据库”。编写一个脚本来查询该数据库并将更新按顺序应用于所有这些数据库。 – 2009-10-10 16:11:44

+0

我不确定你的意思。你能解释一下,我有可能拥有一个“元数据库”吗?什么是所谓的元数据库?我一直在说所以你说我可以有一个具有结构的数据库,每当我编辑这个数据库时,这个效果将被应用到其他数据库,而不会擦除客户数据库中的数据? 在此先感谢:) – rkj 2009-10-10 19:43:26

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

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