App Engine verwendet für jede Abfrage einer Anwendung Indexe in Datastore. Diese Indexe werden bei jeder Änderung einer Entität aktualisiert, damit schnell Ergebnisse geliefert werden können, wenn die Anwendung eine Abfrage durchführt. Hierzu muss für Datastore im Voraus angegeben werden, welche Abfragen die Anwendung ausführt. In einer Konfigurationsdatei legen Sie fest, welche Indexe Ihre Anwendung benötigt. Der lokale Entwicklungsserver kann die Indexkonfigurationsdatei beim Testen Ihrer Anwendung automatisch generieren.
Dieser Leitfaden enthält Anweisungen zum Erstellen und Verwalten der Indexe. Hintergrundinformationen finden Sie unter Datenspeicherindexe.
Datastore-Indexe erstellen
Jede Datenspeicherabfrage, die von einer Anwendung durchgeführt wird, erfordert einen entsprechenden Index. Indexe für einfache Abfragen, zum Beispiel Abfragen zu einem einzelnen Attribut, werden automatisch erstellt. Indexe für komplexe Abfragen müssen in einer Konfigurationsdatei namens definiert werdenindex.yaml
.
Diese Datei wird mit Ihrer Anwendung bereitgestellt, um die Indexe in Datastore zu erstellen.
Im Folgenden finden Sie ein Beispiel für eine index.yaml
-Datei:
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
Indexe mit dem Entwicklungsserver erstellen
Der Entwicklungs-Webserver (dev_appserver.py) fügt dieser Datei automatisch Einträge hinzu, wenn die Anwendung versucht, eine Abfrage auszuführen, für die ein Index benötigt wird, der noch keinen entsprechenden Eintrag in der Konfigurationsdatei hat.
Wenn Sie auf dem Entwicklungsserver jede Abfrage ausführen, die mit Ihrer Anwendung möglich ist, generiert der Entwicklungsserver eine vollständige Liste von Einträgen in der Datei index.yaml
.
Wenn der Entwicklungs-Webserver eine generierte Indexdefinition zur Datei index.yaml
hinzufügt, erfolgt dies unterhalb der folgenden Zeile. Wenn diese Zeile noch nicht vorhanden ist, wird sie eingefügt:
# AUTOGENERATED
Der Entwicklungs-Webserver behandelt alle Indexdefinitionen unter dieser Zeile als automatische Einträge und kann vorhandene Definitionen unter dieser Zeile aktualisieren, wenn die Anwendung Abfragen ausführt.
Indexe manuell erstellen
Sie können der Datei index.yaml
Indexe manuell hinzufügen oder vorhandene Einträge bearbeiten. Manuell verwaltete Abfragen müssen Sie oberhalb der Zeile hinzufügen, die den Kommentar AUTOGENERATED
enthält.
Alle Indexdefinitionen oberhalb dieser Zeile werden als manuell verwaltet angesehen und nicht vom Entwicklungs-Webserver aktualisiert. Der Entwicklungsserver nimmt Änderungen nur unterhalb der Zeile vor, und zwar nur dann, wenn in der gesamten Datei index.yaml
kein Index für eine von der Anwendung ausgeführte Abfrage beschrieben wird. Verschieben Sie automatische Indexdefinitionen an eine Stelle oberhalb dieser Zeile, um sie manuell zu verwalten.
Weitere Informationen finden Sie in der Referenz zu index.yaml
.
Indexe aktualisieren
Sie laden die Konfigurationsdatei index.yaml
mit dem Befehl gcloud
in Datastore hoch. Falls die Datei index.yaml
Indexe definiert, die in Cloud Datastore nicht vorhanden sind, werden diese neuen Indexe erstellt.
Es kann eine Weile dauern, bis Datastore alle Indexe erstellt und diese Indizes App Engine zur Verfügung stehen. Wenn Ihre Anwendung bereits für den Erhalt von Traffic konfiguriert ist, können bei Abfragen Ausnahmen auftreten, für die ein Index benötigt wird, der noch erstellt wird.
Sie müssen genügend Zeit für das Erstellen aller Indexe einräumen, um Ausnahmen zu vermeiden. Weitere Informationen und Beispiele zum Erstellen von Indexen finden Sie unter Python 2-Anwendung bereitstellen.
Zum Hochladen der Indexkonfiguration in Cloud Datastore führen Sie den folgenden Befehl in dem Verzeichnis aus, in dem sich die index.yaml befindet:
gcloud
gcloud datastore indexes create index.yaml
Weitere Informationen finden Sie in der gcloud datastore
-Referenz.
appcfg
appcfg.py update_indexes [YOUR_APP_DIRECTORY]
Mit der Cloud Console können Sie den Status Ihrer Indexe im Blick behalten.
Nicht verwendete Indexe löschen
Wenn Sie einen Index in der Datei index.yaml
ändern oder daraus entfernen, wird der ursprüngliche Index nicht automatisch aus Datastore gelöscht. Dadurch haben Sie die Möglichkeit, weiterhin eine ältere Version der Anwendung auszuführen, während neue Indexe erstellt werden. Außerdem können Sie sofort zur älteren Version zurückkehren, wenn bei einer neueren Version ein Problem festgestellt wird.
Wenn Sie sicher sind, dass die in Cloud Datastore verbliebenen alten Indexe nicht mehr benötigt werden, können Sie mit dem folgenden Befehl Indexe löschen, die in der Datei index.yaml
nicht definiert sind:
gcloud
gcloud datastore cleanup-indexes index.yaml
Weitere Informationen finden Sie in der gcloud datastore
-Referenz.
appcfg
appcfg.py vacuum_indexes [YOUR_APP_DIRECTORY]