>  기사  >  백엔드 개발  >  PHP+MYSQL을 이용한 읽기와 쓰기 분리에 대한 자세한 실무 설명

PHP+MYSQL을 이용한 읽기와 쓰기 분리에 대한 자세한 실무 설명

墨辰丷
墨辰丷원래의
2018-05-24 17:17:262160검색

이 글에서는 읽기와 쓰기 분리를 실현하기 위해 주로 PHP+MYSQL을 소개합니다. 읽기와 쓰기 분리 기술을 예제와 함께 분석하여 데이터베이스의 로드 용량을 향상시키는 데 관심이 있는 분들은 더 자세히 알아볼 수 있습니다.

1. 소개

이전에 2개의 기사를 작성했습니다. 간단한 PHP+Mysql 읽기와 쓰기를 분리하여 데이터베이스의 로드 용량을 향상시킵니다.

2. 코드 연습

<?php
class Db
{
  private $res;
  function __construct($sql)
  {
    $querystr = strtolower(trim(substr($sql,0,6)));
    //如果是select,就连接slave服务器
    if($querystr == &#39;select&#39;)
    {
      $res=$this->slave_select($sql);
      $this->res=$res;
    }
    //如果不是select,就连接master服务器
    else
    {
      $res=$this->master_change($sql);
      $this->res=$res;
    }
  }

  /**
   * slave从库返回sql查询结果
   * @param $sql
   * @return array
   */
  private function slave_select($sql){
    //该处只是随机获取slave节点的ip,当然,还可以采用其他算法获取slave_ip
    $slave_server=$this->get_slave_ip();
    $dsn="mysql:host=$slave_server;dbname=test";
    $user=&#39;root&#39;;
    $pass=&#39;123456&#39;;
    $dbh=new PDO($dsn, $user, $pass);
    return $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  }

  /**master主库返回sql执行结果
   * @param $sql
   * @return int
   */
  private function master_change($sql){
    $master_server=&#39;192.168.33.22&#39;;
    $dsn="mysql:host=$master_server;dbname=test";
    $user=&#39;root&#39;;
    $pass=&#39;123456&#39;;
    $dbh=new PDO($dsn, $user, $pass);
    return $dbh->exec($sql);
  }

  /**
   * 随机获取slave-ip
   * @return mixed
   */
  private function get_slave_ip(){
    $slave_ips=[&#39;192.168.33.33&#39;,&#39;192.168.33.44&#39;];
    $count=count($slave_ips)-1;
    $random_key=mt_rand(0,$count);
    return $slave_ips[$random_key];
  }

  /**       
   * 获取结果
   * @return int
   */
  public function get_res(){
    return $this->res;
  }
}

$sql1 = "select * from t1";
$sql2 = "insert into t1 (name) values (&#39;haha&#39;)";
$sql3 = "delete from t1 where id=1";
$sql4 = "update t1 set name=&#39;Jerry&#39; where id=2";

$db = new Db($sql1);
//$db = new Db($sql2);
//$db = new Db($sql3);
//$db = new Db($sql4);

var_dump($db->get_res());

위 내용은 이 글의 전체 내용이므로, 모두의 학습에 도움이 되기를 바랍니다.

관련 권장 사항:

php


php

워드프레스의 $wpdb 클래스를 사용하여 mysql
데이터베이스에서 Ajax를 수행할 때 발생하는 문제를 해결하는 방법

PHP 사용법에 대한 자세한 설명
mysql

_list_dbs() 함수


위 내용은 PHP+MYSQL을 이용한 읽기와 쓰기 분리에 대한 자세한 실무 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.