【问题标题】:Multiple mysqli database connections, bad practice?多个mysqli数据库连接,不好的做法?
【发布时间】:2015-05-06 08:28:59
【问题描述】:

我目前在同一台服务器上有两个数据库,但用户不同,我想从同一页面上的两个数据库中选择数据。

我有自己的用于查询等的数据库类。构造函数类似于:

$this->connection1 = new mysqli('localhost', 'username', 'password', 'database');
$this->connection2 = new mysqli('localhost', 'username2', 'password2', 'database2');

在我的查询函数中,有一个变量可以让您查询 connection2 而不是 connection1,例如

switch( $database ) {
    default:
        $this->connection1->query( $querystr);
    break;
    case 'connection2';
        $this->connection2->query( $querystr);
    break;
}

这种方法是不好的做法还是完全没问题?

【问题讨论】:

  • 有趣的问题,不确定
  • 这没有什么问题,除了在打开连接时明显减慢速度
  • 如果您能够将您的数据库合并为一个数据库,则最好创建一个数据库。如果你不能,目前的方法是合法的。

标签: php mysql mysqli


【解决方案1】:
I think you should create one classes containing two funcations createConnection and getConnection, just pass the connectiontype you want in get connection that should return you correct connection!

【讨论】:

    【解决方案2】:

    我认为使用$database 作为查询的开关不够明确。

    我宁愿创建两个查询方法来显示您实际查询的数据库。

    queryOrders($querystr) 分别。 queryUsers($querystr)

    这将为您带来以下好处:

    • 消除 switch 语句
    • 消除数据库的魔法常数

    我相信为什么你会担心重构是因为你有一些周围的代码必须被提取到一个通用方法中。

    然后您可以将所述方法创建为仅委托给您的查询方法的调用方法。

    编辑:要明确多个数据库,我相信将数据分成多个数据库实例是完全正当的,尽管如果您必须同时对两个数据集进行操作显然会出现问题。在某些情况下,单独的架构也可以解决问题...

    【讨论】:

      【解决方案3】:

      根据您的用例,这可能是一种非常好的方法,也可能是一种在没有任何收益的情况下提高复杂性的方法。

      如果您有要求,例如,您必须在物理上分离一些数据(例如社会安全号码与用户帐户),那么使用不同的数据库是有意义的。 另一种情况可能是将工作负载(例如主要读取负载和写入负载)分离到不同大小和调整过的数据库。

      当目标是支持租户时,我会考虑将其作为应用程序的一部分来实现。

      如果你想跨不同的数据库进行搜索并得到一个联合结果,你会遇到很多问题,比如一致的排名和数据的选择,你不能跨物理分布式数据库执行 JOIN 等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多