Escolher entre o modo nativo e o modo Datastore

Quando cria uma base de dados do Firestore, tem de escolher entre dois modos: modo nativo ou modo Datastore. Esta página explica a diferença entre os dois modos.

Escolha um modo de base de dados

Quando cria uma nova base de dados do Firestore, tem de selecionar um modo de base de dados. Pode ter bases de dados no modo nativo e no modo Datastore no mesmo projeto, mas cada base de dados é de um único tipo.

Recomendamos o seguinte quando escolher um modo de base de dados:

  • Use o Firestore no modo nativo para todas as novas aplicações (servidor, dispositivos móveis e Web).

    O Firestore no modo nativo usa um modelo de dados baseado em documentos que está alinhado com as normas da indústria. Além de uma base de dados fortemente consistente e escalável, o Firestore no modo nativo oferece sincronização de dados em tempo real e funcionalidades de back-end como serviço.

  • Use o Firestore no modo Datastore se a sua app depender da API Datastore.

    O modo Datastore é totalmente suportado e recomendado para aplicações com uma dependência da API Datastore. O modo nativo e o modo Datastore partilham uma camada de armazenamento subjacente com a mesma disponibilidade, consistência e capacidades de escalabilidade.

Firestore no modo nativo

O Firestore é a próxima versão principal do Datastore e uma reformulação da marca do produto. Tirando o melhor do Datastore e da Firebase Realtime Database, o Firestore é uma base de dados de documentos NoSQL criada para escala automática, elevado desempenho e facilidade de programação de aplicações.

O Firestore introduz as seguintes funcionalidades:

  • Uma camada de armazenamento fortemente consistente
  • Um modelo de dados de coleções e documentos
  • Atualizações em tempo real
  • Bibliotecas de cliente para dispositivos móveis e Web

O Firestore é retrocompatível com o Datastore, mas o novo modelo de dados, as atualizações em tempo real e as funcionalidades da biblioteca de cliente Web e para dispositivos móveis não o são. Para aceder a todas as funcionalidades do Firestore, tem de usar o Firestore no modo nativo.

Firestore no modo Datastore

O Firestore no modo Datastore usa o comportamento do sistema Datastore, mas acede à camada de armazenamento do Firestore, removendo as seguintes limitações do Datastore:

  • Todas as consultas do Datastore são agora fortemente consistentes, a menos que peça explicitamente a consistência eventual.
  • As consultas em transações já não têm de ser consultas antecessoras.
  • As transações já não estão limitadas a 25 grupos de entidades.
  • As gravações num grupo de entidades já não estão limitadas a 1 por segundo.

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

  • O projeto aceita pedidos da API Datastore e rejeita pedidos da API Firestore.
  • O projeto vai usar índices do Datastore em vez de índices do Firestore.
  • Pode usar bibliotecas cliente do Datastore com este projeto, mas não bibliotecas cliente do Firestore.
  • As capacidades em tempo real do Firestore não estarão disponíveis.
  • Na Google Cloud consola, a base de dados usa o visualizador do Datastore.

Preços e localizações

As bases de dados do modo nativo e do modo Datastore usam a mesma estrutura de preços e estão disponíveis nas mesmas localizações. Os preços e as localizações estão descritos em detalhe nas seguintes páginas:

Firestore no modo nativo

Firestore no modo Datastore

Comparação de funcionalidades

A tabela seguinte compara o comportamento do sistema dos modos de base de dados:

Firestore no
modo nativo
Firestore no
modo Datastore
Modelo de dados Base de dados de documentos organizada em documentos e coleções. Entidades organizadas em tipos e grupos de entidades.
Camada de armazenamento Uma camada de armazenamento fortemente consistente. Uma camada de armazenamento fortemente consistente.
Consultas e transações
  • Consultas fortemente consistentes em toda a base de dados
  • Remove as limitações de consistência anteriores do Datastore
  • Consultas fortemente consistentes em toda a base de dados
  • As transações podem aceder a qualquer número de grupos de entidades
Suporte da API Datastore v1 Não, os pedidos são recusados Sim
Suporte da API Firestore v1 Sim Não, os pedidos são recusados
Atualizações em tempo real

Suporta a capacidade de ouvir um documento ou um conjunto de documentos para atualizações em tempo real.

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

Não suportado
Persistência de dados offline As bibliotecas cliente para dispositivos móveis e Web suportam a persistência de dados offline. Não suportado
Bibliotecas cliente Bibliotecas cliente do Firestore:
  • Java
  • Python
  • PHP
  • Ir
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS+
  • Web
  • C++
  • Unity
Bibliotecas cliente do Datastore:
  • Java
  • Python
  • PHP
  • Ir
  • Ruby
  • C#
  • Node.js
  • C++
Segurança
  • A gestão de identidade e de acesso (IAM) gere o acesso à base de dados
  • As regras de segurança do Firestore suportam a autenticação e a autorização sem servidor para as bibliotecas de cliente Web e para dispositivos móveis
A IAM gere o acesso à base de dados
Desempenho É dimensionado automaticamente para milhões de clientes simultâneos. Escala automaticamente para milhões de gravações por segundo.
SLA SLA do Firestore SLA do Firestore
Localizações

Ambos os modos suportam as mesmas localizações. Para ver uma lista detalhada das localizações, consulte as seguintes páginas:

Preços

Ambos os modos usam a mesma estrutura de preços para operações de entidades e documentos.

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

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

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

Consola Consola do Firebase e Google Cloud visualizador do Firestore da consola Google Cloud Visualizador do Datastore da consola
Espaços de nomes Não suportado Espaços de nomes suportados
Integração da biblioteca cliente do App Engine

Não suportado nos tempos de execução do Python 2.7 e PHP 5.5 do ambiente padrão do App Engine

Suportado no ambiente padrão do App Engine, todos os outros tempos de execução

Suportado no ambiente flexível do App Engine, todos os tempos de execução

Suportado em todos os tempos de execução

Crie uma nova base de dados

Pode criar uma nova base de dados do Firestore no modo nativo ou no modo Datastore. Esta escolha não depende dos modos de nenhuma base de dados existente no seu projeto.

Consulte o artigo Crie e faça a gestão de bases de dados para mais informações.

Alterne entre o modo nativo e o modo Datastore

Se a sua base de dados estiver vazia, pode alternar entre o modo nativo e o modo Datastore.

Altere a base de dados para o modo nativo:

gcloud

Use o comando gcloud firestore databases update para alterar a sua base de dados para o modo nativo.

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

Substitua DATABASE_ID pelo ID da sua base de dados.

descanso

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 o seguinte:

  • PROJECT_ID: o ID do projeto
  • DATABASE_ID: o ID da base de dados

Altere a base de dados para o modo Datastore:

gcloud

Use o comando gcloud firestore databases update para alterar a sua base de dados para o modo Datastore.

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

Substitua DATABASE_ID pelo ID da sua base de dados.

descanso

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 o seguinte:

  • PROJECT_ID: o ID do projeto
  • DATABASE_ID: o ID da base de dados