Mit dem Datastore-Emulator können Sie die Datastore-Produktionsumgebung lokal emulieren. Sie können den Emulator verwenden, um Ihre Anwendung lokal zu entwickeln und zu testen. Darüber hinaus kann der Emulator Ihnen helfen, Indexe für Ihre Datastore-Produktionsinstanz zu generieren und nicht benötigte Indexe zu löschen. Auf dieser Seite werden Sie Schritt für Schritt durch die Installation des Emulators, seinen Start sowie die Festlegung der Umgebungsvariablen geführt, um Ihre Anwendung mit dem Emulator zu verbinden.
Bekannte Probleme
Standardmäßig emuliert der Datastore-Emulator keine Features, die von Firestore im Datastore-Modus eingeführt wurden. Die folgenden Standardemulator-Verhalten stimmen nicht mit dem Datastore-Modus überein:
- Der Emulator simuliert standardmäßig Eventual Consistency. Firestore im Datastore-Modus ist strikt konsistent.
- Der Emulator lässt Nicht-Ancestor-Abfragen innerhalb von Transaktionen nicht zu. Für Firestore im Datastore-Modus gilt diese Einschränkung nicht mehr.
- Der Emulator unterstützt keine
IN
-,!=
- undNOT-IN
-Abfragen. - Der Emulator unterstützt keine Aggregationsabfragen wie
COUNT(*)
.
Mit dem Flag --use-firestore-in-datastore-mode können einige der oben genannten Einschränkungen für Firestore im Datastore-Modus jedoch gelockert werden.
- Der Emulator simuliert strikt konsistente Nicht-Ancestor-Abfragen.
- Der Emulator erlaubt Nicht-Ancestor-Abfragen innerhalb von Transaktionen.
- Im Emulator gilt keine Beschränkung auf 25 Entitätengruppen in einer Transaktion.
Wenn Sie Firestore im Datastore-Modus emulieren möchten, verwenden Sie stattdessen gcloud emulators firestore start --database-mode=datastore-mode
.
Hinweise
Zur Verwendung des Datastore-Emulators benötigen Sie Folgendes:
- eine Java JRE (ab Version 11)
- Die Google Cloud CLI
- eine Anwendung, die mit den Google Cloud-Clientbibliotheken erstellt wurde
Emulator installieren
Der Datastore-Emulator ist eine Komponente der gcloud CLI.
Mit dem Befehl gcloud components install
können Sie den Datastore-Emulator installieren:
gcloud components install cloud-datastore-emulator
Emulator-Datenverzeichnisse
Der Emulator simuliert Datastore dadurch, dass eine /WEB-INF/appengine-generated/local_db.bin
-Datei in einem angegebenen Datenverzeichnis erstellt und Daten in local_db.bin
gespeichert werden. Standardmäßig verwendet der Emulator das Datenverzeichnis ~/.config/gcloud/emulators/datastore/
.
Die Datei local_db.bin
bleibt zwischen den Sitzungen des Emulators erhalten. Sie können mehrere Datenverzeichnisse einrichten und jedes dieser Verzeichnisse als separate, lokale Instanz im Datastore-Modus betrachten. Wenn Sie den Inhalt einer local_db.bin
-Datei löschen möchten, beenden Sie den Emulator und löschen Sie die Datei manuell.
Emulator starten
Führen Sie zum Starten des Emulators über eine Eingabeaufforderung den Befehl datastore start
aus:
gcloud emulators datastore start [flags]
Dabei sind [flags]
optionale Befehlszeilenargumente, die an die gcloud CLI übergeben werden. Beispiel:
Mit
--data-dir=[DATA_DIR]
wird das Datenverzeichnis des Emulators geändert. Der Emulator erstellt die Datei/WEB-INF/appengine-generated/local_db.bin
in[DATA_DIR]
oder verwendet eine vorhandene Datei, falls verfügbar.Mit
--no-store-on-disk
wird der Emulator so konfiguriert, dass für die Emulatorsitzung keine Daten auf dem Laufwerk gespeichert werden.
Die vollständige Liste optionaler Flags finden Sie in der Referenz zu gcloud beta emulators datastore start
.
Nach dem Starten des Emulators wird eine Meldung wie die Folgende angezeigt:
...
[datastore] Dev App Server is now running.
Um den Emulator zu beenden, drücken Sie über die Eingabeaufforderung Strg-C.
Umgebungsvariablen festlegen
Nachdem Sie den Emulator gestartet haben, müssen Sie Umgebungsvariablen festlegen, damit Ihre Anwendung eine Verbindung zum Emulator und nicht zur Produktionsdatenbank im Datastore-Modus herstellt. Legen Sie die Umgebungsvariablen auf dem Computer fest, auf dem auch die Anwendung ausgeführt wird.
Sie müssen die Umgebungsvariablen bei jedem Start des Emulators festlegen. Die Umgebungsvariablen hängen von dynamisch zugewiesenen Portnummern ab, die sich beim Neustart des Emulators ändern können.
Variablen automatisch einstellen
Wenn die Anwendung und der Emulator auf demselben Computer ausgeführt werden, können Sie die Umgebungsvariablen automatisch festlegen:
Linux/MacOS
Führen Sie env-init
mit Befehlsersetzung aus:
$(gcloud beta emulators datastore env-init)
Windows
Erstellen Sie eine Batchdatei und verwenden Sie bei der Ausführung die Ausgabe von env-init
:
gcloud beta emulators datastore env-init > set_vars.cmd && set_vars.cmd
Ihre Anwendung stellt nun eine Verbindung zum Datastore-Emulator her.
Variablen manuell einstellen
Wenn die Anwendung und der Emulator auf unterschiedlichen Computern ausgeführt werden, legen Sie die Umgebungsvariablen manuell fest:
Führen Sie den Befehl
env-init
aus:gcloud beta emulators datastore env-init
Legen Sie auf dem Computer, auf dem Ihre Anwendung ausgeführt wird, die Umgebungsvariablen und -werte so fest, wie sie in der Ausgabe des Befehls
env-init
angegeben sind. Beispiel:Linux/MacOS export DATASTORE_DATASET=my-project-id export DATASTORE_EMULATOR_HOST=::1:8432 export DATASTORE_EMULATOR_HOST_PATH=::1:8432/datastore export DATASTORE_HOST=http://::1:8432 export DATASTORE_PROJECT_ID=my-project-id
Windows set DATASTORE_DATASET=my-project-id set DATASTORE_EMULATOR_HOST=::1:8432 set DATASTORE_EMULATOR_HOST_PATH=::1:8432/datastore set DATASTORE_HOST=http://::1:8432 set DATASTORE_PROJECT_ID=my-project-id
Ihre Anwendung stellt nun eine Verbindung zum Datastore-Emulator her. Beachten Sie, dass sich die vom Befehl bereitgestellte Projekt-ID und der Port von dem obigen Beispiel unterscheiden.
Indexe aktualisieren und löschen
Wenn Sie Ihre Anwendung mit dem Emulator ausführen, können Sie für die Produktionsdatenbank im Datastore-Modus Indexe generieren und nicht benötigte Indexe löschen. Weitere Informationen finden Sie unter gcloud CLI verwenden.
Umgebungsvariablen entfernen
Nachdem Sie Ihre Arbeit mit dem Emulator abgeschlossen haben, beenden Sie ihn (Strg-C) und entfernen Sie die Umgebungsvariablen wieder, damit Ihre Anwendung wieder mit der Produktionsdatenbank im Datastore-Modus verbunden wird.
Variablen automatisch entfernen
Wenn die Anwendung und der Emulator auf demselben Computer ausgeführt werden, können Sie die Umgebungsvariablen automatisch entfernen:
Linux/MacOS
Führen Sie env-unset
mit Befehlsersetzung aus:
$(gcloud beta emulators datastore env-unset)
Windows
Erstellen Sie eine Batchdatei und verwenden Sie bei der Ausführung die Ausgabe von env-unset
:
gcloud beta emulators datastore env-unset > remove_vars.cmd && remove_vars.cmd
Die Anwendung wird nun mit Ihrer Produktionsdatenbank im Datastore-Modus verbunden.
Variablen manuell entfernen
Wenn die Anwendung und der Emulator auf unterschiedlichen Computern ausgeführt werden, entfernen Sie die Umgebungsvariablen manuell:
Führen Sie den Befehl
env-unset
aus:gcloud beta emulators datastore env-unset
Legen Sie auf dem Computer, auf dem die Anwendung ausgeführt wird, die Umgebungsvariablen und den Wert fest, wie in der Ausgabe des Befehls
env-unset
angegeben. Beispiel:Linux/MacOS unset DATASTORE_DATASET unset DATASTORE_EMULATOR_HOST unset DATASTORE_EMULATOR_HOST_PATH unset DATASTORE_HOST unset DATASTORE_PROJECT_ID
Windows set DATASTORE_DATASET= set DATASTORE_EMULATOR_HOST= set DATASTORE_EMULATOR_HOST_PATH= set DATASTORE_HOST= set DATASTORE_PROJECT_ID=
Die Anwendung wird nun mit Ihrer Produktionsdatenbank im Datastore-Modus verbunden.