ホームページ  >  記事  >  バックエンド開発  >  PHP+MYSQLを使った読み書き分離の具体的な実践解説

PHP+MYSQLを使った読み書き分離の具体的な実践解説

墨辰丷
墨辰丷オリジナル
2018-05-24 17:17:262199ブラウズ

この記事では、主に読み取りと書き込みの分離を実現するための PHP+MYSQL を紹介し、それによってデータベースの負荷容量を向上させる手法を分析します。興味がある人はそれについて学ぶことができます。 。

1. はじめに

これまでに 2 つの記事を書きました:

Mysql のマスターとスレーブの同期原理

Myql のマスターとスレーブの同期の実践

これをベースに、簡単な 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());

以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。


関連する推奨事項:

mysqlデータベースをphpに接続する方法

WordPressの$wpdbクラスを使用してmysqlデータベースでajaxを実行するときに発生する問題を解決する方法

phpのmysql
_list_dbs()関数の使い方を詳しく解説

🎜🎜

以上がPHP+MYSQLを使った読み書き分離の具体的な実践解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。