データストア インデックスの構成

App Engine は、アプリケーションによって行われるクエリごとに Cloud Datastore でインデックスを使用します。インデックスはエンティティが変更されるたびに更新されるので、アプリからのクエリに対してすばやく結果を返すことができます。これを実現するには、アプリからどのようなクエリが要求されるかを、Cloud Datastore 側であらかじめ把握しておく必要があります。アプリケーションで必要になるインデックスは、構成ファイルで指定します。ローカルの開発用サーバーでは、アプリケーションをテストする際に、インデックス構成ファイルが自動的に生成されます。

このガイドでは、インデックスの作成方法と管理方法を説明します。詳しい背景情報については、データストア インデックスをご覧ください。

データストア インデックスの作成

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

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

indexes:

- kind: Cat
  ancestor: no
  properties:
  - name: name
  - name: age
    direction: desc

- kind: Cat
  properties:
  - name: name
    direction: asc
  - name: whiskers
    direction: desc

- kind: Store
  ancestor: yes
  properties:
  - name: business
    direction: asc
  - name: owner
    direction: asc

開発用サーバーを使用してインデックスを作成する

開発用ウェブサーバー(dev_appserver.py)は、構成ファイルに適切なエントリを持たないインデックスを必要とするクエリをアプリケーションが実行しようとした際に、構成ファイルに自動的に項目を追加します。

開発用サーバー上でアプリのクエリを実行すると、開発用サーバーが完全なエントリリストを生成し、index.yaml ファイルに保存します。

開発用ウェブサーバーが生成されたインデックス定義を index.yaml に追加すると、次の行の下で必要に応じて定義が挿入されます。

# AUTOGENERATED

開発用ウェブサーバーは、この行の下のすべてのインデックス定義を自動インデックスとみなし、アプリケーションがクエリを実行すると、この行の下の既存の定義を更新します。

インデックスを手動で作成する

インデックスは手動で index.yaml ファイルに追加できます。また、既存のエントリを編集することもできます。クエリを手動で管理する場合には、AUTOGENERATED でコメント化された行の上に追加する必要があります。

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

構文については、index.yaml リファレンスをご覧ください。

インデックスの更新

index.yaml 構成ファイルは、gcloud コマンドを使用して Cloud Datastore にアップロードします。index.yaml ファイルで Cloud Datastore に存在しないインデックスが定義されている場合は、そのインデックスが新たに作成されます。

App Engine によるすべてのインデックスの作成が完了するまでに、しばらく時間がかかることがあるため、このようなインデックスは App Engine ですぐに使用できるようにはなりません。アプリがすでにトラフィックを受け取るように構成されている場合は、まだ作成中のインデックスを必要とするクエリに対して例外が発生する可能性があります。

例外を回避するには、すべてのインデックスを作成するための時間を確保する必要があります。インデックス作成の詳細と例については、Python 2 アプリのデプロイをご覧ください。

インデックス構成を Cloud Datastore にアップロードするには、index.yaml が配置されているディレクトリから次のコマンドを実行します。

gcloud

gcloud datastore indexes create index.yaml

詳細については、gcloud datastore リファレンスをご覧ください。

appcfg

appcfg.py update_indexes [YOUR_APP_DIRECTORY]

GCP Console を使用して、インデックスのステータスを確認します

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

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

Cloud Datastore に残っている古いインデックスが不要になった場合は、次のコマンドを実行して、index.yaml ファイルで定義されていない任意のインデックスを削除できます。

gcloud

gcloud datastore cleanup-indexes index.yaml

詳細については、gcloud datastore リファレンスをご覧ください。

appcfg

appcfg.py vacuum_indexes [YOUR_APP_DIRECTORY]
このページは役立ちましたか?評価をお願いいたします。

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

Python 2 の App Engine スタンダード環境