ホームページ データベース mysql チュートリアル php+mysqlで読み書き分離を実現する方法

php+mysqlで読み書き分離を実現する方法

Jun 03, 2023 am 09:43 AM
mysql php

PHP は MySQL の読み取りと書き込みの分離を実装しており、次の関数を実装する必要があります:

1. 読み取り操作と書き込み操作を区別します: PHP コードでは、データベース区別するには、読み取り操作と書き込み操作を異なる MySQL インスタンスに配置する必要があります。

異なるアルゴリズムを使用して、読み取りリクエストを複数の MySQL インスタンスに均等に分散するロード バランシング ソリューションを設計する必要があります。

以下、上記の機能の実装方法を詳しく紹介します。

読み取り操作と書き込み操作の分離

MySQL の読み取り操作と書き込み操作の分離を実装するには、MySQL マスター/スレーブ レプリケーション テクノロジのサポートが必要です。 MySQL のマスター/スレーブ レプリケーションでは、すべての書き込み操作はマスター データベースで実行され、読み取り操作のみがスレーブ データベースで実行されます。

PHP コードでは、MySQL の読み取り操作と書き込み操作を区別する必要があります。書き込み操作はメイン ライブラリに送信され、読み取り操作はスレーブ ライブラリに送信されます。

次の 2 つの方法は、特定の実装に使用できます:

1. 接続の手動切り替え: コード内の読み取りおよび書き込み操作の接続を手動で切り替えます。必要に応じて、メイン データベースとスレーブ データベースを異なる MySQL インスタンスに接続し、対応する SQL ステートメントを実行します。

たとえば、次の SQL ステートメントの場合:

SELECT * FROM users WHERE age>18;
ログイン後にコピー

次のコードを使用して、読み取り操作の接続を切り替えることができます:

//生成一个读取从库的连接
$slaveConn = mysqli_connect($slaveHost, $slaveUser, $slavePass, $dbName);
mysqli_query($slaveConn, "SET NAMES utf8");

//查询数据
$result = mysqli_query($slaveConn, "SELECT * FROM users WHERE age>18");
ログイン後にコピー

同様に、書き込み操作の場合:

INSERT INTO users (name,age,sex) VALUES ('jack',18,'male');
ログイン後にコピー

次のコードを使用して書き込み操作の接続を切り替えることができます:

//生成一个写入主库的连接
$masterConn = mysqli_connect($masterHost, $masterUser, $masterPass, $dbName);
mysqli_query($masterConn, "SET NAMES utf8");

//插入数据
$result = mysqli_query($masterConn, "INSERT INTO users (name,age,sex) VALUES ('jack',18,'male')");
ログイン後にコピー

上記のコードでは、mysqli_connect 関数を使用してデータベース接続を生成し、mysqli_query メソッドを使用してデータベース接続を操作します。 MySQLデータベース。このうち、$slaveHost、$slaveUser、$slavePassはスレーブライブラリの接続情報、$masterHost、$masterUser、$masterPassはマスターライブラリの接続情報です。

PHP フレームワークの組み込み実装を使用して、読み取り操作と書き込み操作を切り替えることができます。 Yii2 フレームワークでは、次のコードを使用して読み取り操作と書き込み操作を切り替えることができます:

//生成一个读取从库的连接
$slaveConn = Yii::$app->slaveDb->getConnection();

//查询数据
$query = new \yii\db\Query();
$result = $query->from('users')->where(['age' > 18])->all($slaveConn);
ログイン後にコピー

同様に、次のコードを使用して書き込み操作を切り替えます:

//生成一个写入主库的连接
$masterConn = Yii::$app->masterDb->getConnection();

//插入数据
$result = Yii::$app->db->createCommand()->insert('users', [
'name' => 'jack',
'age' => 18,
'sex' => 'male'
])->execute($masterConn);
ログイン後にコピー

上記のコードでは、 Yii::$app ->slaveDb と Yii::$app->masterDb はどちらも Yii2 フレームワークの組み込みデータベース接続コンポーネントであり、スレーブ ライブラリからの読み取りとマスター ライブラリへの書き込みのメソッドを提供します。

負荷分散戦略

MySQL の読み取りと書き込みの分離を実装する場合、負荷分散は非常に重要な部分です。すべての読み取りリクエストが各スレーブ データベースに均等に分散される場合にのみ、MySQL の読み取りと書き込みの分離の利点を最大限に活用できます。

一般的に使用されるロード バランシング戦略には次のものがあります:

1. ランダム戦略: 読み取りリクエストを各スレーブ データベースにランダムに分散します。

2. ポーリング戦略: 読み取りリクエストを各スレーブ ライブラリに順番に割り当て、それらを周期的に使用します。

3. 可用性優先戦略: 可用性監視方法を使用して、読み取り操作の前に利用可能なスレーブ ライブラリを選択します。

この記事ではポーリング戦略を採用しており、具体的な実装は次のとおりです。

//从库连接信息
$slave1 = array(
'host' => 'slave1.host.com', 
'user' => 'slave1user', 
'pass' => 'slave1pass',
'name' => 'dbname'
);

$slave2 = array(
'host' => 'slave2.host.com', 
'user' => 'slave2user', 
'pass' => 'slave2pass',
'name' => 'dbname'
);

$slave3 = array(
'host' => 'slave3.host.com', 
'user' => 'slave3user', 
'pass' => 'slave3pass',
'name' => 'dbname'
);


//增加从库列表
$slaveList = array($slave1, $slave2, $slave3);


//轮询获取从库连接信息
function getSlaveConn() {
global $slaveList;
static $index = 0;
if ($index >= count($slaveList)) {
    $index = 0;
}
$slave = $slaveList[$index];
$index++;
$conn = mysqli_connect($slave['host'], $slave['user'], $slave['pass'], $slave['name']);
mysqli_query($conn, "SET NAMES utf8");
return $conn;
}
ログイン後にコピー

上記のコードでは、$slave1、$slave2、$slave3 がスレーブ ライブラリの接続情報、$slaveList です。スレーブライブラリリストです。 getSlaveConn 関数では、$index はスレーブ ライブラリへの接続数です。接続数がスレーブ ライブラリ リストの長さと等しい場合、$index は 0 にリセットされ、最初のスレーブ ライブラリから接続が再接続されます。スレーブ ライブラリに接続するたびに、mysqli_connect 関数を使用してデータベースに接続します。

上記の実装により、PHP の MySQL の読み書き分離を実現する機能が実装されました。上記のコードを使用して、PHP アプリケーションに MySQL の読み取り/書き込み分離機能を実装し、必要に応じて負荷分散戦略を追加または変更できます。

高い同時実行性と大量のデータの場合、PHP を使用して MySQL の読み取りと書き込みを分離すると、MySQL データベースの読み取りと書き込みのパフォーマンスが効果的に向上し、アプリケーションの応答時間が短縮され、ユーザー エクスペリエンスが向上します。

以上がphp+mysqlで読み書き分離を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

PHPの未来:適応と革新 PHPの未来:適応と革新 Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

NavicatでMySQLへの新しい接続を作成する方法 NavicatでMySQLへの新しい接続を作成する方法 Apr 09, 2025 am 07:21 AM

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

PHP:それは死にかけていますか、それとも単に適応していますか? PHP:それは死にかけていますか、それとも単に適応していますか? Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

See all articles