我有一个普遍的好奇心问题。
假设我有 1 台主服务器(用于写入)和 5 台从服务器(用于读取)。
在我的 Web 应用程序中,我会启动与主从服务器的连接吗?使用主连接仅用于发送写入和使用从连接仅用于读取数据?
我有一个普遍的好奇心问题。
假设我有 1 台主服务器(用于写入)和 5 台从服务器(用于读取)。
在我的 Web 应用程序中,我会启动与主从服务器的连接吗?使用主连接仅用于发送写入和使用从连接仅用于读取数据?
在任何情况下,您都应该根据需要处理您的主从连接,通常通过 getConnection() 函数。在我的工作设置中,2个集群,2个master,4个slave在一个,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;
}
}
用法将遵循:
$query = "SELECT * FROM table";
$res = mysql_query($query, Custom_Db_Handler::get()->getConnection("my_db", Custom_Db_Handler::READ));
这是一个非常基本的示例,但我想您了解如何管理主/从连接。
如果您使用 PHP 5.3 和 mysqlnd 驱动程序,您可以添加 mysqlnd_ms 插件,该插件将在驱动程序级别处理读/写拆分,因此无需修改您的代码(适用于 mysql、mysqli、PDO 连接库)。
欲了解更多信息,请阅读: http: //pecl.php.net/package/mysqlnd_ms http://www.slideshare.net/nixnutz/mysqlnd-quick-overview2011