일반적인 호기심 질문이 있습니다.읽기 및 쓰기 기반 서버 집합에 웹 응용 프로그램 만들기
내가 마스터 서버 (쓰기 용)와 5 개의 슬레이브 서버 (읽기 용)를 가지고 있다고 가정 해보십시오.
웹 응용 프로그램 내에서 마스터와 슬레이브 모두에 대한 연결을 시작 하시겠습니까? 쓰기를 보내기 위해서만 마스터 연결을 사용하고 데이터 읽기를 위해서만 슬레이브 연결을 사용합니까?
일반적인 호기심 질문이 있습니다.읽기 및 쓰기 기반 서버 집합에 웹 응용 프로그램 만들기
내가 마스터 서버 (쓰기 용)와 5 개의 슬레이브 서버 (읽기 용)를 가지고 있다고 가정 해보십시오.
웹 응용 프로그램 내에서 마스터와 슬레이브 모두에 대한 연결을 시작 하시겠습니까? 쓰기를 보내기 위해서만 마스터 연결을 사용하고 데이터 읽기를 위해서만 슬레이브 연결을 사용합니까?
어떤 경우 든 getConnection() 함수를 통해 필요에 따라 마스터 및 슬레이브 연결을 처리해야합니다. 일, 2 개 클러스터, 2 개 마스터, 다른 사람에 하나, 8 4 노예에서 내 설정에서이 기능은 기본적으로 다음과 같이 :
$query = "SELECT * FROM table";
$res = mysql_query($query, Custom_Db_Handler::get()->getConnection("my_db", Custom_Db_Handler::READ));
:
<?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;
}
}
사용량의 선을 따라 갈 것
이것은 아주 기본적인 예제이지만 마스터/슬레이브 연결을 관리하는 방법에 대한 아이디어를 얻었을 것입니다.
PHP 5.3 및 mysqlnd 드라이버를 사용하는 경우 드라이버 수준에서 읽기/쓰기 스플릿을 처리하므로 mysql, mysqli, PDO 연결 라이브러리에서 작동하는 코드는 수정하지 않아도됩니다.
은 더 많은 정보 읽기 : http://pecl.php.net/package/mysqlnd_ms http://www.slideshare.net/nixnutz/mysqlnd-quick-overview2011
감사 Mikushi, 우리의 시간의 시간을 저장 ... – Harsha