2013-07-25 16 views
14

Dobbiamo mantenere i nostri dati Firebase in sincronia con altri databases per full-text search (in ElasticSearch) e altri tipi di query che Firebase non supporta facilmente.Come mantenere Firebase in sincronia con un altro database

Questo deve essere il più vicino possibile al tempo reale, non possiamo semplicemente esportare un dump notturno del Firebase JSON o qualcosa del genere, a parte il fatto che questo diventerà piuttosto grande.

Il mio primo pensiero è stato quello di eseguire un client Node.js che ascolta child_changed, child_added, child_removed ecc ... gli eventi di tutte le liste principali, ma questo potrebbe diventare un po 'poco gestibile e sarebbe un modo affidabile di sincronizzazione se il il client si riconnette dopo un certo periodo di tempo?

Il mio prossimo pensiero è stato quello di mantenere un elenco di eventi "modificati" e scrivere a quello ogni volta che un articolo viene creato/aggiornato, in modo simile all'esempio Firebase work queue. La coda potrebbe contenere il percorso completo dei dati che è stato modificato e il lavoratore lo consuma e aggiorna il database locale di conseguenza.

Il problema qui è ogni bit di codice che rende gli aggiornamenti da ricordare per scrivere in questa coda altrimenti i due sistemi non saranno più sincronizzati. Tuttavia, alcuni codici proxy non dovrebbero essere troppo difficili da scrivere.

Qualcun altro ha fatto qualcosa di simile con un successo?

+0

Penso che la tua idea proxy abbia più senso. Abbiamo sicuramente visto casi in cui le persone hanno eseguito processi node.js che memorizzano i timestamp dell'ultima volta in cui hanno scritto i dati. Se il processo si blocca, puoi eseguire un'importazione iniziale osservando l'ultimo timestamp che hai scritto. – Anant

+0

@rlivsey Hai trovato una soluzione? Ho bisogno di risolvere lo stesso problema e stavo pensando di usare Elastic Search. Qualsiasi informazione sulla tua esperienza sarebbe apprezzata. – Tim

+1

Abbiamo risolto questo problema, ma nel nostro caso la configurazione è diversa: viviamo felici con due database, ciascuno per uno scopo diverso. Abbiamo MongoDB (* autorevole store *) e Firebase (* real-time store *), che sono ** non ** identici, ognuno dei quali contiene i dati necessari. Non tutti i dati in tempo reale in Firebase devono essere scritti su MongoDB. e viceversa: molti dati non in tempo reale non sono sul nostro Mongo. Solo un ** frammento ** dei dati è sincronizzato: client -> nodejs -> Mongo + Firebase. Quindi immagino che la domanda sia: hai veramente bisogno di ** tutti i dati ** sincronizzati? – oori

risposta

5

Per le query di ricerca, è possibile integrarsi direttamente con ElasticSearch; non è necessario sincronizzare con un database secondario. Firebase ha un blog post about integrating e un lib, Flashlight, per rendere questo rapido e indolore.

+0

Sebbene ciò sia utile, ho deciso di scrivere una piccola porzione di codice per sincronizzare Firebase con Mongo. Maggiori informazioni possono essere trovate in [questo post] (https://medium.com/@ariklevliber/querying-firebase-through-mongo-412a824ca4dd#.bp4vz7rkx) – Leo

0

Un'altra opzione è utilizzare il plug-in logstash-input-firebase Logstash per ascoltare le modifiche nei database in tempo reale di Firebase e inoltrare i dati in tempo reale a Elasticsearch utilizzando l'output elasticsearch.

Problemi correlati