¿Usar Firebase en lugar de MongoDB haría que mi aplicación Meteor sea más escalable?

Soy un desarrollador principal en Meteor, pero me encanta la idea y la implementación de Firebase. Dado que contribuí a la implementación de seguimiento de registros de operaciones de Meteor, aquí hay una comparación de Meteor’s Livequery (Meteor es en realidad una plataforma completa con muchas más características que solo la sincronización de datos en tiempo real) y Firebase.

Firebase:
– ¡Hospedado y administrado por ti! Probablemente la mayor ventaja es tener un desarrollador que esté de guardia para su servicio Firebase 24h / 7d.
– Modelo simple para obtener datos: simplemente obtenga un subárbol de su estructura de datos y eso es todo. Todos sus datos en Firebase se ven como un gran árbol de datos similares a JSON.
– Soporte de consultas / filtrado limitado. Con las últimas incorporaciones (Firebase: ¡ahora con más consultas!), Puede ordenar los resultados y realizar recortes, pero no más que eso.
– Debe aprender un DSL especial para configurar reglas de seguridad: Inicio rápido de seguridad y reglas
– Según tengo entendido, Firebase tiene transacciones limitadas: Firebase.transaction (), esto se puede usar para implementar estrategias de resolución de conflictos más complejas, consulte Firepad – http://www.firepad.io/

Meteorito:
– Meteor se encarga de la propagación de actualizaciones utilizando el oplog de replicación de MongoDB, también otras partes de Meteor se aseguran de que los cambios lleguen adecuadamente a los clientes en función de sus suscripciones
– Las reglas de seguridad se definen en el nivel de su aplicación, usted usa el código JavaScript para devolver “Sí” o “No” a cada solicitud de escritura o lectura
– Necesita administrar su base de datos Mongo: alojarla o usar algún servicio de alojamiento MongoDB; considere que su esquema es eficiente, configure índices en sus colecciones; manejar la concurrencia ya que MongoDB no tiene transacciones
– Meteor puede servirle cualquier consulta válida de MongoDB con actualizaciones en vivo. Solo las consultas geoespaciales tienen soporte limitado, prácticamente cualquier otra consulta es compatible de forma inmediata. Puede filtrar, ordenar, limitar y proyectar sus datos.
– Dado que Meteor solo copia el modelo de documento de MongoDB, la estrategia de escala y la estructura de la aplicación serían muy diferentes de una aplicación escrita para Firebase.
– Meteor es de código abierto. Si tuviera problemas de escala realmente malos, simplemente continuaría y bifurcaría la implementación de Livequery de Meteor y la optimizaría para mi aplicación. Probablemente será más barato que contratar a un equipo de ingenieros que vuelvan a implementar un sistema similar desde cero.

¿Usaría Firebase con Meteor? Probablemente no para mi prototipo y no para mi aplicación inicial. Creo que el modelo de Firebase es más limitante cuando el modelo de documento de MongoDB está aquí, ya incorporado. Usaría Firebase en casos en los que pueda demostrar que no vale la pena optimizar las consultas en vivo de Meteor y necesito manejar más conexiones en este momento (y obtuve suficiente dinero para pagar cada conexión).

Pero ninguna de mis aplicaciones tiene más de 10-100 usuarios (son feos como el infierno), por lo que ese día está muy por delante.

PD Recuerde que al final del día, tanto Meteor como Firebase almacenan datos persistentes en MongoDB (o TokuMX, que es una bifurcación de MongoDB con índices más eficientes y un mejor control de concurrencia).

En este momento, MeteorJS ya proporciona una sincronización casi en tiempo real con MongoDB a través del seguimiento de oplog (muy rápido) o el sondeo (adecuado para aplicaciones de desarrollo, prueba o pequeñas). No admite oficialmente ninguna otra base de datos que MongoDB en este momento, aunque agregar soporte para otras bases de datos con el tiempo está en su hoja de ruta.

Claro, podría hackear partes de Meteor para que funcione con Firebase si realmente lo desea, pero requeriría un gran esfuerzo de desarrollo personalizado, y no creo que agregue ningún beneficio o haga que su aplicación sea más escalable que ir con un buen proveedor administrado MongoDB para su aplicación.

En primer lugar, me gustaría decir que ¿por qué no utiliza Redis u otro almacenamiento? Por qué Firebase y por qué MongoDB. Simplemente aclare todas estas cosas en primer lugar en su mente.

Pero, en mi opinión personal, evitaría MongoDB porque MongoDB es inconsistente por defecto. La documentación afirma “coherencia fuerte”, pero la implementación predeterminada considera una operación “completa” tan pronto como se pone en cola en el búfer de envío de un cliente, incluso antes de que algún nodo la haya visto. Existe una gran discrepancia entre la discusión en los blogs de Mongo y la implementación predeterminada en el código. Debe tomar medidas adicionales para asegurarse de que una actualización se haya propagado a todas las réplicas. Ninguna opinión sobre Firebase.

James (desarrollador de software)

ValueCoders

Firebase es increíble para los datos que deben sincronizarse rápidamente, pero renuncia a casi toda la capacidad de consultar / filtrar sus datos a cambio de la funcionalidad de sincronización. Si eso no es un problema (el chat en tiempo real es su ejemplo principal), entonces son una gran opción.

En nuestra experiencia, MongoDB es una excelente opción para la mayoría de las aplicaciones web: si proporciona un poco más de información sobre los problemas que enfrenta, tal vez podríamos ayudarlo a descubrir dónde está el cuello de botella y determinar si otros DB o servicios serían una mejor opción .

Divulgación completa: soy cofundador de Stretchr, una solución NoSQL alojada que utiliza MongoDB como parte de su back-end.