pasar - base de datos autorizada mySQL-combinada con Firebase
pasar de mysql a firebase (1)
Hemos creado una aplicación API LAMP-stack a través de PHP Laravel. Esto actualmente usa una instancia mySQL local. En su mayoría, hemos implementado vistas en AngularJS.
Para utilizar Firebase, necesitamos sincronizar datos entre la tienda autorizada en mySQL con cualquier elemento relevante que exista en Firebase, lo más cercano posible al tiempo real. Esto significa que otras partes de la aplicación que no son en tiempo real y que no usan Firebase también pueden servir contenido nuevo que se haya ingresado recientemente en el sistema.
Sé que Firebase es esencialmente una base de datos no SQL en la nube. Mi pregunta es: ¿cómo escribo un contenedor o un medio para sincronizar la versión canónica de mi Firebase en mi base de datos de registro - mySQL?
Actualiza para responder, nuestra decisión final, abandonando Firebase como una opción
Hemos decidido no hacerlo, ya que podemos tener fácilmente una instancia de socket.io en el mismo servidor con una conexión de latencia extremadamente baja para mySQL, de modo que los dos puedan permanecer sincronizados. No es necesario ir a través de la web cuando los recursos y puntos finales pueden existir en localhost. También nos da la opción de ejecutar nuestra aplicación sin conexión a Internet, lo cual es importante si vendemos un dispositivo en el lugar a grandes empresas.
Una plataforma de sincronización noSQL como Firebase es en realidad solo una tienda temporal que hace que las lecturas / escrituras sean más rápidas en tiempo semi-real. Si intentan entrar en el negocio "también lo persistimos todo para usted", esa es una pregunta completamente diferente con mucho más compromiso requerido.
La garantía sobre la coherencia final entre mySQL y Firebase es más importante para estar bien primero: evitar problemas en el futuro. Además, un RDMS es esencial para nuestra aplicación, es la única forma de atacar muchos problemas de datos pesados en nuestras asignaciones de análisis / datos: hay razones muy fuertes por las que la mayoría del mundo todavía usa un RDMS como mySQL, etc. Puedes hacer aquellos muy confiables también - a través de Amazon RDS y Google Cloud SQL.
No hay ningún problema específico más allá de la escala de sincronización en tiempo real que Firebase realmente resuelve para nosotros, que otros marcos de código abierto no resuelven aún. Si su lib de JS realmente maneja los escenarios fuera de línea (cuando INICIAS fuera de línea) elegantemente, podría haberlo considerado, pero aún no lo hace.
Entonces, YMMV, pero en nuestro caso específico, no estamos considerando Firebase por las razones indicadas anteriormente.
El tema completo es increíblemente amplio, definitivamente demasiado amplio para proporcionar una respuesta simple.
Me atendré al caso de uso que proporcionó en los comentarios:
Imagine que tiene una lista de verificación almacenada en mySQL, que consta de algunos atributos y un conjunto de pasos. Los pasos se almacenan en otra tabla. Cuando alguien actualiza esta lista de verificación en Firebase, ¿cómo puedo sincronizar mySQL también?
Si insistes en combinar Firebase y mySQL para este caso de uso, yo:
Configura Firebase como una cola de trabajo:
var ref = new Firebase(''https://my.firebaseio.com/workqueue'')
hacer que el cliente
ref.push({ task: ''id-of-state'', newState: ''newstate''})
un elemento de trabajo en Firebase:ref.push({ task: ''id-of-state'', newState: ''newstate''})
configurar un servidor (nodejs) que:
- supervisa la cola de trabajo (
ref.on(''child_added''
) - actualiza el elemento en la base de datos mySQL
- elimina la tarea de la cola
- supervisa la cola de trabajo (
Consulte este proyecto de github para ver un ejemplo de una cola de trabajo en la parte superior de Firebase: https://github.com/firebase/firebase-work-queue