このページでは、Spanner の有向読み取りとその使用方法について説明します。
Spanner の有向読み取りでは、マルチリージョン インスタンス構成またはカスタム リージョン構成(オプションの読み取り専用リージョンを含む)内の特定のレプリカ タイプまたはリージョンに、読み取り専用トランザクションと単一読み取りを柔軟にルーティングできます。
一般的なユースケース
有向読み取りの一般的なユースケースは次のとおりです。
- 複数のリージョン間でワークロードをロード バランシングして、CPU 使用率を均等にする。
- トランザクション ワークロードへの影響を最小限に抑えることで、アプリケーション内で分析を分離する。
- 変更ストリームの読み取りを部分的に分離する。 Spanner API を使用して Spanner データの変更をストリーミングする場合、有向読み取りを使用することで、トランザクション ワークロードへの影響を最小限に抑えることができます。
サポートされているクエリ オペレーション
クエリ オペレーション | 有向読み取りはサポートされていますか? |
---|---|
ステイル読み取り | ○ |
強力な読み取り | ○ |
読み取り / 書き込みトランザクション | いいえ |
読み取り / 書き込みトランザクションとパーティション化 DML タイプの一括更新では、有向読み取りはサポートされていません。これは、読み取り / 書き込みトランザクションをリーダー リージョンで処理する必要があるためです。読み取り / 書き込みトランザクションで有向読み取りが使用されている場合、トランザクションは BAD_REQUEST
エラーで失敗します。
制限事項
Spanner の有向読み取りには次の制限があります。
- 有向読み取りは、マルチリージョン インスタンス構成、またはカスタム リージョン構成(オプションの読み取り専用リージョンを含む)内の Spanner インスタンスでのみ使用できます。
- 書き込みリクエストは常にリーダー リージョンによって処理されるため、読み取り / 書き込みリクエストでは有向読み取りを使用できません。
- Google Cloud コンソールまたは Google Cloud CLI では、有向読み取りを使用できません。REST API と RPC API および Spanner クライアント ライブラリで使用できます。
- 1 回の有向読み取りで最大 10 個のレプリカを指定できます。
- システム分析情報ダッシュボードまたは Metrics Explorer を使用する場合、1 秒あたりのオペレーション数、データベースごとの 1 秒あたりのオペレーション数、API メソッドごとの 1 秒あたりのオペレーション数のグラフには、指定した以外の場所での有向読み取りリクエストが表示されることがあります。この場合、グラフの情報が正しくない可能性があります。CPU 使用率の指標を使用して、読み取りリクエストが選択したリージョンにルーティングされていることを確認できます。これらの指標は、有向読み取りトラフィックがルーティングされる場所に関する最も正確な情報を示します。
準備
有向読み取りを使用する前に、次のことを考慮してください。
- アプリケーションに最も近いレプリカまたはリージョン以外のレプリカまたはリージョンに読み取りをルーティングすると、アプリケーションで追加のレイテンシが発生する可能性があります。
- 以下に基づいてトラフィックをルーティングできます。
- リージョン名(例:
us-central1
)。 - レプリカの種類(有効な値:
READ_ONLY
とREAD_WRITE
)。
- リージョン名(例:
- 有向読み取りにおける自動フェイルオーバー オプションはデフォルトで有効になっています。自動フェイルオーバー オプションが有効で、指定されたすべてのレプリカが使用不能または異常な場合、Spanner は
includeReplicas
リスト外のレプリカにリクエストをルーティングします。自動フェイルオーバー オプションを無効にし、指定したすべてのレプリカが使用不能であるか、異常な場合、有向読み取りリクエストは失敗します。
有向読み取りパラメータ
REST または RPC API を使用して有向読み取りを実行する場合は、これらのフィールドを directedReadOptions
パラメータで定義する必要があります。includeReplicas
または excludeReplicas
のいずれか 1 つだけを含めることができます。
includeReplicas
:replicaSelections
の繰り返しセットが含まれます。このリストは、特定のリージョンまたはレプリカタイプへの有向読み取りを考慮する順序を示しています。最大 10 個のincludeReplicas
を指定できます。replicaSelections
: 有向読み取りリクエストを処理するlocation
またはレプリカtype
で構成されます。includeReplicas
を使用する場合は、次のフィールドのうち少なくとも 1 つを指定する必要があります。location
: 有向読み取りリクエストを処理するロケーション。ロケーションは、データベースのマルチリージョン構成内のいずれかのリージョンにする必要があります。ロケーションがデータベースのマルチリージョン構成内のどのリージョンにもない場合、リクエストは想定どおりにルーティングされません。代わりに、最も近いリージョンによって処理されます。たとえば、マルチリージョン インスタンス構成nam6
のデータベース上のロケーションus-central1
に読み取りを指定することができます。type
: 有向読み取りリクエストを処理するレプリカタイプ。有効なタイプはREAD_WRITE
とREAD_ONLY
です。
autoFailoverDisabled
: これはデフォルトでFalse
に設定されています。つまり、自動フェイルオーバーが有効になります。自動フェイルオーバー オプションが有効で、指定されたすべてのレプリカが使用不能であるか異常である場合、Spanner はincludeReplicas
リスト外のレプリカにリクエストをルーティングします。自動フェイルオーバー オプションを無効にし、指定したすべてのレプリカが使用不能であるか、異常な場合、有向読み取りリクエストは失敗します。有効な値は、TRUE
(無効)、FALSE
(有効)です。
excludeReplicas
: リクエストの処理から除外されるreplicaSelections
の繰り返しセットが含まれます。Spanner は、このリストのレプリカにリクエストをルーティングしません。replicaSelections
: 有向読み取りリクエストの処理から除外されるロケーションまたはレプリカタイプ。excludeReplicas
を使用する場合は、次のフィールドのうち少なくとも 1 つを指定する必要があります。location
: 有効読み取りリクエストの処理から除外されるロケーション。type
: 有向読み取りリクエストの処理から除外されるレプリカタイプ。有向なタイプはREAD_WRITE
とREAD_ONLY
です。
REST リクエスト本文の例を表示するには、[有向読み取りを使用する] セクションの [REST] タブをクリックします。
有向読み取りを使用する
Spanner クライアント ライブラリ、REST API、RPC API を使用して、有向読み取りを実行できます。
クライアント ライブラリ
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
次の REST API を使用して、有向読み取りを実行できます。
たとえば、executeSQL
を使用して us-central1
で有向読み取りを実行するには、次のようにします。
[
projects.instances.databases.sessions.executeSql
] をクリックします。[session] に以下のように入力します。
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
次のように置き換えます。
- PROJECT-ID: プロジェクト ID。
- INSTANCE-ID: インスタンス ID。
- DATABASE-ID: データベース ID。
- SESSION-ID: セッション ID。
セッションを作成するときに
SESSION-ID
の値を取得します。
[Request body] で以下のように入力します。
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
[実行] をクリックします。レスポンスにクエリの結果が表示されます。
RPC
次の RPC API を使用して、有向読み取りを実行できます。
次のステップ
- トランザクション外部の読み取りの実行方法を学習する。