Escala tus 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 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 varios proyectos de Firebase, cada uno con su propia base de datos de Realtime Database.
  3. Configura tu app para que se conecte a la instancia de Realtime Database necesaria para cada conjunto de datos.
  4. (Opcional) Para unificar tu base de usuarios, configura una autenticación personalizada y sincroniza a los usuarios de varios proyectos de Firebase.

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.

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, ni 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.

También puedes almacenar un mapa de correlaciones entre ID de organización e ID de proyecto de Firebase, y buscar de forma programática qué instancia de base de datos corresponde al cliente que se está conectando. Sin embargo, esta estrategia de asignación requiere de más gastos que la estrategia más simple de asignación de ID que se mencionó antes.

La forma de asignar datos para tu app depende de tu caso de uso particular, pero las condiciones descritas anteriormente pueden ayudarte a definir qué puede funcionar para tus datos.

Crea varios proyectos de Firebase

  1. Crea un proyecto de Firebase para cada instancia de Realtime Database que necesites.
  2. Agrega tus apps para iOS, Android o la Web a cada proyecto de Firebase y guarda el archivo de configuración para usarlo en el futuro. Ten en cuenta que se aplican las siguientes consideraciones al proceso estándar:

    • No necesitas el certificado de firma SHA para tus apps de Android.
    • Si accedes a la base de datos de Realtime Database desde tu servidor, también deberás crear cuentas de servicio para cada proyecto de Firebase.

Crea tantos proyectos como necesites. Si tu proyecto se encuentra en el plan de precios Blaze, los gastos totales de Realtime Database se calculan en función del uso que hagas de cada base de datos, por lo que la fragmentación no aumentará tus costos.

Conecta tu app a varias instancias de base de datos

  1. Configura tu app para varios proyectos.
  2. Guarda los archivos de configuración del proyecto de Firebase:

    • Del lado del cliente: Guarda los valores de configuración de Firebase (ID de app, clave de API, URL de la base de datos) de todas las instancias de tu app y úsalos para conectarte a la instancia correspondiente. Así, obtendrás un mejor rendimiento, pero es menos flexible si necesitas cambiar tu estrategia de asignación en el futuro.
    • Del lado del servidor: Guarda las opciones de configuración del proyecto de Firebase en tu servidor o con Cloud Functions y envíalas de nuevo a tu app cliente cuando sea necesario. Esto genera más gastos en computación y red, pero es más flexible si cambias tu estrategia de asignación.
  3. 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.

Por ejemplo, si una organización tiene diferentes equipos y cada equipo tiene su propia base de datos, pero los usuarios de diferentes equipos pueden chatear entre sí, conecta el usuario A a la base de datos 10, cuando el usuario A esté chateando con el equipo 10. Luego, desconéctalo de la base de datos 10 y conéctalo a la base de datos 20 si el usuario A chatea con el equipo 20.

Sincroniza usuarios de distintas bases de datos

Usa tokens personalizados para autenticar a los usuarios y darles acceso a todas las instancias de base de datos de tu app. Cada token personalizado está asociado a un ID de usuario y puede autenticar a los usuarios de los proyectos de Firebase dentro de tu app.

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…

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