Escolher um banco de dados: Cloud Firestore ou Realtime Database

O Firebase fornece duas soluções de banco de dados baseadas em nuvem e acessíveis ao cliente que oferecem suporte à sincronização de dados em tempo real:

  • O Cloud Firestore é o mais novo banco de dados do Firebase para o desenvolvimento de apps para dispositivos móveis. Ele se baseia nos resultados do Realtime Database com um novo modelo de dados mais intuitivo. O Cloud Firestore também tem consultas mais avançadas e rápidas, além de melhor escalonamento que o Realtime Database.

  • O Realtime Database é o banco de dados original do Firebase. Ele é uma solução eficiente e de baixa latência para aplicativos móveis que exigem estados sincronizados entre clientes em tempo real.

Qual banco de dados o Firebase recomenda?

Sua escolha de solução de banco de dados dependerá de muitos fatores, mas, quando se trata de determinados recursos, podemos fazer recomendações sobre qual banco de dados é ideal para você.

Ambas as soluções oferecem:

  • SDKs com prioridade para o cliente, sem servidores para implantar e manter
  • Atualizações em tempo real
  • Nível gratuito e pagamento de acordo com o uso

Principais considerações

Além de ótimos recursos principais comuns aos dois bancos de dados, pense em como uma ou todas as considerações listadas abaixo afetarão o sucesso dos seus aplicativos.

Papel do banco de dados
Meu aplicativo usa um banco de dados…
Principalmente para sincronizar dados com consultas básicas.
Se consultas, classificações e transações avançadas não forem necessárias, recomendamos o Realtime Database.
Fazer consultas, classificações e transações avançadas.
Se interações complexas com seus dados forem necessárias, por exemplo, em apps de e-commerce, recomendamos o Cloud Firestore.
Operações em dados
O uso do banco de dados do meu app usa…
Alguns GB ou menos de dados que são alterados com frequência.
Se o app enviar um stream de pequenas atualizações, como em um app de lousa interativa digital, recomendamos o Realtime Database.
Centenas de GB ou TBs de dados lidos com muito mais frequência do que são alterados.
Para conjuntos de dados muito grandes e quando as operações em lote são necessárias com frequência, recomendamos o Cloud Firestore.
Modelo de dados
Prefiro estruturar meus dados como…
Uma árvore JSON simples.
Para dados não estruturados JSON, recomendamos o Realtime Database.
Documentos organizados em coleções.
Para documentos e coleções estruturados, recomendamos o Cloud Firestore.
Disponibilidade
Minhas necessidades de disponibilidade são…
Garantia de tempo de atividade extremamente alta de 99,999%.
Se a disponibilidade for da maior importância, por exemplo, em aplicativos de comércio eletrônico, recomendamos o Cloud Firestore.
Uma garantia de pelo menos 99,95% de tempo de atividade.
Quando uma disponibilidade muito alta, mas não importante, é aceitável, recomendamos o Cloud Firestore ou o Realtime Database.
Consultas off-line em dados locais
Meu app precisará realizar consultas em dispositivos com conectividade limitada ou sem conexão…
Frequentemente.
Para recursos de consulta sofisticados em dados locais quando o usuário está off-line, recomendamos o Cloud Firestore.
Raramente ou nunca.
Se os usuários precisam ficar sempre on-line, recomendamos o Cloud Firestore ou o Realtime Database.
Número de instâncias do banco de dados
Nos meus projetos individuais, preciso usar…
Muitos bancos de dados, por exemplo, um banco de dados para cada cliente principal.
Como ele permite adicionar vários bancos de dados a um único projeto do Firebase, recomendamos o Realtime Database.
Apenas um banco de dados.
Se você precisar de apenas um banco de dados, recomendamos o Cloud Firestore ou o Realtime Database.

Quais são os outros pontos importantes a considerar?

Depois de pensar nas principais considerações anteriores, talvez seja o momento de escolher um banco de dados. Se você ainda estiver avaliando os prós e contras, esta seção aborda outras diferenças entre o Cloud Firestore e o Realtime Database.

Modelo de dados

Tanto o Realtime Database como o Cloud Firestore são bancos de dados NoSQL.

Realtime Database Cloud Firestore
Armazena dados como uma grande árvore JSON.
  • Dados simples são muito fáceis de armazenar.
  • Dados complexos e hierárquicos são mais difíceis de organizar em escala.

Saiba mais sobre o modelo de dados do Realtime Database.

Armazena dados como coleções de documentos.
  • Dados simples são fáceis de armazenar em documentos, que são muito semelhantes aos da árvore JSON.
  • Dados complexos e hierárquicos são mais fáceis de organizar em escala, utilizando subcoleções dentro dos documentos.
  • Requer menos desnormalização e desdobramento de dados.

Saiba mais sobre o modelo de dados do Cloud Firestore.

Suporte em tempo real e off-line

Ambos possuem SDKs em tempo real com prioridade para dispositivos móveis e oferecem suporte ao armazenamento de dados locais para aplicativos off-line.

Realtime Database Cloud Firestore
Suporte off-line para clientes da Apple e do Android. Suporte off-line para clientes da Apple, do Android e da Web.

Presença

Pode ser útil saber quando um cliente está on-line ou off-line. O Firebase Realtime Database pode registrar o status da conexão do cliente e fornecer atualizações sempre que esse estado for alterado.

