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

Escale con múltiples bases de datos

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La mejor manera de optimizar el rendimiento y escalar sus datos en Firebase Realtime Database es dividir sus datos en varias instancias de Realtime Database, también conocido como fragmentación de base de datos. La fragmentación le brinda la flexibilidad de escalar más allá de los límites que se aplican a las instancias de bases de datos individuales, además del equilibrio de carga y la optimización del rendimiento.

Cuándo fragmentar sus datos

Es posible que desee fragmentar sus datos en varias bases de datos si está utilizando Realtime Database y encaja en cualquiera de los siguientes escenarios:

  • Desea escalar más allá del límite de 200 000 conexiones simultáneas, 1000 operaciones de escritura por segundo o cualquiera de los otros límites para una sola instancia de base de datos.
  • Tiene varios conjuntos de datos discretos y desea optimizar el rendimiento (por ejemplo, una aplicación de chat que sirve a grupos de usuarios separados e independientes).
  • Desea equilibrar la carga entre varias bases de datos para mejorar el tiempo de actividad y reducir el riesgo de sobrecargar una sola instancia de base de datos.

Cómo fragmentar sus datos

Para fragmentar sus datos, siga estos pasos (descritos con mayor detalle a continuación):

  1. Asigne sus datos a múltiples bases de datos de acuerdo con las necesidades específicas de su aplicación.
  2. Cree varias instancias de base de datos.
  3. Configure su aplicación para que se conecte a la instancia de Realtime Database necesaria para cada conjunto de datos.

Mapea tus datos

Cuando esté asignando sus datos a varias bases de datos, intente satisfacer las siguientes condiciones:

  • Cada consulta solo se ejecuta en una única instancia de base de datos. Realtime Database no admite consultas entre instancias de bases de datos.
  • No compartir ni duplicar datos entre instancias de bases de datos (o compartir o duplicar al mínimo).
  • Cada instancia de la aplicación solo se conecta a una base de datos en un momento dado.

Mientras mapea sus datos, considere aplicar las siguientes estrategias:

Crear un "fragmento maestro"

Almacene un mapa de cómo se almacenan sus datos en las instancias de la base de datos. De esta manera, puede buscar mediante programación qué instancia de base de datos corresponde al cliente que se conecta. Tenga en cuenta que esto podría tener más gastos generales que conectarse directamente a la instancia de base de datos en particular que necesita, cuando la necesita.

Datos del cubo por categorías o por cliente

Almacene datos en instancias de bases de datos en silos, agrupados por usuario o tipo de datos. Por ejemplo, si crea una aplicación de chat que sirve a varias organizaciones, puede crear una instancia de base de datos para cada organización y almacenar todos los datos de chat en instancias de base de datos únicas.

En este caso, la organización A y la organización B no comparten datos, no hay datos duplicados en sus bases de datos y solo realiza consultas en una única instancia de base de datos. Además, los usuarios de cada organización solo se conectan a la base de datos de su organización cuando usan la aplicación de chat.

Luego puede crear varias instancias de base de datos por adelantado y usar la ID de la organización para asignar un equipo a su instancia de base de datos. Por ejemplo, la organización A se asigna a Realtime Database A.

La forma en que asigna datos para su aplicación depende de su caso de uso particular, pero las condiciones y estrategias descritas anteriormente pueden ayudarlo a definir qué funciona para sus datos.

Cree múltiples instancias de Realtime Database

Si tiene el plan de precios de Blaze , puede crear varias instancias de bases de datos en el mismo proyecto de Firebase.

crear una base de datos en Firebase console con el menú contextual en la sección de bases de datos

  1. En Firebase console, vaya a la pestaña Datos en la sección Desarrollar > Base de datos.
  2. Seleccione Crear nueva base de datos en el menú de la sección Base de datos en tiempo real .
  3. Personalice la referencia de su base de datos y las reglas de seguridad , luego haga clic en Entendido .

Repita el proceso para crear tantas instancias de base de datos como necesite. Cada instancia de base de datos tiene su propio conjunto de reglas de base de datos en tiempo real de Firebase, por lo que puede ajustar el acceso a sus datos.

Puede crear y administrar instancias de bases de datos en Firebase console o mediante la API REST de administración de bases de datos en tiempo real .

Edite e implemente reglas de base de datos en tiempo real para cada instancia

Asegúrese de que sus reglas de base de datos en tiempo real permitan el acceso apropiado a cada instancia de base de datos en su proyecto. Cada base de datos tiene su propio conjunto de reglas, que puede editar e implementar desde la consola de Firebase o mediante la CLI de Firebase para implementar objetivos .

  • Para editar e implementar reglas desde Firebase console, sigue estos pasos:

    1. Vaya a la pestaña Reglas en la sección Desarrollar > Base de datos.
    2. Seleccione la base de datos que desea editar y luego modifique las reglas.
  • Para editar e implementar reglas desde Firebase CLI, siga estos pasos:

    1. Modifique las reglas en los archivos de reglas para las instancias de su base de datos (por ejemplo, foo.rules.json ).
    2. Cree y aplique destinos de implementación para asociar bases de datos que usen el mismo archivo de reglas. Por ejemplo:
      firebase target:apply database main my-db-1 my-db-2
      firebase target:apply database other my-other-db-3
    3. Actualice su archivo de configuración firebase.json con los objetivos de implementación:

      {
        "database": [
          {"target": "main", "rules": "foo.rules.json"},
          {"target": "other", "rules": "bar.rules.json"}
        ]
      }
      
    4. Ejecute el comando de implementación:

      firebase deploy

Asegúrese de editar e implementar reglas de manera consistente desde el mismo lugar. La implementación de reglas desde la CLI de Firebase anula cualquier edición que haya realizado en la consola de Firebase, y la edición de reglas directamente en la consola de Firebase anula cualquier cambio reciente que haya implementado a través de la CLI de Firebase.

Conecte su aplicación a múltiples instancias de bases de datos

Utilice la referencia de la base de datos para acceder a los datos almacenados en instancias de bases de datos secundarias. Puede obtener la referencia de una instancia de base de datos específica por URL o aplicación. Si no especifica una URL, obtendrá la referencia de la instancia de base de datos predeterminada de la aplicación.

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
Nota: Este producto de Firebase no está disponible en el objetivo App Clip.
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Obtener una instancia de base de datos secundaria por URL var ref: DatabaseReference! ref = Base de datos.database("https://testapp-1234.firebaseio.com").referencia()
C objetivo
Nota: Este producto de Firebase no está disponible en el objetivo App Clip.
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Obtenga una instancia de base de datos secundaria por URL @property (fuerte, no atómica) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] referencia];

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();

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

Especificar una instancia al usar Firebase CLI

Use la opción --instance para especificar a qué Firebase Realtime Database desea aplicar un comando de Firebase CLI. Por ejemplo, use el siguiente comando para ejecutar el generador de perfiles para una instancia de base de datos denominada my-example-shard.firebaseio.com :

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

Optimizar las conexiones en cada base de datos

Si cada cliente necesita conectarse a varias bases de datos durante una sesión, puede reducir la cantidad de conexiones simultáneas a cada instancia de base de datos conectándose a cada instancia de base de datos solo durante el tiempo que sea necesario.

Obtén más consejos

Si necesita más ayuda para fragmentar sus datos en varias instancias de bases de datos, comuníquese con los expertos de Firebase en nuestro canal de Slack o en Stack Overflow .