Google Code が利用できる言語: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
App Engine データストアでは、アプリケーションからのすべてのクエリにインデックスを使用します。エンティティに変更が加えられるたびにこれらのインデックスを更新することで、アプリケーションからのクエリに対してすばやく結果を返せるようにしています。これを実現するためには、アプリケーションからどのようなクエリが要求されるかを、データストア側であらかじめ把握しておく必要があります。アプリケーションでどのようなインデックスが必要になるかは設定ファイルで指定します。開発サーバーでは、アプリケーションをテストする際に、データストアのインデックス設定を自動的に生成できます。
データストアのインデックスの設定は、アプリケーションの WAR 内の WEB-INF/ ディレクトリに格納されている datastore-indexes.xml というファイルで指定します。このファイルは、ルート要素が <datastore-indexes> の XML ファイルです。これに、ゼロ個以上の <datastore-index> 要素(App Engine で保持すべきインデックスごとに 1 つずつ)が含まれます。
クエリとインデックスで説明したように、インデックスとは、特定の種類のエンティティ内の特定のプロパティ セットの値をテーブルにしたものです。プロパティ値の各カラムは、昇順または降順に並び替えられます。インデックスの設定では、エンティティの種類を指定し、いくつかのプロパティの名前と並び替え順序を指定します。
次に、2 つのインデックスの例を示します:
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
xmlns="http://appengine.google.com/ns/datastore-indexes/1.0"
autoGenerate="true">
<datastore-index kind="Employee" ancestor="false">
<property name="lastName" direction="asc" />
<property name="hireDate" direction="desc" />
</datastore-index>
<datastore-index kind="Project" ancestor="false">
<property name="dueDate" direction="asc" />
</datastore-index>
</datastore-indexes>
<datastore-indexes> 要素には autoGenerate 属性があり、このファイルを自動生成されたインデックス設定と見なすべきかどうかを指定できます。下のインデックスの自動設定の使用をご覧ください。
各 <datastore-index> 要素がインデックスを表します。kind 属性には、インデックス化するエンティティの種類を指定します。ancestor 属性は、エンティティをエンティティ グループの親でフィルタリングするクエリをサポートする場合は true、サポートしない場合は false にします。
<datastore-index> の <property> 要素は、インデックス化するエンティティのプロパティを表します。name 属性にはプロパティ名を指定し、direction 属性には並び替え順序として asc(昇順)または desc(降順)を指定します。プロパティ要素を指定する順序によって、インデックス内の順序が決まります。行はまず 1 番目のプロパティで並び替えられ、次に 2 番目のプロパティで、次に 3 番目のプロパティで、となります。
アプリケーションのクエリで必要になるインデックスを手作業で設定すると、面倒なだけでなくエラーの原因にもなります。開発サーバーを使用すると、インデックスを自動的に設定できます。インデックスの自動設定を使用するには、datastore-indexes.xml ファイルの <datastore-indexes> 要素に autoGenerate="true" 属性を追加します。インデックスの自動設定は、アプリケーションに datastore-indexes.xml ファイルがない場合でも使用できます。
インデックスの自動設定を有効にすると、アプリケーションの WAR 内の WEB-INF/appengine-generated/ ディレクトリに datastore-indexes-auto.xml というファイルが作成されます。開発サーバーで実行しているアプリケーションが、対応するインデックスが datastore-indexes.xml または datastore-indexes-auto.xml に含まれていないクエリを実行すると、適切なインデックス設定が datastore-indexes-auto.xml に追加されます。
アプリケーションをアップロードする際にインデックスの自動設定が有効になっていると、そのアプリケーションで必要になるインデックスが、datastore-indexes.xml と datastore-indexes-auto.xml の両方に基づいて App Engine によって判断されます。
datastore-indexes.xml で autoGenerate="false" になっている場合、datastore-indexes-auto.xml のコンテンツは開発サーバーでも AppCfg でも無視されます。この場合、開発サーバーで実行されているアプリケーションが datastore-indexes.xml でインデックスを指定されていないクエリを実行すると、開発サーバー(または App Engine)から例外がスローされます。
時々インデックス設定を datastore-indexes-auto.xml から datastore-indexes.xml に移動し、開発サーバーでインデックスの自動設定を無効にしてアプリケーションをテストすることをおすすめします。この方法なら、2 つのファイルを個別に管理することなくインデックスを最新の状態に維持できる上、未設定のインデックスによって発生するエラーをテストでも確実に再現できます。