このトピックでは、読み書き分離のヒントについて説明します。
このトピックで提供される情報は、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文が実行されます。