ホームページ > バックエンド開発 > PHPチュートリアル > データベースの読み取りと書き込みの分離ソリューション: PHP プログラミングでのアプリケーション

データベースの読み取りと書き込みの分離ソリューション: PHP プログラミングでのアプリケーション

PHPz
リリース: 2023-06-23 11:18:01
オリジナル
1322 人が閲覧しました

データベースの読み書き分離ソリューション: PHP プログラミングでのアプリケーション

Web アプリケーション開発のプロセスでは、データベースはアプリケーションのさまざまなデータや情報を保存するために使用されるため、その安定性と信頼性は非常に重要です。大規模でトラフィックの多い Web アプリケーションの多くは、データベースのパフォーマンスと信頼性の課題に直面しています。この目的を達成するために、データベースの読み取りと書き込みの分離スキームが導入され、これらの課題に対処しました。この記事では、PHP プログラミングでデータベースの読み取りと書き込みの分離スキームを使用して、アプリケーションのパフォーマンスと信頼性を向上させる方法を説明します。

  1. データベース読み取り/書き込み分離スキームの基本原則

データベース読み取り/書き込み分離とは、データベース サーバーを 2 つの部分に分割することを指します。1 つの部分は読み取りリクエストの処理専用です。 、もう 1 つの部分は、書き込みリクエストを具体的に処理する部分です。これの目的は、データベースのアクセス効率とパフォーマンスを向上させ、データベース サーバーの負荷を軽減することです。

具体的な実装プロセスでは、読み取りと書き込みの分離は通常、マスター/スレーブ バックアップとデュアル マスター レプリケーションの 2 つの方法に分けられます。このうち、マスター/スレーブ バックアップ方式では、読み取りリクエストは複数のスレーブ サーバーに分散され、書き込みリクエストはマスター サーバー上でのみ処理されます。デュアルマスター レプリケーション ソリューションは、読み取りおよび書き込みリクエストを複数のサーバーに均等に分散し、サーバー間のデータ同期を確保する必要があります。

  1. PHP におけるデータベース読み取り/書き込み分離ソリューション

PHP プログラミングでは、通常、アプリケーション データの保存と管理に MySQL データベースが使用されます。以下では、PHP における 2 つの一般的なデータベース読み取り/書き込み分離スキームの適用を紹介します。

2.1 マスター/スレーブ レプリケーション スキーム

マスター/スレーブ レプリケーション スキームを使用する場合、プログラムは SQL ステートメントを作成します。読み取ったSQL文はスレーブサーバーに送信されます。読み取りサーバーと書き込みサーバー間でデータを同期するには、共通のエイリアス「log bin」を持つバイナリ ロギング テクノロジを使用する必要があります。具体的な手順は以下のとおりです。

(1) メインサーバーのバイナリログ機能を有効にする

MySQL 設定ファイル my.cnf に以下の設定情報を追加します。

log-bin= mysql-bin #バイナリログ機能を有効にする
binlog-ignore-db=mysql #特定のデータベースを無視する

##(2) スレーブサーバでバイナリログ機能を有効にする

MySQL 設定ファイル内で次の設定情報を my.cnf に追加します。

log-bin=mysql-bin # バイナリ ログ関数を有効にします

binlog-do-db=dbname # データベースを指定します同期する必要があります

( 3) マスターとスレーブの同期を設定します

スレーブ サーバーで次の SQL ステートメントを実行します:

CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE= 'recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

(4) コードの実装

PHP プログラムでは、次のようなライブラリを使用できます。 PDO または MySQLi を使用してデータベース サーバーに接続します。コード例は次のとおりです:

//メインの書き込みサーバーに接続します

$dbw = new PDO('mysql:host=master_host_name;dbname=dbname ;charset=utf-8', 'user_name', 'password', array(PDO::ATTR_TIMEOUT = > 1));
//スレーブ読み取りサーバーに接続します
$dbr = new PDO(' mysql:host=slave_host_name;dbname=dbname;charset=utf-8', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => 1));
//読み取り操作を実行します
$stmt = $dbr->query('SELECT * FROM table_name');
//書き込み操作を実行します
$sql = 'INSERT INTO table_name (col1,col2) VALUES (:col1, :col2) ';
$stmt = $dbw->prepare($sql);
$stmt->bindValue(':col1', $value1);
$stmt->bindValue(': Col2', $value2);
$stmt->execute();

2.2 ダブル プライマリ レプリケーション スキーム

デュアル プライマリ レプリケーション スキームを使用する場合、プログラムは均等に分散します。 2 つのプライマリ サーバーに対する SQL ステートメントの読み取りと書き込み。スレーブ サーバーがないため、2 つのマスター サーバー間のデータ同期を確保する必要があります。具体的な手順は次のとおりです。

(1) デュアルマスター同期の設定

両方のマスターサーバーで次の SQL ステートメントを実行します。

CHANGE MASTER TO MASTER_HOST='another_master_host_name ', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;

(2) コード実装

PHP プログラムでは PDO も使用できますまたは MySQLi ライブラリが 2 つのメイン サーバーに接続するまで待ちます。コード例は次のとおりです:

//メイン サーバー 1

$db1 = new PDO('mysql:host=host_name_1;dbname= dbname;charset=utf-8 ', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => 1));
//メインサーバーに接続します 2
$db2 = new PDO( 'mysql:host=host_name_2;dbname= dbname;charset=utf-8', 'user_name', 'password', array(PDO::ATTR_TIMEOUT => 1));
//読み取り操作を実行します
$stmt = $db1->query ('SELECT * FROM table_name');
//書き込み操作を実行します
$sql = 'INSERT INTO table_name (col1,col2) VALUES (:col1, :col2)' ;
$stmt = $db2 ->prepare($sql);
$stmt->bindValue(':col1', $value1);
$stmt->bindValue(':col2) ', $value2);
$stmt->execute();

  1. 概要

データベースの読み取り/書き込み分離スキームを適用することで、Web アプリケーションのパフォーマンスと信頼性を向上させることができます。 PHP プログラミングでは、マスター スレーブ レプリケーションとデュアル マスター レプリケーションを使用してデータベースの読み取りと書き込みを分離し、実際の状況に応じて適切なソリューションを選択できます。どのソリューションを採用する場合でも、データベースの読み取り/書き込み分離ソリューションを適切に適用するには、データベース サーバー間の同期、コード内で接続されているサーバー アドレスとポートなどの詳細に注意を払う必要があります。

以上がデータベースの読み取りと書き込みの分離ソリューション: PHP プログラミングでのアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート