Ausführliche praktische Erklärung der Lese- und Schreibtrennung mit PHP+MYSQL

墨辰丷
Freigeben: 2023-03-27 20:36:01
Original
2216 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich PHP + MYSQL vorgestellt, um die Lese- und Schreibtrennung anhand von Beispielen zu analysieren und so die Ladekapazität der Datenbank zu verbessern darüber.

1. Einführung

Ich habe bereits 2 Artikel geschrieben, nämlich:

Das Prinzip der MySQL-Master-Slave-Synchronisation

Myql-Master-Slave-Synchronisationspraxis

Auf dieser Grundlage werden wir eine einfache PHP+Mysql-Lese- und Schreibtrennung implementieren, um die Ladekapazität der Datenbank zu verbessern.

2. Code-Praxis

<?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());
Nach dem Login kopieren

Das Obige ist hoffentlich der gesamte Inhalt dieses Artikels Es wird für alle beim Lernen hilfreich sein.


Verwandte Empfehlungen:

PHP-Methode zum Herstellen einer Verbindung mit der MySQLDatenbank

Verwenden Sie die $wpdb-Klasse von WordPress zum LesenMySQLSo lösen Sie die Probleme, die beim Ausführen von Ajax in der Datenbank auftreten

php mysqlDetaillierte Erläuterung der Verwendung der Funktion _list_dbs()

Das obige ist der detaillierte Inhalt vonAusführliche praktische Erklärung der Lese- und Schreibtrennung mit PHP+MYSQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage