2011-01-26 4 views
0

일반적인 호기심 질문이 있습니다.읽기 및 쓰기 기반 서버 집합에 웹 응용 프로그램 만들기

내가 마스터 서버 (쓰기 용)와 5 개의 슬레이브 서버 (읽기 용)를 가지고 있다고 가정 해보십시오.

웹 응용 프로그램 내에서 마스터와 슬레이브 모두에 ​​대한 연결을 시작 하시겠습니까? 쓰기를 보내기 위해서만 마스터 연결을 사용하고 데이터 읽기를 위해서만 슬레이브 연결을 사용합니까?

답변

1

어떤 경우 든 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; 
    } 

} 

사용량의 선을 따라 갈 것

이것은 아주 기본적인 예제이지만 마스터/슬레이브 연결을 관리하는 방법에 대한 아이디어를 얻었을 것입니다.

+0

감사 Mikushi, 우리의 시간의 시간을 저장 ... – Harsha

1

PHP 5.3 및 mysqlnd 드라이버를 사용하는 경우 드라이버 수준에서 읽기/쓰기 스플릿을 처리하므로 mysql, mysqli, PDO 연결 라이브러리에서 작동하는 코드는 수정하지 않아도됩니다.

은 더 많은 정보 읽기 : http://pecl.php.net/package/mysqlnd_ms http://www.slideshare.net/nixnutz/mysqlnd-quick-overview2011