ホームページ  >  記事  >  データベース  >  MySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?

MySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?

WBOY
WBOYオリジナル
2023-08-02 19:27:211002ブラウズ

MySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?

MySQL は、さまざまな Web アプリケーションやエンタープライズ レベルのシステムで広く使用されている、一般的に使用されるリレーショナル データベース管理システムです。アプリケーションの規模が増大するにつれ、データベースの読み取りおよび書き込みの負荷はますます重くなり、データベースのパフォーマンスとスケーラビリティを向上させるためには、読み取りと書き込みの分離と負荷分散が必要な技術的手段となっています。

読み取りと書き込みの分離とは、データベースの読み取り効率と容量を向上させるために、読み取り操作と書き込み操作を異なる MySQL サーバーに分離することを指します。負荷分散とは、データベースの負荷を分散するためにデータベース リクエストを複数の MySQL サーバーに分散することを指します。

以下では、MySQL の読み書き分離と負荷分散技術を学習するいくつかの方法と、それに対応するコード例を紹介します。

  1. マスター/スレーブ レプリケーション

マスター/スレーブ レプリケーションは、最も基本的で一般的な読み取り/書き込み分離方法です。 1 つの MySQL サーバーをすべての書き込み操作の処理を担当するマスター サーバー (Master) として設定し、他の MySQL サーバーをすべての読み取り操作の処理を担当するスレーブ サーバー (Slave) として設定します。マスターサーバーは書き込み操作のログをスレーブサーバーに送信し、スレーブサーバーはそのログに基づいてデータの同期を実行します。

マスター/スレーブ レプリケーションを構成するコード例は次のとおりです。

マスター サーバーの構成ファイル (my.cnf) に次の構成を追加します。

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=mydatabase

スレーブ サーバーの構成ファイルに次の構成を追加します。

[mysqld]
server-id=2

マスター/スレーブ サーバーを再起動した後、次のコマンドでマスター/スレーブのステータスを確認できます:

SHOW MASTER STATUS;
SHOW SLAVE STATUS;
    # #読み書き分離ミドルウェア
マスター/スレーブ レプリケーションに加えて、読み書き分離ミドルウェアを使用して、より柔軟な読み書き分離と負荷分散を実現することもできます。一般的な読み取り/書き込み分離ミドルウェアには、MySQL Proxy、MaxScale、ProxySQL などがあります。

ProxySQL を例として、読み取りと書き込みの分離を構成するコード例は次のとおりです。

# 创建一个与数据库对应的后端连接池
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0, '192.168.0.1', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, '192.168.0.2', 3306);

# 创建读写分离规则
INSERT INTO mysql_query_rules(match_pattern, destination_hostgroup) VALUES ('^SELECT', 1);
INSERT INTO mysql_query_rules(match_pattern, destination_hostgroup) VALUES ('^UPDATE', 0);

上記の構成を通じて、ProxySQL は、ベースの異なるホスト グループ (ホスト グループ) にクエリ リクエストを送信します。 SQL ステートメントのタイプに応じて、読み取りと書き込みの分離と負荷分散を実現します。

    データベース接続プール
データベース接続プールは、データベースのパフォーマンスとスケーラビリティを向上させるためのもう 1 つの重要なテクノロジです。あらかじめ一定数のデータベースコネクションを作成してコネクションプールに入れておき、データベース操作要求があった場合にはコネクションプールから直接コネクションを取得することで、頻繁な接続・切断操作を回避し、応答速度や同時実行性を向上させます。データベースのパフォーマンス。

以下は、Java 言語で Apache Commons DBCP データベース接続プールを使用して実装されたコード例です。

import org.apache.commons.dbcp2.BasicDataSource;

public class ConnectionPoolDemo {
    public static void main(String[] args) {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
      
        // 从连接池中获取连接
        try (Connection connection = dataSource.getConnection()) {
            // 执行数据库操作
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

上記のコードを通じて、データベース接続プールを使用して MySQL を迅速に取得できます。データベース接続の向上により、データベースのパフォーマンスが向上し、運用効率と同時実行パフォーマンスが向上します。

要約すると、MySQL の読み取り/書き込み分離および負荷分散技術の学習は、マスター/スレーブ レプリケーション、読み取り/書き込み分離ミドルウェア、およびデータベース接続プールを通じて実現できます。これらの技術的手段により、データベースの読み取り効率、容量、同時実行パフォーマンスが向上し、システム全体のパフォーマンスとスケーラビリティが向上します。

以上がMySQL の読み取りと書き込みの分離と負荷分散を学習するためのテクニックは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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