使用PHP和MySQL进行多租户

时间:2013-01-30 19:08:14

标签: php mysql codeigniter activerecord multi-tenant

我有一个基于CodeIgniter PHP的Web应用程序,一个MYSQL数据库,我们使用PHPActiveRecords。我们不断发展壮大,现在需要提供白标签的应用程序。我完成的大部分工作是我遇到的唯一问题是如何处理数据库。我不希望有两个数据库连接,因为将共享两个站点之间的大量数据。我被研究过Multitenancy,它听起来是一个很好的选择,但如果我必须重写每个ActiveRecord,发现有一个条件,其中tenant_id ='这个网站'然后必须训练我的员工在他们现在编写代码时也这样做,它不具备可扩展性。有没有人有任何想法如何A)在没有很多修改的情况下将多租户集成到PHPActiveRecords中,或B)更好的解决方案然后多租户。

提前谢谢。

1 个答案:

答案 0 :(得分:5)

根据您拥有的客户端数量,您可以在一台主机上为每个客户端创建一个架构。使用公共数据库名称为公用表的表名添加前缀,并依赖客户端查询来使用默认数据库。

您的入口点可能会执行以下操作:

$pdo->query('USE client_12345');

您的查询可能类似于:

$pdo->query('SELECT * FROM clientspecificdata WHERE ...');

$pdo->query('SELECT * FROM common.data WHERE ...');

请注意:这会将数据暴露给错误的客户端的风险相对较高。确保这适合您的方案。多个连接可能会好得多。