Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在基于读写的服务器集上构建Web应用程序_Php_Mysql_Database Replication - Fatal编程技术网

Php 在基于读写的服务器集上构建Web应用程序

Php 在基于读写的服务器集上构建Web应用程序,php,mysql,database-replication,Php,Mysql,Database Replication,我有一个好奇的问题 假设我有1个主服务器(用于写)和5个从服务器(用于读) 在我的web应用程序中,我会同时启动与主应用程序和从应用程序的连接吗?仅将主连接用于发送写操作,将从连接仅用于读取数据?在任何情况下,您都应该根据需要处理主连接和从连接,通常是通过getConnection()函数。在我的工作设置中,两个集群,两个主节点,一个节点上有4个从节点,另一个节点上有8个从节点,功能基本上如下所示: <?php class Custom_Db_Handler { const RE

我有一个好奇的问题

假设我有1个主服务器(用于写)和5个从服务器(用于读)


在我的web应用程序中,我会同时启动与主应用程序和从应用程序的连接吗?仅将主连接用于发送写操作,将从连接仅用于读取数据?

在任何情况下,您都应该根据需要处理主连接和从连接,通常是通过getConnection()函数。在我的工作设置中,两个集群,两个主节点,一个节点上有4个从节点,另一个节点上有8个从节点,功能基本上如下所示:

<?php
class Custom_Db_Handler 
{
    const READ = "read";
    const WRITE = "write";

    private static $_instance;

    private $_connections = array();
    private $_config;

    private function __construct() {
        $this->_config = Storage::get("config mysql");
    }

    public function get() {
        if(is_null(self::$_instance)) {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    public function getConnection($db, $type = "read") {
        if(array_key_exists($type, $this->_connections)) {
            return $this->_connections[$type][$db];
        }

        if($type != self::READ || $type != self::WRITE) {
            return false;
        }

        $this->_connections[$type][$db] = mysql_connect($this->_config[$type]['host'], $this->_config[$type]['user'], $this->_config[$type]['pass']);
        mysql_select_db($db, $this->_connections[$type][$db]);
        return $this->_connections;
    }

}

这是一个非常基本的示例,但我想您已经了解了如何管理主/从连接。

如果您使用PHP5.3和mysqlnd驱动程序,您可以添加mysqlnd_ms插件,该插件将在驱动程序级别处理读/写拆分,因此无需修改代码(适用于mysql、mysqli、PDO连接库)

欲了解更多信息,请阅读: http://www.slideshare.net/nixnutz/mysqlnd-quick-overview2011

$query = "SELECT * FROM table";
$res = mysql_query($query, Custom_Db_Handler::get()->getConnection("my_db", Custom_Db_Handler::READ));