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