使用多个(动态)PHP Mysqli 连接的最佳方式是什么?
目前我有一个 MySQL 服务器。我所有的数据都在这台服务器上的几个数据库中。但在不久的将来,我的存储需求将超过这台服务器的处理能力。所以我可能要做的是将一些数据库放在一台服务器上,而将一些数据库放在另一台服务器上。在更远的将来,可能会有更多的服务器发挥作用。
为了“将来证明”我的脚本,我认为指向正确服务器的类可能是最好的解决方案。我只是发送我想要获取的数据的“密钥”,它说明我应该使用什么连接,因为它存储在该服务器上。例如,如果我想获取一些日志,我会发送密钥“logs”,然后班级说我需要使用预定义的连接“connection_A”。
该类目前看起来像:
Class DatabaseConnection {
public $connection_name;
function __construct($key){
if($key=='logs'){
$connection_name = 'connection_A';
}
elseif($key=='userdetails'){
$connection_name = 'connection_B';
}
}
}
所以我现在要做的是:
$connection_A = new mysqli($dbhosta, $dbusera, $dbpassa, $dbnamea);
$connection_B = new mysqli($dbhostb, $dbuserb, $dbpassb, $dbnameb);
$databaseConnection = new DatabaseConnection('logs');
$sql = "SELECT * FROM `something` WHERE `timestamp`>='12378912798'";
$result = ${$databaseConnection->connection_name}->query($sql);
这工作正常。虽然它不像我希望的那样“动态”。我主要在功能方面遇到问题。但这需要我做:
function something(){
global $connection_A, $connection_B;
$databaseConnection = new DatabaseConnection('logs');
$sql = "SELECT * FROM `something` WHERE `timestamp`>='12378912798'";
$result = ${$databaseConnection->connection_name}->query($sql);
}
或者
function something(){
$databaseConnection = new DatabaseConnection('logs');
global ${$databaseConnection->connection};
$sql = "SELECT * FROM `something` WHERE `timestamp`>='12378912798'";
$result = ${$databaseConnection->connection_name}->query($sql);
}
两者都不是很优雅,如果我添加更多连接或随机播放,第一个是相当多的工作。
所以我想过做这样的事情:
Class DatabaseConnection {
public $connection_name;
function __construct($key){
if($key=='logs'){
$connection_name = 'connection_A';
}
elseif($key=='userdetails'){
$connection_name = 'connection_B';
}
}
function connection(){
$this->{$this->connection_name}();
}
function connection_A(){
$connection_A = new mysqli($dbhosta, $dbusera, $dbpassa, $dbnamea);
return $connection_A;
}
function connection_B(){
$connection_B = new mysqli($dbhostb, $dbuserb, $dbpassb, $dbnameb);
return $connection_B;
}
}
并像这样使用它:
$databaseConnection = new DatabaseConnection('logs');
$sql = "SELECT * FROM `something` WHERE `timestamp`>='12378912798'";
$result = $databaseConnection->connection->query($sql);
但是某些脚本中的某些函数每次运行时都会运行数百次。(插入和东西)。那么这不会打开 300 个连接或类似的东西吗?
我对 Mysqli 的了解太有限,无法完全了解这种方法的后果。我在某处读到 Mysqli 将连接汇集在一起,所以如果脚本第一次运行一个函数,它会使用一组凭据登录到 server_A,并且稍后它会尝试在同一个脚本中再次执行此操作,它不会实际上创建了一个新连接,但使用了相同的连接。我是对的还是把事情搞混了?
您认为什么是满足我“动态”需求的最佳方式,即应该联系哪个服务器以获取什么样的数据?或者你还有什么好主意?