Como escolher entre o modo nativo e o modo Datastore

Ao criar um novo banco de dados do Firestore, é possível configurar a instância do banco de dados para ser executada no modo Datastore, o que torna o banco de dados compatível com versões anteriores do Datastore. Esta página ajuda você a entender a diferença entre o seguintes modos de banco de dados do Firestore: modo Nativo e modo Datastore.

Firestore no modo nativo

O Firestore é a próxima grande versão do Datastore, além de ser a reformulação do branding do produto. Unindo o melhor do Datastore e do Firebase Realtime Database, o Firestore consiste em um banco de dados de documentos NoSQL criado para oferecer escalonamento automático, alto desempenho e facilidade no desenvolvimento de aplicativos.

O Firestore apresenta os seguintes recursos:

  • uma camada de armazenamento de consistência forte;
  • um modelo de dados de coleta e documento;
  • atualizações em tempo real;
  • bibliotecas de cliente móveis e da Web.

O Firestore é compatível com versões anteriores do Datastore, mas o novo modelo de dados, as atualizações em tempo real e os recursos das bibliotecas de cliente da Web e de dispositivos móveis não são. Para acessar todos os recursos do Firestore, você precisa usar Firestore no modo nativo.

Firestore no modo Datastore

O Firestore no modo Datastore mantém o comportamento do sistema do Datastore, mas tem acesso à camada de armazenamento do Firestore e remove as seguintes limitações do Datastore:

  • Todas as consultas do Datastore agora são altamente consistentes, a menos que você solicite explicitamente a consistência posterior.
  • As consultas em transações não precisam mais ser consultas de ancestral.
  • As transações não estão mais limitadas a 25 grupos de entidades.
  • As gravações em um grupo de entidades não estão mais limitadas a uma por segundo.

O modo Datastore desativa os recursos do Firestore que não são compatíveis com o Datastore:

  • O projeto aceitará solicitações da API Datastore e negará as solicitações da API Firestore.
  • O projeto usará índices do Datastore em vez de índices do Firestore.
  • É possível usar as bibliotecas de cliente do Datastore com este projeto, mas não as do Firestore.
  • Os recursos em tempo real do Firestore não estarão disponíveis.
  • No console do Google Cloud, o banco de dados vai usar o visualizador do Datastore.

Atualização automática para o modo Datastore

Os bancos de dados atuais do Datastore serão automaticamente atualizados para o Firestore no modo Datastore. Novos projetos que exigem um banco de dados do Datastore precisam usar o Firestore no modo Datastore.

Preços e locais

Os bancos de dados do modo nativo e do modo Datastore usam a mesma estrutura de preços e estão disponíveis nos mesmos locais. Os preços e os locais estão descritos em detalhes nestas páginas:

Firestore no modo nativo

Firestore no modo Datastore

Escolher um modo de banco de dados

Ao criar um novo banco de dados do Firestore, selecione um modo de banco de dados. É possível ter bancos de dados do modo Datastore e do modo nativo no mesmo projeto, mas cada banco de dados será de um único tipo. Recomendamos o seguinte ao escolher um modo de banco de dados:

  • Use o Firestore no modo Datastore para novos projetos de servidor.

    O Firestore no modo Datastore permite o uso de arquiteturas de servidores do Datastore estabelecidas enquanto remove as limitações básicas do Datastore. O modo Datastore pode ser escalonado automaticamente para milhões de gravações por segundo.

  • Use o Firestore no modo nativo para novos aplicativos da Web e de dispositivos móveis.

    O Firestore oferece bibliotecas de clientes para dispositivos móveis e Web com recursos off-line e em tempo real. O modo nativo pode ser escalonado automaticamente para milhões de clientes simultâneos.

Comparação do recurso

A tabela a seguir compara o comportamento do sistema nos dois modos de banco de dados:

