我有一个基于CodeIgniter PHP的Web应用程序,一个MYSQL数据库,我们使用PHPActiveRecords。我们不断发展壮大,现在需要提供白标签的应用程序。我完成的大部分工作是我遇到的唯一问题是如何处理数据库。我不希望有两个数据库连接,因为将共享两个站点之间的大量数据。我被研究过Multitenancy,它听起来是一个很好的选择,但如果我必须重写每个ActiveRecord,发现有一个条件,其中tenant_id ='这个网站'然后必须训练我的员工在他们现在编写代码时也这样做,它不具备可扩展性。有没有人有任何想法如何A)在没有很多修改的情况下将多租户集成到PHPActiveRecords中,或B)更好的解决方案然后多租户。
提前谢谢。
答案 0 :(得分:5)
根据您拥有的客户端数量,您可以在一台主机上为每个客户端创建一个架构。使用公共数据库名称为公用表的表名添加前缀,并依赖客户端查询来使用默认数据库。
您的入口点可能会执行以下操作:
$pdo->query('USE client_12345');
您的查询可能类似于:
$pdo->query('SELECT * FROM clientspecificdata WHERE ...');
和
$pdo->query('SELECT * FROM common.data WHERE ...');
请注意:这会将数据暴露给错误的客户端的风险相对较高。确保这适合您的方案。多个连接可能会好得多。