PHP Mysqli';动态';说明应该使用什么连接(变量)

PHP Mysqli';动态';说明应该使用什么连接(变量),php,mysql,mysqli,database-connection,Php,Mysql,Mysqli,Database Connection,使用多个(动态)PHP Mysqli连接的最佳方式是什么 目前我只有一台MySQL服务器。我的所有数据都在这台服务器上的几个数据库中。但在不久的将来,我的存储需求将超过这台服务器的容量。所以我可能要做的是将一些数据库放在一台服务器上,另一些放在另一台服务器上。在未来,可能会有更多的服务器投入使用 为了“未来证明”我的脚本,我认为一个指向正确服务器的类可能是最好的解决方案。我只需要发送一个我想要获取的数据的“密钥”,它会告诉我应该使用什么连接,因为它存储在那个服务器上。例如,如果我想获取一些日志,

使用多个(动态)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);
}

两者都不是很优雅,如果我添加更多的连接或随意处理事情,那么第一个是相当不错的工作

所以我想做这样的事情:

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将连接集中在一起,因此如果脚本第一次运行一个函数,它使用一组凭据登录到服务器a,并且几分钟后它尝试在同一脚本中再次尝试,它实际上不会创建新连接,而是使用相同的连接。我是对的还是把事情搞混了

您认为什么是解决我需要“动态”说明应该联系哪台服务器获取哪种数据的最佳方式?或者您还有其他好主意吗?

您可以使用以下工具


允许主从读。另一个选择是像另一个答案所建议的那样查看类似amazon RDS的内容。

理想情况下,您的数据库扩展问题仍然是一个系统问题,不涉及任何编码。如果你有选择的话,看看亚马逊的RDS之类的东西,把你的可伸缩性移回到系统管理员的关注点上。还要重新考虑是否所有数据都需要在关系数据库中。也许CouchDB或Mongo可以更好地扩展日志之类的东西。
$databaseConnection = new DatabaseConnection('logs');
$sql = "SELECT * FROM `something` WHERE `timestamp`>='12378912798'";
$result = $databaseConnection->connection->query($sql);