Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Escalar com vários bancos de dados

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

A melhor maneira de otimizar o desempenho e dimensionar seus dados no Firebase Realtime Database é dividi-los em várias instâncias do Realtime Database, também conhecido como fragmentação do banco de dados. A fragmentação oferece flexibilidade para escalar além dos limites que se aplicam a instâncias de banco de dados individuais, além de balanceamento de carga e otimização de desempenho.

Quando fragmentar seus dados

Talvez você queira fragmentar seus dados em vários bancos de dados se estiver usando o Realtime Database e se encaixar em qualquer um dos seguintes cenários:

  • Você deseja dimensionar além do limite de 200.000 conexões simultâneas, 1.000 operações de gravação/segundo ou qualquer um dos outros limites para uma única instância de banco de dados.
  • Você tem vários conjuntos de dados discretos e deseja otimizar o desempenho (por exemplo, um aplicativo de bate-papo que atende a grupos de usuários separados e independentes).
  • Você deseja equilibrar a carga em vários bancos de dados para melhorar o tempo de atividade e reduzir o risco de sobrecarregar uma única instância de banco de dados.

Como fragmentar seus dados

Para fragmentar seus dados, siga estas etapas (descritas com mais detalhes abaixo):

  1. Mapeie seus dados para vários bancos de dados de acordo com as necessidades específicas do seu aplicativo.
  2. Crie várias instâncias de banco de dados.
  3. Configure seu aplicativo para que ele se conecte à instância do Realtime Database necessária para cada conjunto de dados.

Mapeie seus dados

Ao mapear seus dados para vários bancos de dados, tente atender às seguintes condições:

  • Cada consulta é executada apenas em uma única instância de banco de dados. O Realtime Database não oferece suporte a consultas em instâncias de banco de dados.
  • Nenhum compartilhamento ou duplicação de dados em instâncias de banco de dados (ou compartilhamento ou duplicação mínimos).
  • Cada instância do aplicativo se conecta apenas a um banco de dados em um determinado momento.

Ao mapear seus dados, considere aplicar as seguintes estratégias:

Crie um "estilhaço mestre"

Armazene um mapa de como seus dados são armazenados nas instâncias do banco de dados. Dessa forma, você pode pesquisar programaticamente qual instância do banco de dados corresponde ao cliente conectado. Lembre-se de que isso pode ter mais sobrecarga do que conectar-se diretamente à instância de banco de dados específica de que você precisa, quando precisar.

Dados de balde por categorias ou por cliente

Armazene dados em instâncias de banco de dados em silos, agrupadas por usuário ou tipo de dados. Por exemplo, se você criar um aplicativo de bate-papo que atenda a várias organizações, poderá criar uma instância de banco de dados para cada organização e armazenar todos os dados de bate-papo em instâncias de banco de dados exclusivas.

Nesse caso, a organização A e a organização B não compartilham dados, não há dados duplicados em seus bancos de dados e você executa apenas consultas em uma única instância de banco de dados. Além disso, os usuários em cada organização só se conectam ao banco de dados de sua organização quando usam o aplicativo de bate-papo.

Você pode criar várias instâncias de banco de dados com antecedência e usar o ID da organização para mapear uma equipe para sua instância de banco de dados. Por exemplo, a organização A é mapeada para o Realtime Database A.

A maneira como você mapeia os dados para seu aplicativo depende de seu caso de uso específico, mas as condições e estratégias descritas acima podem ajudá-lo a definir o que funciona para seus dados.

Crie várias instâncias do Realtime Database

Se você estiver no plano de preços Blaze , poderá criar várias instâncias de banco de dados no mesmo projeto do Firebase.

crie um banco de dados no console do Firebase com o menu de contexto na seção de bancos de dados

  1. No console do Firebase, vá para a guia Dados na seção Desenvolver > Banco de dados.
  2. Selecione Criar novo banco de dados no menu da seção Realtime Database .
  3. Personalize a referência do banco de dados e as regras de segurança e clique em Entendi .