Firestore no
Modo nativo
Firestore no
Modo Datastore
Modelo de dados Banco de dados de documentos organizado em documentos e coleções. Entidades organizadas em tipos e grupos de entidades.
Camada de Armazenamento uma camada de armazenamento de consistência forte. uma camada de armazenamento de consistência forte.
Consultas e transações
  • Consultas de consistência forte em todo o banco de dados
  • Remove as limitações anteriores de consistência do Datastore.
  • Consultas de consistência forte em todo o banco de dados
  • As transações têm acesso a qualquer número de grupos de entidades
Suporte para API Datastore v1 Não, as solicitações são negadas Sim
Suporte para API Firestore v1 Sim Não, as solicitações são negadas
Atualizações em tempo real

Compatível com a capacidade de detectar um documento ou um conjunto de documentos para atualizações em tempo real.

Ao ouvir um documento ou conjunto de documentos, seus clientes são notificados sobre quaisquer alterações de dados e recebem o conjunto de dados mais recente.

Incompatível
Permanência de dados off-line As bibliotecas móveis e de cliente da Web são compatíveis com a permanência de dados offline. Incompatível
Bibliotecas cliente Bibliotecas de cliente do Firestore:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS+
  • Web
  • C++
  • Unity
Bibliotecas de cliente do Datastore:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • C++
Segurança
  • O Identity and Access Management (IAM) gerencia o acesso ao banco de dados
  • As regras de segurança do Firestore são compatíveis com autenticação e autorização sem servidor para as bibliotecas de cliente da Web e de dispositivos móveis.
O IAM gerencia o acesso ao banco de dados
Desempenho Escalona automaticamente para milhões de clientes simultâneos. Escalona automaticamente para milhões de gravações por segundo.
SLA Firestore SLA Firestore SLA
Locais

Os dois modos oferecem suporte aos mesmos locais. Para conferir uma lista detalhada de locais, consulte as seguintes páginas:

Preços

Os dois modos usam a mesma estrutura de preços para operações de entidade e de documento.

O Firestore no modo Datastore não cobra por operações pequenas.

Os dois modos usam a mesma estrutura de preços para dados armazenados e largura de banda da rede.

Para mais detalhes sobre preços, consulte as seguintes páginas:

Console Leitor do Firestore no Console do Firebase e no console do Google Cloud Leitor do Datastore no console do Google Cloud
Namespaces Incompatível Namespaces compatíveis
Integração com a biblioteca de cliente do App Engine

Incompatível com os ambientes de execução padrão do App Engine em Python 2.7 e PHP 5.5

Compatível com o ambiente padrão do App Engine e com todos os outros ambientes de execução

Compatível com o ambiente flexível do App Engine e com todos os ambientes de execução

Compatível em qualquer tempo de execução

criar um banco de dados;

É possível criar um novo banco de dados do Firestore no modo nativo ou Datastore. Essa escolha não depende dos modos de nenhum banco de dados existente em seu projeto.

Consulte Criar e gerenciar bancos de dados para mais informações.

Alternar entre o modo nativo e o modo Datastore

Se o banco de dados estiver vazio, será possível alternar entre o modo nativo e o modo Datastore.

Mude o banco de dados para o Modo nativo:

gcloud

Use o comando gcloud firestore database update a fim de alterar seu banco de dados para o modo Nativo.

gcloud firestore databases update --type=firestore-native --database='DATABASE_ID'

Substitua DATABASE_ID pelo ID do seu banco de dados.

rest

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"FIRESTORE_NATIVE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

Substitua:

  • PROJECT_ID: o ID do projeto;
  • DATABASE_ID: o ID do banco de dados

Mude o banco de dados para o modo Datastore:

gcloud

Use o comando gcloud firestore databases update para mudar o banco de dados para o modo Datastore.

 gcloud firestore databases update --type=datastore-mode --database='DATABASE_ID'

Substitua DATABASE_ID pelo ID do seu banco de dados.

rest

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"DATASTORE_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

Substitua:

  • PROJECT_ID: o ID do projeto;
  • DATABASE_ID: o ID do banco de dados