O emulador do Datastore oferece uma emulação local do ambiente de produção do Datastore. Pode usar o emulador para desenvolver e testar a sua aplicação localmente. Além disso, o emulador pode ajudar a gerar índices para a sua instância de produção do Datastore e eliminar índices desnecessários. Esta página explica como instalar o emulador, iniciar o emulador e definir variáveis de ambiente para associar a sua aplicação ao emulador.
Problemas conhecidos
Por predefinição, o emulador do Datastore não emula as funcionalidades introduzidas pelo Firestore no modo Datastore. Os seguintes comportamentos do emulador predefinidos não correspondem ao modo Datastore:
- Por predefinição, o emulador simula a consistência eventual. O Firestore no modo Datastore é fortemente consistente.
- O emulador não permite consultas não descendentes em transações. O Firestore no modo Datastore já não tem esta limitação.
- O emulador não suporta consultas
IN
,!=
eNOT-IN
. - O emulador não suporta consultas de agregação, como
COUNT(*)
.
No entanto, a flag --use-firestore-in-datastore-mode ajuda a flexibilizar algumas das restrições acima para o Firestore no modo Datastore.
- O emulador simula consultas não descendentes fortemente consistentes.
- O emulador permite consultas não descendentes em transações.
- O emulador remove a limitação de 25 grupos de entidades numa transação.
Para emular o Firestore no modo Datastore,
use gcloud emulators firestore start --database-mode=datastore-mode
em alternativa.
Antes de começar
Para usar o emulador do Datastore, precisa do seguinte:
- Um JRE Java (versão 21 ou superior)
- A CLI do Google Cloud
- Uma aplicação criada com as bibliotecas cliente do Google Cloud
Instalar o emulador
O emulador do Datastore é um componente da CLI gcloud.
Use o comando gcloud components install
para instalar o
emulador do Datastore:
gcloud components install cloud-datastore-emulator
Diretórios de dados do emulador
O emulador simula o Datastore criando
/WEB-INF/appengine-generated/local_db.bin
num diretório de dados especificado e
armazenando dados em local_db.bin
. Por predefinição, o emulador usa o diretório de dados ~/.config/gcloud/emulators/datastore/
.
O ficheiro local_db.bin
persiste entre sessões do emulador. Pode configurar vários diretórios de dados e considerar cada um como uma instância do modo Datastore local separada. Para limpar o conteúdo de um ficheiro, pare o emulador e elimine o ficheiro manualmente.local_db.bin
A iniciar o emulador
Inicie o emulador executando datastore start
numa linha de comandos:
gcloud beta emulators datastore start [flags]
onde [flags]
são argumentos opcionais da linha de comandos fornecidos à CLI gcloud. Por exemplo:
--data-dir=[DATA_DIR]
altera o diretório de dados do emulador. O emulador cria o ficheiro/WEB-INF/appengine-generated/local_db.bin
em[DATA_DIR]
ou, se estiver disponível, usa um ficheiro existente.--no-store-on-disk
configura o emulador para não persistir dados no disco para a sessão do emulador.
Consulte a referência gcloud beta emulators datastore start
para ver a lista completa de flags opcionais.
Depois de iniciar o emulador, deve ver uma mensagem semelhante à seguinte:
...
[datastore] Dev App Server is now running.
Para parar o emulador, escreva Control-C na linha de comandos.
Definir variáveis de ambiente
Depois de iniciar o emulador, tem de definir variáveis de ambiente para que a sua aplicação se ligue ao emulador em vez da base de dados do modo Datastore de produção. Defina estas variáveis de ambiente na mesma máquina que usa para executar a sua aplicação.
Tem de definir as variáveis de ambiente sempre que iniciar o emulador. As variáveis de ambiente dependem dos números de porta atribuídos dinamicamente que podem mudar quando reinicia o emulador.
Definir automaticamente as variáveis
Se a sua aplicação e o emulador forem executados na mesma máquina, pode definir as variáveis de ambiente automaticamente:
Linux / macOS
Execute env-init
através da substituição de comandos:
$(gcloud beta emulators datastore env-init)
Windows
Crie e execute um ficheiro de comandos usando o resultado de env-init
:
gcloud beta emulators datastore env-init > set_vars.cmd && set_vars.cmd
A sua aplicação vai agora estabelecer ligação ao emulador do Datastore.
Definir manualmente as variáveis
Se a sua aplicação e o emulador forem executados em máquinas diferentes, defina as variáveis de ambiente manualmente:
Execute o comando
env-init
:gcloud beta emulators datastore env-init
Na máquina que executa a sua aplicação, defina as variáveis de ambiente e os valores conforme indicado pela saída do comando
env-init
. Por exemplo: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
A sua aplicação vai agora estabelecer ligação ao emulador do Datastore. Tenha em atenção que o ID do projeto e a porta fornecidos pelo comando vão diferir do exemplo acima.
Atualizar e eliminar índices
Ao executar a sua aplicação através do emulador, pode gerar índices para a base de dados do modo Datastore de produção, bem como eliminar índices desnecessários. Saiba mais em Usar a CLI gcloud.
Remover variáveis de ambiente
Depois de terminar de usar o emulador, pare-o (Control-C) e remova as variáveis de ambiente para que a sua aplicação se ligue à base de dados do modo Datastore de produção.
Remover automaticamente as variáveis
Se a sua aplicação e o emulador forem executados na mesma máquina, pode remover as variáveis de ambiente automaticamente:
Linux / macOS
Execute env-unset
através da substituição de comandos:
$(gcloud beta emulators datastore env-unset)
Windows
Crie e execute um ficheiro de comandos usando o resultado de env-unset
:
gcloud beta emulators datastore env-unset > remove_vars.cmd && remove_vars.cmd
A sua aplicação vai agora estabelecer ligação à base de dados do modo Datastore de produção.
Remover manualmente as variáveis
Se a sua aplicação e o emulador forem executados em máquinas diferentes, remova as variáveis de ambiente manualmente:
Execute o comando
env-unset
:gcloud beta emulators datastore env-unset
Na máquina que executa a sua aplicação, remova as variáveis de ambiente conforme indicado no resultado do comando
env-unset
. Por exemplo: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=
A sua aplicação vai agora estabelecer ligação à base de dados do modo Datastore de produção.