Repita o processo para criar quantas instâncias de banco de dados forem necessárias. Cada instância de banco de dados tem seu próprio conjunto de regras do Firebase Realtime Database, para que você possa ajustar o acesso aos seus dados.

Você pode criar e gerenciar instâncias de banco de dados no Firebase console ou usando a API REST do Realtime Database Management .

Edite e implante regras do Realtime Database para cada instância

Certifique-se de que as regras do banco de dados em tempo real permitem acesso apropriado a cada instância de banco de dados em seu projeto. Cada banco de dados tem seu próprio conjunto de regras, que você pode editar e implantar no Firebase console ou usar a Firebase CLI para implantar destinos .

  • Para editar e implantar regras no Firebase console, siga estas etapas:

    1. Vá para a guia Regras na seção Desenvolver > Banco de dados .
    2. Selecione o banco de dados que deseja editar e modifique as regras.
  • Para editar e implantar regras da Firebase CLI, siga estas etapas:

    1. Modifique as regras nos arquivos de regras para suas instâncias de banco de dados (por exemplo, foo.rules.json ).
    2. Crie e aplique destinos de implementação para associar bancos de dados que usam o mesmo arquivo de regras. Por exemplo:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Atualize seu arquivo de configuração firebase.json com os destinos de implantação:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Execute o comando de implantação:

      firebase deploy

Certifique-se de editar e implantar regras consistentemente no mesmo local. A implantação de regras da Firebase CLI substitui todas as edições feitas no Firebase console, e a edição de regras diretamente no Firebase console substitui todas as alterações recentes que você implantou por meio da Firebase CLI.

Conecte seu aplicativo a várias instâncias de banco de dados

Use a referência de banco de dados para acessar dados armazenados em instâncias de banco de dados secundárias. Você pode obter a referência para uma instância de banco de dados específica por URL ou aplicativo. Se você não especificar uma URL, obterá a referência para a instância de banco de dados padrão do aplicativo.

Web version 9

import { initializeApp } from "firebase/app";
import { getDatabase } from "firebase/database";

const app1 = initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
const database1 = getDatabase(app1);

// Get a database instance for app2
const database2 = getDatabase(app2);

Web version 8

const app1 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-1.firebaseio.com"
});

const app2 = firebase.initializeApp({
  databaseURL: "https://testapp-1234-2.firebaseio.com"
}, 'app2');

// Get the default database instance for an app1
var database1 = firebase.database();

// Get a database instance for app2
var database2 = firebase.database(app2);
Rápido
Observação: este produto Firebase não está disponível no destino App Clip.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Obtém uma instância de banco de dados secundária por URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
Observação: este produto Firebase não está disponível no destino App Clip.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Obtém uma instância de banco de dados secundário por URL @property (forte, não atômico) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] referência];

Kotlin+KTX

// Get the default database instance for an app
val primary = Firebase.database.reference

// Get a secondary database instance by URL
val secondary = Firebase.database("https://testapp-1234.firebaseio.com").reference

Java

// Get the default database instance for an app
DatabaseReference primary = FirebaseDatabase.getInstance()
        .getReference();

// Get a secondary database instance by URL
DatabaseReference secondary = FirebaseDatabase.getInstance("https://testapp-1234.firebaseio.com")
        .getReference();

Especifique uma instância ao usar o Firebase CLI

Use a opção --instance para especificar em qual Firebase Realtime Database você deseja aplicar um comando Firebase CLI. Por exemplo, use o seguinte comando para executar o criador de perfil para uma instância de banco de dados chamada my-example-shard.firebaseio.com :

firebase database:profile --instance "my-example-shard"

Otimize as conexões em cada banco de dados

Se cada cliente precisar se conectar a vários bancos de dados durante uma sessão, você poderá reduzir o número de conexões simultâneas para cada instância do banco de dados conectando-se a cada instância do banco de dados apenas pelo tempo necessário.

Obtenha mais conselhos

Se precisar de mais ajuda para fragmentar seus dados em várias instâncias de banco de dados, entre em contato com os especialistas do Firebase em nosso canal Slack ou no Stack Overflow .