【问题标题】:Multitenancy with PHP and MySQLPHP 和 MySQL 的多租户
【发布时间】:2013-01-30 19:08:14
【问题描述】:

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

提前谢谢你。

【问题讨论】:

    标签: php mysql codeigniter activerecord multi-tenant


    【解决方案1】:

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

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

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

    您的查询可能类似于:

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

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

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

    【讨论】:

    • 可以跨数据库加入吗?这就是我希望它成为一个数据库的原因。
    • 上述主机中的 database 指的是 schema(MySQL 在许多地方可以互换使用它们)。主机上有多个模式。是的,您可以跨模式加入。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2021-07-10
    • 2023-03-22
    • 2018-05-07
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多