我目前在同一台服务器上有两个数据库,但用户不同,并希望在同一页面上选择两个数据。
我有自己的查询等数据库类。而构造函数看起来类似于:
$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;
}
这种做法是不好的做法还是完全没问题?
答案 0 :(得分: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!
答案 1 :(得分:1)
我认为使用$database
作为查询的开关是不够明确的。
我宁愿制作两种查询方法,以显示您实际查询的数据库。
即。
queryOrders($querystr)
resp。 queryUsers($querystr)
这将为您带来以下好处:
我相信为什么你可能会担心重构是因为你有一些必须被提取到一般方法中的周围代码。
然后,您可以将所述方法创建为仅调用查询方法的调用方法。
编辑:为了清楚多个数据库,我认为将数据分成多个数据库实例是完全正确的理由,尽管如果必须同时对两个数据集进行操作,显然会出现问题。在某些情况下,单独的模式也会起作用......答案 2 :(得分:0)
根据您的使用情况,这可能是一种非常好的方法,或者可以在不增加任何收益的情况下推动复杂性。
如果您有这样的要求,例如,您必须将某些数据(例如社交安全号码与用户帐户)进行物理分离,则使用不同的数据库是有意义的。 另一种情况可能是将工作负载(主要是从写入负载读取)分离到不同大小和调整的数据库。
当目标是支持租户时,我会考虑将其作为应用程序的一部分来实现。
如果您想要搜索不同的数据库并具有联合结果,您会遇到诸如一致排名和数据选择等多种问题,您无法跨物理分布式数据库执行JOIN等等。