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

PolarDB:読み書き分離

最終更新日:May 29, 2024

このトピックでは、読み書き分離のヒントについて説明します。

このトピックで提供される情報は、PolarDB-X 1.0 V5.3以降に適用されます。

PolarDB-X 1.0は、アプリケーション層に対して透過的な読み書き分離を提供します。 プライマリと読み取り専用のApsaraDB RDSインスタンス間でデータが同期される場合、数ミリ秒のレイテンシが存在します。 プライマリApsaraDB RDSインスタンスのデータが変更された直後にデータの変更を読み取る必要がある場合は、データを読み取るためのSQLリクエストがプライマリApsaraDB RDSインスタンスにルーティングされていることを確認する必要があります。 この要求を満たすために、 PolarDB-X 1.0は、読み書き分離のカスタムヒントを提供します。 これらのカスタムヒントを使用すると、指定したプライマリまたは読み取り専用のApsaraDB RDSインスタンスにSQL文をルーティングできます。

構文

/* + TDDL:
    master()
    | slave()
*/ 

カスタムヒントを使用して、プライマリまたは読み取り専用のApsaraDB RDSインスタンスでSQLステートメントを実行するかどうかを指定できます。 SQL文で /* + TDDL:slave()*/ を使用し、プライマリApsaraDB RDSインスタンスが複数の読み取り専用ApsaraDB RDSインスタンスに関連付けられている場合、PolarDB-X 1.0は割り当てられた重みに基づいて読み取り専用ApsaraDB RDSインスタンスをランダムに選択し、SQL文を実行します。

注意

  • PolarDB-X 1.0カスタムヒントは、/* + TDDL:hint_command */ 形式または /!+ TDDL:hint_command */ 形式で指定できます。
  • カスタムヒントを /* + TDDL:hint_command */ 形式で指定した場合、PolarDB-X 1.0はMySQLコマンドラインクライアントへのログインに使用するコマンドに -cパラメーターを追加します: mysql。 これにより、クライアントでPolarDB-X 1.0カスタムヒントを含むSQLステートメントを実行できます。 -cパラメーターPolarDB-X 1.0を追加しない場合、クライアントはSQLステートメントをサーバーに送信して実行する前に、SQLステートメントのコメントを削除します。 PolarDB-X 1.0この形式のカスタムヒントは、MySQLコメントとして定義されます。 したがって、PolarDB-X 1.0カスタムヒントは有効になりません。 詳細については、「mysql client options」をご参照ください。

  • プライマリApsaraDB RDSインスタンスでSQLステートメントを実行します。
    SELECT /* + TDDL:master()*/ * FROM table_name;

    カスタムヒント /* + TDDL:master()*/ がSQL文の最初のキーワードの最後に追加されると、このSQL文はプライマリApsaraDB RDSインスタンスにルーティングされます。

  • 指定された読み取り専用ApsaraDB RDSインスタンスでSQLステートメントを実行します。

    SELECT /* + TDDL:slave()*/ * FROM table_name;

    カスタムヒント /* + TDDL:slave()*/ がSQL文の最初のキーワードの最後に追加されると、このSQL文は、割り当てられた重みに基づいて読み取り専用のApsaraDB RDSインスタンスにランダムにルーティングされます。

    説明
    • 読み書き分離のカスタムヒントは、トランザクションに含まれていない読み取り専用SQL文にのみ適用できます。 データを書き込むために実行される、またはトランザクションに含まれるSQL文は、引き続きプライマリApsaraDB RDSインスタンスにルーティングされます。
    • SQL文で /* + TDDL:slave()*/ ヒントを使用すると、PolarDB-X 1.0は、割り当てられた重みに基づいて、SQL文を読み取り専用のApsaraDB RDSインスタンスにランダムにルーティングします。 読み取り専用のApsaraDB RDSインスタンスが使用できない場合、エラーは報告されません。 代わりに、プライマリApsaraDB RDSインスタンスが選択され、SQL文が実行されます。