すべてのプロダクト
Search
ドキュメントセンター

PolarDB:読み書き分離

最終更新日:Aug 02, 2024

PolarDB for MySQLクラスターは、読み書き分離機能をサポートしています。 アプリケーションが読み書き モードでクラスターエンドポイントに接続すると、アプリケーションの書き込み要求は自動的にプライマリノードに転送されます。 読み取り要求は、各ノードのワークロード (保留中の要求の数) に基づいて、プライマリノードまたは読み取り専用ノードにインテリジェントに分散されます。

利点

  • 読み取り整合性

    アプリケーションが読み書きモードでクラスターエンドポイントを使用してクラスターとの接続を確立すると、読み書き分離に使用される組み込みデータベースプロキシは、アプリケーションのプライマリノードと読み取り専用ノードへの接続を自動的に確立します。 アプリケーションの接続セッションでは、プロキシは、各データベースノードのデータ同期ステータスに基づいて、最適なノードに要求をインテリジェントに配信します。 このプロセスは、データの正確性 (書き込み操作後の正しい読み取り結果) を保証し、ノード間の読み取りおよび書き込み要求のバランスをとる。

    示意图

  • ネイティブの読み書き分離によりパフォーマンスが向上

    クラウドにプロキシを作成して、読み書き分離を実装できます。 ただし、データがデータベースに書き込まれる前に複数のコンポーネントによってデータが解析および転送されるため、待ち時間が長い問題が発生する可能性があります。 PolarDBは、既存のセキュアなリンクにデプロイされた組み込みプロキシを使用して、読み書き分離を実装し、データが複数のコンポーネント間で移動しないようにします。 これにより、レイテンシが削減され、データ処理が高速化されます。

  • 简単なメンテナンス

    従来のモードで読み取り /書き込み分割を実装することは、複雑で時間がかかる。 アプリケーションのプライマリノードと各読み取り専用ノードのエンドポイントを指定する必要があります。 また、書き込み要求をプライマリノードに送信し、読み取り要求をすべてのノードに送信するように転送ルールを設定する必要があります。

    PolarDBは、アプリケーションがクラスターとの接続を確立するために使用できるクラスターエンドポイントを提供します。 接続が確立された後、アプリケーションは読み書き要求をクラスターに送信できます。 書き込み要求は自動的にプライマリノードに転送され、読み取り要求はプライマリノードまたは読み取り専用ノードにインテリジェントに分散されます。 読み取り /書き込み分割プロセスはユーザーに透過的であり、メンテナンスコストを効果的に削減します。

    アプリケーションを変更することなく、読み取り専用ノードを追加することで、システムの処理能力を拡張できます。

  • データベースの可用性を強化するためのノードヘルスチェック

    PolarDBの読み書き分離モジュールは、クラスター内のすべてのノードでヘルスチェックを自動的に実行します。 ノードに障害が発生するか、レイテンシが指定されたしきい値を超えると、PolarDBはノードへの読み取り要求の転送を停止します。 読み取り要求と書き込み要求は他の正常なノードに転送され、読み取り専用ノードに障害が発生した場合でもアプリケーションがクラスターにアクセスできるようにします。 障害のあるノードが復旧すると、PolarDBはリクエストを受信できるノードのリストにノードを自動的に追加します。

  • 無料機能により、リソースとメンテナンスコストを削減

    読み書き分離機能は無料で使用できます。

リクエスト転送のルール

読み書き分離モードでの転送ルール:

  • 次のリクエストは、プライマリノードにのみ転送されます。

    • INSERTUPDATEDELETESELECT FOR UPDATEなどのすべてのDML操作。

    • データベースまたはテーブルの作成、データベースまたはテーブルの削除、テーブルスキーマまたはアクセス許可の変更など、すべてのDDL操作。

    • トランザクション分割が無効になっている場合のすべてのトランザクション要求。

      説明

      トランザクション分割が有効化された後のトランザクションリクエストの配布ルールについては、「負荷分散」トピックの「トランザクション分割」セクションをご参照ください。

    • ユーザー定義関数。

    • ストアドプロシージャ。

    • EXECUTEステートメント。

    • 複数ステートメントのクエリ。 詳細については、「マルチステートメント」をご参照ください。

    • 一時テーブルを含むリクエスト。

    • SELECT last_insert_id() ステートメント。

    • ユーザー環境変数のクエリまたは変更。

    • BINLOG DUMPステートメント。

  • 以下のリクエストは、プライマリノードまたは読み取り専用ノードに転送されます。

    説明

    プライマリノードによる読み取りリクエストの許可パラメーターを [はい] に設定した場合にのみ、要求がプライマリノードに転送されます。

    • 非トランザクション読み取り要求。

    • COM_STMT_EXECUTEステートメントです。

  • 以下のリクエストはすべてのノードに転送されます。

    • システム環境変数の変更。

    • USEステートメント。

    • COM_STMT_PREPAREステートメントです。

    • COM_CHANGE_USERCOM_QUIT、およびCOM_SET_OPTIONステートメント。

    • SHOW PROCESSLISTステートメント。

      説明

      SHOW PROCESSLISTステートメントを実行すると、PolarDBはデータベースシステムのノードで実行されているすべてのプロセスを返します。

    • SQLのKILLステートメント (LinuxのKILLコマンドではません) 。

読み取り専用モードでの転送ルール:

  • DDLおよびDML操作はサポートされていません。

  • 要求は、負荷分散モードで読み取り専用ノードに転送されます。

  • 選択したノードのリストにプライマリノードを追加しても、読み取り要求はプライマリノードに転送されません。

  • BINLOG DUMP文は、特定の読み取り専用ノードにのみ転送されます。

特徴

PolarDBは、読み書き分離に次の機能を提供します。