2013-07-25 5 views
14

Wir müssen mit anderen databases für full-text search (in ElasticSearch) und anderen Arten von Anfragen unserer Firebase Daten synchron halten, dass Firebase nicht leicht unterstützen nicht.Wie Firebase mit einer anderen Datenbank synchron halten

Dies muss so nah wie möglich an der Echtzeit sein, wir können nicht einfach eine nächtliche Dump der Firebase JSON oder etwas ähnliches exportieren, abgesehen davon, dass dies ziemlich groß werden wird.

Mein erster Gedanke war ein Node.js Client ausgeführt werden, die zu child_changed hört, child_added, child_removed etc ... Veranstaltungen aller Hauptlisten, aber ein bisschen unweildy bekommen könnte und würde es eine zuverlässige Möglichkeit der Synchronisierung, wenn das sein Client verbindet sich nach einer gewissen Zeit neu?

Mein nächster Gedanke war, eine Liste der "geänderten Objekte" -Ereignisse zu führen und jedes Mal, wenn ein Element erstellt/aktualisiert wird, ähnlich dem Beispiel zu schreiben. Die Warteschlange könnte den vollständigen Pfad zu den Daten enthalten, die sich geändert haben, und der Worker verbraucht nur diesen und aktualisiert die lokale Datenbank entsprechend.

Das Problem hier ist jedes Bit des Codes, der Updates muss daran denken, in diese Warteschlange zu schreiben, sonst werden die beiden Systeme nicht mehr synchron sein. Einige Proxy-Code sollte nicht zu schwer zu schreiben sein.

Hat jemand anderes etwas ähnliches mit Erfolg getan?

+0

Ich denke, dass Ihre Proxy-Idee am sinnvollsten ist. Wir haben definitiv Fälle gesehen, in denen Benutzer node.js-Prozesse ausgeführt haben, die Zeitstempel des letzten Schreibens von Daten speichern. Wenn der Prozess abstürzt, können Sie einen ersten Import durchführen, indem Sie sich den letzten von Ihnen geschriebenen Zeitstempel ansehen. – Anant

+0

@rlivsey Hast du eine Lösung gefunden? Ich muss das gleiche Problem lösen und dachte über die Verwendung von Elastic Search nach. Irgendwelche Informationen über Ihre Erfahrung würden geschätzt. – Tim

+1

Wir haben dieses Problem gelöst, aber in unserem Fall ist das Setup anders - wir leben glücklich mit zwei Datenbanken, jeder für einen anderen Zweck. Wir haben MongoDB (* autoritativer Speicher *) und Firebase (* Echtzeitspeicher *), die ** nicht ** identisch sind und jeweils die erforderlichen Daten enthalten. Nicht alle Echtzeitdaten in Firebase müssen in die MongoDB geschrieben werden. und umgekehrt - viele Nicht-Echtzeit-Daten sind nicht auf unserem Mongo. Nur ein ** Fragment ** der Daten wird synchronisiert: Client -> Nodejs -> Mongo + Firebase. Also ich denke, die Frage ist - brauchen Sie wirklich ** alle ** Daten synchronisiert? – oori

Antwort

5

Für Suchanfragen können Sie direkt in ElasticSearch integrieren; Eine Synchronisierung mit einer sekundären Datenbank ist nicht erforderlich. Firebase hat eine blog post about integrating und eine Lib, Flashlight, um dies schnell und schmerzlos zu machen.

+0

Während dies hilfreich ist, habe ich beschlossen, ein kleines Stück Code zu schreiben, um Firebase mit Mongo zu synchronisieren. Weitere Informationen finden Sie in [diesem Beitrag] (https://medium.com/@ariklewliber/querying-firebase-through-mongo-412a824ca4dd#.bp4vz7rkx) – Leo

0

Eine weitere Option ist die Verwendung des Logstash-Plugins logstash-input-firebase, um Änderungen in Ihrer/n Firebase-Echtzeitdatenbank (en) zu überwachen und die Daten in Echtzeit an Elasticsearch unter Verwendung einer elasticsearch-Ausgabe weiterzuleiten.

Verwandte Themen