El emulador de Datastore ofrece una emulación local del entorno de producción de Datastore. Puedes usar el emulador para desarrollar y probar tu aplicación localmente. Además, el emulador puede ayudarte a generar índices para tu instancia de producción de Datastore y a eliminar los que no necesites. En esta página se explica cómo instalar el emulador, iniciarlo y definir variables de entorno para conectar tu aplicación con el emulador.
Problemas conocidos
De forma predeterminada, el emulador de Datastore no emula las funciones introducidas por Firestore en el modo de Datastore. Los siguientes comportamientos predeterminados del emulador no coinciden con el modo Datastore:
- El emulador simula la coherencia final de forma predeterminada. Firestore en modo Datastore tiene una coherencia inmediata.
- El emulador no permite consultas que no sean de ancestros en las transacciones. Firestore en modo Datastore ya no tiene esta limitación.
- El emulador no admite consultas
IN
,!=
niNOT-IN
. - El emulador no admite consultas de agregación como
COUNT(*)
.
Sin embargo, la marca --use-firestore-in-datastore-mode ayuda a flexibilizar algunas de las restricciones anteriores para Firestore en el modo Datastore.
- El emulador simula consultas de no ancestros con coherencia inmediata.
- El emulador permite realizar consultas que no son de ancestros en las transacciones.
- El emulador elimina la limitación de 25 grupos de entidades en una transacción.
Para emular Firestore en modo Datastore, usa gcloud emulators firestore start --database-mode=datastore-mode
en su lugar.
Antes de empezar
Para usar el emulador de Datastore, necesitas lo siguiente:
- Un JRE de Java (versión 21 o posterior)
- La CLI de Google Cloud
- Una aplicación creada con las bibliotecas de cliente de Google Cloud
Instalar el emulador
El emulador de Datastore es un componente de la CLI de gcloud.
Usa el comando gcloud components install
para instalar el emulador de Datastore:
gcloud components install cloud-datastore-emulator
Directorios de datos del emulador
El emulador simula Datastore creando /WEB-INF/appengine-generated/local_db.bin
en un directorio de datos especificado y almacenando datos en local_db.bin
. De forma predeterminada, el emulador usa el directorio de datos ~/.config/gcloud/emulators/datastore/
.
El archivo local_db.bin
se mantiene entre las sesiones del emulador. Puedes configurar varios directorios de datos y considerar cada uno de ellos como una instancia independiente del modo Datastore local. Para borrar el contenido de un archivo local_db.bin
, detén el emulador y elimina el archivo manualmente.
Iniciar el emulador
Inicia el emulador ejecutando datastore start
desde un símbolo del sistema:
gcloud beta emulators datastore start [flags]
donde [flags]
son argumentos opcionales de la línea de comandos que se proporcionan a la CLI de gcloud. Por ejemplo:
--data-dir=[DATA_DIR]
cambia el directorio de datos del emulador. El emulador crea el archivo/WEB-INF/appengine-generated/local_db.bin
en[DATA_DIR]
o, si está disponible, usa un archivo que ya exista.--no-store-on-disk
configura el emulador para que no conserve ningún dato en el disco durante la sesión del emulador.
Consulta la referencia de gcloud beta emulators datastore start
para ver la lista completa de marcas opcionales.
Después de iniciar el emulador, debería ver un mensaje similar al siguiente:
...
[datastore] Dev App Server is now running.
Para detener el emulador, escribe Control-C en el símbolo del sistema.
Configurar variables de entorno
Después de iniciar el emulador, debe definir variables de entorno para que su aplicación se conecte al emulador en lugar de a su base de datos en modo Datastore de producción. Define estas variables de entorno en la misma máquina que usas para ejecutar tu aplicación.
Debes definir las variables de entorno cada vez que inicies el emulador. Las variables de entorno dependen de los números de puerto asignados dinámicamente, que pueden cambiar cuando reinicies el emulador.
Definir las variables automáticamente
Si tu aplicación y el emulador se ejecutan en el mismo ordenador, puedes definir las variables de entorno automáticamente:
Linux o macOS
Ejecuta env-init
mediante la sustitución de comandos:
$(gcloud beta emulators datastore env-init)
Windows
Crea y ejecuta un archivo por lotes con la salida de env-init
:
gcloud beta emulators datastore env-init > set_vars.cmd && set_vars.cmd
Tu aplicación se conectará al emulador de Datastore.
Definir las variables manualmente
Si tu aplicación y el emulador se ejecutan en máquinas diferentes, define las variables de entorno manualmente:
Ejecuta el comando
env-init
:gcloud beta emulators datastore env-init
En la máquina que ejecuta tu aplicación, define las variables de entorno y los valores tal como se indica en el resultado del comando
env-init
. Por ejemplo:Linux o 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
Tu aplicación se conectará al emulador de Datastore. Ten en cuenta que el ID del proyecto y el puerto que proporciona el comando serán diferentes de los del ejemplo anterior.
Actualizar y eliminar índices
Si ejecutas tu aplicación con el emulador, puedes generar índices para tu base de datos en modo Datastore de producción, así como eliminar los índices que no necesites. Consulta más información en el artículo Usar gcloud CLI.
Eliminar variables de entorno
Cuando hayas terminado de usar el emulador, detenlo (Control-C) y elimina las variables de entorno para que tu aplicación se conecte a tu base de datos en modo Datastore de producción.
Eliminar las variables automáticamente
Si tu aplicación y el emulador se ejecutan en la misma máquina, puedes eliminar las variables de entorno automáticamente:
Linux o macOS
Ejecuta env-unset
mediante la sustitución de comandos:
$(gcloud beta emulators datastore env-unset)
Windows
Crea y ejecuta un archivo por lotes con la salida de env-unset
:
gcloud beta emulators datastore env-unset > remove_vars.cmd && remove_vars.cmd
Tu aplicación se conectará a tu base de datos en modo Datastore de producción.
Eliminar las variables manualmente
Si tu aplicación y el emulador se ejecutan en máquinas diferentes, elimina las variables de entorno manualmente:
Ejecuta el comando
env-unset
:gcloud beta emulators datastore env-unset
En la máquina que ejecuta tu aplicación, elimina las variables de entorno según las indicaciones de la salida del comando
env-unset
. Por ejemplo:Linux o 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=
Tu aplicación se conectará a tu base de datos en modo Datastore de producción.