Realtime Database Cloud Firestore
Presença compatível. Sem suporte nativo. É possível aproveitar a compatibilidade do Realtime Database com a presença sincronizando o Cloud Firestore e o Realtime Database usando o Cloud Functions. Consulte Criar presença no Cloud Firestore.

Consulta

Recupere, classifique e filtre dados de qualquer um dos bancos de dados por meio de consultas.

Realtime Database Cloud Firestore
Consultas avançadas com funcionalidade limitada de classificação e filtragem.
  • As consultas podem classificar ou filtrar uma propriedade. Não é possível realizar os dois processos.
  • As consultas são profundas por padrão: elas sempre retornam toda a subárvore.
  • As consultas podem acessar dados em qualquer granularidade, incluindo valores de nó de folha individuais na árvore JSON.
  • As consultas não exigem um índice. No entanto, o desempenho de alguma delas é reduzido à medida que seu conjunto de dados aumenta.
Consultas indexadas com classificação e filtragem compostas.
  • Você pode encadear filtros e combinar filtragem e classificação em uma propriedade em uma única consulta.
  • As consultas são superficiais: só retornam documentos em um grupo de coleta ou coleção específico e não retornam dados de subcoleção.
  • As consultas precisam retornar documentos inteiros sempre.
  • As consultas são indexadas por padrão: o desempenho da consulta é proporcional ao tamanho do seu conjunto de resultados, e não ao seu conjunto de dados.

Gravações e transações

Realtime Database Cloud Firestore
Operações básicas de gravação e transação. Operações avançadas de gravação e transação.
  • Grave operações de dados usando operações set e update, além de transformações avançadas, como operadores matriciais e numéricos.
  • As transações leem e gravam dados de qualquer parte do banco de dados de maneira atômica.

Confiabilidade e desempenho

Realtime Database Cloud Firestore
O Realtime Database é uma solução regional.
  • Disponível em configurações regionais. Os bancos de dados estão limitados à disponibilidade zonal em uma região.
  • Como a latência é extremamente baixa, é a opção ideal para sincronizações de estado frequentes.
Saiba mais sobre o desempenho do Realtime Database e as características de confiabilidade no Contrato de nível de serviço.
O Cloud Firestore é uma solução regional e multirregional com escalonamento automático.
  • Armazena seus dados em vários data centers em regiões distintas, garantindo escalonabilidade global e forte confiabilidade.
  • Compatível com configurações regionais ou multirregionais no mundo todo.
Saiba mais sobre as características de desempenho e confiabilidade do Cloud Firestore no Contrato de nível de serviço.

Escalonabilidade

Realtime Database Cloud Firestore
O escalonamento requer fragmentação.
  • Escalonamento para cerca de 200.000 conexões simultâneas e 1.000 gravações/segundo em um único banco de dados. Realizar um escalonamento acima desse número requer a fragmentação de dados em vários bancos de dados.
  • Não há limites locais de taxas de gravação para dados individuais.
O escalonamento é automático.
  • O escalonamento é feito de maneira automática. Atualmente, os limites de escalonamento estão em torno de 1 milhão de conexões simultâneas e 10.000 gravações/segundo. Planejamos aumentar esses limites no futuro.
  • As taxas de gravação são limitadas para documentos ou índices individuais.

Segurança

Realtime Database Cloud Firestore
Linguagem de regras aplicadas em cascata que separa autorização e validação. Regras que não são aplicadas em cascata e que combinam autorização e validação.
  • As leituras e gravações a partir de SDKs para dispositivos móveis são protegidas pelas regras de segurança do Cloud Firestore.
  • As leituras e gravações nos SDKs de servidor são protegidas pelo Identity and Access Management (IAM).
  • As regras não são aplicadas em cascata, a menos que você use um caractere curinga.
  • As regras podem restringir consultas: se os resultados de uma consulta tiverem dados aos quais o usuário não tenha acesso, toda a consulta falhará.

Preços

Ambas as soluções estão disponíveis nos planos de preços Spark e Blaze.

Realtime Database Cloud Firestore
Apenas largura de banda e armazenamento são cobrados, porém a uma taxa maior.

Leia mais sobre os planos de preços do Realtime Database.

A cobrança é realizada principalmente por operações realizadas no seu banco de dados (leitura, gravação, exclusão) e, a uma taxa menor, por largura de banda e armazenamento.

O Cloud Firestore oferece suporte a limites de gastos diários para os projetos do App Engine. Assim, você não ultrapassa os gastos que programou.

Saiba mais sobre os planos de preços do Cloud Firestore.

Como usar o Cloud Firestore e o Realtime Database

Você pode usar ambos os bancos de dados no mesmo app ou projeto do Firebase. Ambos os bancos de dados NoSQL podem armazenar os mesmos tipos de dados, e as bibliotecas de cliente funcionam de maneira semelhante. Considere as diferenças descritas acima se você decidir usar ambos os bancos de dados no seu app.

Saiba mais sobre os recursos disponíveis no Realtime Database e no Cloud Firestore.

Tudo pronto para escolher um banco de dados?

Esperamos que essa comparação tenha ajudado na escolha de uma solução de banco de dados do Firebase. Agora você pode aprender a adicionar um banco de dados aos seus projetos do Firebase.