Anuncio de Cloud Firestore (Beta): Prueba la nueva base de datos escalable y flexible de Firebase y Google Cloud Platform. Obtén más información sobre Cloud Firestore.

Escalar con varias bases de datos

La mejor manera de optimizar el rendimiento y escalar tus datos en Firebase Realtime Database es dividir los datos en varias instancias de Realtime Database. Este proceso también se conoce como fragmentación de base de datos. La fragmentación te da la flexibilidad de escalar más allá de los límites que se aplican a instancias de base de datos individuales, además del balanceo de cargas y la optimización de rendimiento.

Cuándo fragmentar tus datos

Podría ser conveniente fragmentar tus datos en varias bases de datos, si usas Realtime Database en cualquiera de los siguientes contextos:

  • Deseas escalar más allá del límite de 100,000 conexiones simultáneas, 1,000 operaciones de escritura/segundo o cualquiera de los demás límites de una instancia de base de datos única.
  • Dispones de varios conjuntos de datos discretos y deseas optimizar el rendimiento (por ejemplo, una app de chat que usan grupos de usuarios independientes y separados).
  • Deseas balancear la carga en 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 tus datos

Para fragmentar tus datos, sigue estos pasos (que se describen en más detalle a continuación):

  1. Asigna tus datos a varias bases de datos según las necesidades específicas de tu app.
  2. Crea varias instancias de bases de datos.
  3. Configura tu app para que se conecte a la instancia de Realtime Database necesaria para cada conjunto de datos.

Asigna tus datos

Cuando estés asignando tus datos a varias bases de datos, intenta reunir las siguientes condiciones:

  • Cada consulta solo se ejecuta en una única instancia de base de datos. Realtime Database no admite consultas en varias instancias de base de datos.
  • No compartir ni duplicar datos entre las instancias de base de datos (ni siquiera compartir o duplicar mínimamente).
  • Cada instancia de app solo se conecta a una base de datos en un momento específico.

Cuando estés asignando tus datos, considera aplicar las siguientes estrategias:

Crear un “shard principal”

Guarda un mapa de la forma en que se almacenan tus datos en las instancias de base de datos. De esta manera, puedes buscar automáticamente qué instancia de base de datos corresponde al cliente que se está conectando. Recuerda que esto podría generar más gastos que conectarte directamente a la base de datos específica que necesitas, en el momento en que la necesitas.

Crear depósitos de datos por categorías o por cliente

Almacena datos en instancias de base de datos aisladas, agrupadas por usuario o tipo de datos. Por ejemplo, si creas una aplicación de chat que usan varias organizaciones, puedes 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 tus bases de datos y solo realizas 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 app de chat.

Luego, puedes crear varias instancias de base de datos con antelación y usar el 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 la base de datos A de Realtime Database.

La forma de asignar datos para tu app depende de tu caso práctico específico, pero las condiciones y estrategias descritas anteriormente pueden ayudarte a definir qué puede funcionar para tus datos.

Crea varias instancias de Realtime Database

Si estás en el plan de precios Blaze, puedes 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, ve a la pestaña Datos en la sección Desarrollar > Base de datos.
  2. Selecciona Crear nueva base de datos del menú en la sección Bases de datos.
  3. Personaliza la Referencia de la base de datos y las Reglas de seguridad y, luego, haz clic en Entendido.

Repite el proceso para crear todas las instancias de base de datos que necesites. Cada instancia de base de datos tiene su propio conjunto de reglas de Firebase Realtime Database, para que puedas optimizar el acceso a tus datos.

Conecta tu app a varias instancias de base de datos

Usa la referencia de la base de datos para acceder a los datos almacenados en instancias de bases de datos secundarias. Puedes obtener la referencia para una instancia específica de base de datos por URL o app. Si no especificas una URL, obtendrás la referencia para la instancia predeterminada de base de datos de la app.

Web
// Get the default database instance for an app
var database = firebase.database();

// Get a secondary database instance by URL
var database = firebase.database('https://testapp-1234.firebaseio.com');
Swift
// Get the default database instance for an app
var ref: DatabaseReference!

ref = Database.database().reference()
// Get a secondary database instance by URL var ref: DatabaseReference! ref = Database.database("https://testapp-1234.firebaseio.com").reference()
Objective-C
// Get the default database instance for an app
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];
// Get a secondary database instance by URL @property (strong, nonatomic) FIRDatabaseReference *ref; self.ref = [[FIRDatabase databaseWithURL:@"https://testapp-1234.firebaseio.com"] reference];
Android
// Get the default database instance for an app
private DatabaseReference mDatabase;
// ...
mDatabase = FirebaseDatabase.getInstance().getReference();

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

Optimiza las conexiones en cada base de datos

Si cada cliente necesita conectarse a varias bases de datos durante una sesión, puedes reducir la cantidad de conexiones simultáneas a cada instancia de base de datos si te conectas a cada instancia de base de datos solo durante el tiempo necesario.

Obtén más consejos

Si necesitas más ayuda para fragmentar tus datos en varias instancias de base de datos, comunícate con los expertos de Firebase en nuestro canal de Slack o en Stack Overflow.

Enviar comentarios sobre…

Firebase Realtime Database
¿Necesitas ayuda? Visita nuestra página de asistencia.