【问题标题】:PHP / MySQL - Compare tables from 2 different databasesPHP / MySQL - 比较来自 2 个不同数据库的表
【发布时间】:2016-09-21 07:24:09
【问题描述】:

我有 2 个框架(Laravel - Web,Codeigniter - API)和 2 个不同的数据库。我已经构建了一个函数(在 API 上),它检测一个数据库(来自 2 个表)上的更改并将更改应用到另一个数据库中。

注意:没有办法在同一个数据库上同时运行 Web 和 API - 这就是我这样做的原因。

无论如何,重要的是要认识到每一个微小的变化。如果案例是新记录或删除记录 - 它很简单,完全没有问题。但是,如果两个数据库中都存在记录 - 我需要比较它们的值以检测变化,这部分变得具有挑战性。

我知道如何以最慢和最繁重的方式做到这一点(挑选每条记录并进行比较)。

我的问题是 - 你建议如何让它以智能和快速的方式工作?

非常感谢。

【问题讨论】:

    标签: php mysql database performance compare


    【解决方案1】:

    只要 mysql 用户对两个数据库都有选择权限,就可以像这样在查询中限定数据库:

    SELECT * FROM `db1`.`table1`;
    SELECT * FROM `db2`.`table1`;
    

    连接到 PHP 时选择哪个数据库并不重要。查询中将使用正确的数据库。

    当数据库/表名只有字母数字而不是 SQL 关键字时,刻度是可选的。

    【讨论】:

    • 出于安全和性能原因,SQL 用户对这两个数据库都没有权限。我正在使用与 API 一起使用的重型网站。
    【解决方案2】:

    根据“从属”数据库的响应时间,有两个选项不会过多地增加开销:

    1. 如果您可以通过为其中一个或两个表添加前缀来将两个数据库合并到同一个数据库中,则可以使用FOREIGN KEYS 让数据库为您完成繁重的工作。
    2. 使用TIMESTAMP-字段,您可以将其设置为在行更新时由数据库自行更新。

    选项 1 是我最好的猜测,但这可能意味着对正在运行的系统进行物理更改,如果 FOREIGN KEYS 对您来说是新的,您可能想要测试,因为它们可以是真正的 PITA(恕我直言)。

    选项 2 更易于实施,但您仍需手动检测已删除/行的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多