インデックス設定

Google Cloud Datastore は、アプリケーションからのすべてのクエリにインデックスを使用します。 インデックスは、エンティティが変更されるたびに更新されるため、アプリケーションからのクエリにはすばやく結果が返されます。Cloud Datastore は、自動的にビルトイン インデックスを使用しますが、アプリケーションが要求する複合インデックスをあらかじめ把握しておく必要があります。アプリケーションに必要な複合インデックスは、設定ファイルで指定します。Cloud Datastore エミュレータは、アプリケーションのテストの際に Cloud Datastore インデックス設定を自動的に生成できます。gcloud ツールでは、本番環境用の Cloud Datastore インスタンスで使用可能なインデックスを更新するコマンドを使用できます。

システム要件

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

index.yaml について

アプリケーションが実行するすべての Cloud Datastore クエリには、対応するインデックスが必要です。単純なクエリ用のインデックス(1 つのプロパティに関するクエリなど)は自動的に作成されます。複雑なクエリ用のインデックスは、index.yaml という設定ファイルで定義する必要があります。このファイルはアプリケーションとともにアップロードされ、Cloud 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
プロパティの Cloud Datastore 名です。
direction
並べ替えの方向です。昇順の場合は asc、降順の場合は desc を指定します。この値は、クエリの並べ替え順序で使用するプロパティについてのみ必要です。また、クエリで使用する方向と同じである必要があります。デフォルトは asc です。
ancestor

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

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

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

# AUTOGENERATED

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

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

インデックスの更新

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

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

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

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

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

古いインデックスが不要であると確信できる場合には、datastore cleanup-indexes コマンドを使用して Cloud Datastore から削除できます。このコマンドは、index.yaml のローカルバージョンで言及されていないインデックスを、本番環境用の Cloud Datastore インスタンスからすべて削除します。cleanup-indexes の使用例については、gcloud を使用した開発ワークフローをご覧ください。

コマンドライン引数

インデックスの作成と削除に関わるコマンドライン引数の詳細については、それぞれ datastore create-indexesdatastore cleanup-indexes をご覧ください。gcloud に関わるコマンドライン引数の詳細については、gcloud をご覧ください。

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

Cloud Datastore のドキュメント