インデックスの構成

Datastore モードの Cloud Firestore はアプリケーションからのすべてのクエリにインデックスを使用します。インデックスは、エンティティが変更されるたびに更新されるため、アプリケーションからのクエリにはすばやく結果が返されます。Datastore モードには組み込みインデックスを自動的に作成する機能がありますが、どの複合インデックスがアプリケーションに必要になるかをあらかじめ認識させる必要があります。アプリケーションに必要な複合インデックスは、構成ファイルで指定します。Cloud Datastore エミュレータは、アプリケーションのテストの際に Datastore モード インデックス構成を自動的に生成できます。gcloud コマンドライン ツールには、本番環境用の Datastore モードのデータベースで利用可能なインデックスを更新するためのコマンドがあります。

システム要件

gcloud ツールを使用するには、Google Cloud SDK がインストール済みである必要があります。

index.yaml について

アプリケーションが実行するすべての Datastore モードのクエリには、対応するインデックスが必要です。単純なクエリ用のインデックス(1 つのプロパティに関するクエリなど)は自動的に作成されます。複雑なクエリ用のインデックスは、index.yaml という構成ファイルで定義する必要があります。このファイルはアプリケーションとともにアップロードされ、Datastore モードのデータベースにインデックスを作成します。

Cloud Datastore エミュレータは、構成ファイルに適切なエントリを持たないインデックスを必要とするクエリをアプリケーションが実行しようとした際に、構成ファイルに自動的に項目を追加します。構成ファイルを編集して、インデックスを手動で変更したり、新規に作成したりすることもできます。index.yaml<project-directory>/WEB-INF/ フォルダにあります。デフォルトでは、WEB-INF/appengine-generated/index.yaml を含むデータ ディレクトリは ~/.config/gcloud/emulators/datastore/ です。詳細については、Cloud Datastore エミュレータのプロジェクト ディレクトリをご覧ください。

index.yaml ファイルの例を次に示します。

indexes:

- kind: Task
  ancestor: no
  properties:
  - name: done
  - name: priority
    direction: desc

- kind: Task
  properties:
  - name: collaborators
    direction: asc
  - name: created
    direction: desc

- kind: TaskList
  ancestor: yes
  properties:
  - name: percent_complete
    direction: asc
  - name: type
    direction: asc

index.yaml の構文は YAML 形式です。この構文について詳しくは、YAML のウェブサイトをご覧ください。

インデックスの定義

index.yaml には indexes というリスト要素を 1 つ指定します。このリストに含まれる各要素は、アプリケーションのインデックスを表します。

インデックス要素には、次のような要素があります。

kind
クエリに対応するエンティティの種類です。この要素は必須です。
properties

インデックスの列として並べ替える順に指定したプロパティのリストです。まず、等式フィルタで使用するプロパティ、次に、不等式フィルタで使用するプロパティ、そして並べ替え順序とその方向を指定します。

このリスト内の各要素には、次の要素を指定します。

name
プロパティの Datastore モード名です。
direction
並べ替えの方向です。昇順の場合は asc、降順の場合は desc を指定します。この値は、クエリの並べ替え順序で使用するプロパティについてのみ必要です。また、クエリで使用する方向と同じである必要があります。デフォルトは asc です。
ancestor

クエリに祖先句がある場合は yes です。デフォルトは no です。

自動インデックスと手動インデックス

Cloud Datastore エミュレータが、生成されたインデックス定義を index.yaml に追加すると、次の行の下で必要に応じて定義が挿入されます。

# AUTOGENERATED

エミュレータは、この行の下のすべてのインデックス定義を自動インデックスとみなし、アプリケーションがクエリを実行すると、この行の下の既存の定義を更新します。

この行の上のインデックス定義は、すべて手動で管理されているものとみなされ、エミュレータによって更新されることはありません。アプリケーションが実行するクエリを説明するインデックスが、完全な index.yaml ファイルに記載されていない場合、エミュレータは行の下のみを変更します。自動インデックス定義を管理するには、この行を上に移動します。

インデックスの更新

datastore indexes create コマンドはローカルの Datastore インデックス構成(index.yaml ファイル)を確認します。本番環境用の Datastore モードのデータベースにまだ存在しないインデックスがインデックス構成で定義されている場合、データベースは新しいインデックスを作成します。indexes create の使用例については、gcloud ツールを使用した開発ワークフローをご覧ください。

新しいインデックスに属するデータがデータベースにどの程度存在するかによって、インデックスの作成に時間がかかることがあります。まだ作成が完了していないインデックスを要求するクエリをアプリケーションが実行すると、例外が発生します。これを防ぐには、まだ作成が完了していない新しいインデックスを要求する新しいバージョンのアプリケーションのデプロイに注意する必要があります。

インデックスのステータスは GCP Console の [インデックス] ページから確認できます。

使用されていないインデックスの削除

インデックス構成でインデックスを変更または削除する場合、元のインデックスは Datastore モードのデータベースから自動的に削除されません。これにより、新しいインデックスを作成しながらアプリケーションの古いバージョンを実行したり、新しいバージョンで問題が発見されたらすぐに古いバージョンを復元したりできます。

古いインデックスが不要なことが確実な場合は、datastore indexes cleanup コマンドを使用してインデックスを削除できます。このコマンドは、本番環境用の Datastore モード インスタンスのインデックスのうち、ローカル バージョンの index.yaml に存在しないものをすべて削除します。indexes cleanup の使用例については、gcloud ツールを使用した開発ワークフローをご覧ください。

コマンドライン引数

インデックスの作成用とクリーンアップ用のコマンドライン引数の詳細については、datastore indexes createdatastore indexes cleanup をそれぞれご覧ください。gcloud ツールのコマンドライン引数の詳細については、gcloud ツールのリファレンスをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Datastore ドキュメント