2012-05-11 45 views
26

Sto prendendo in considerazione l'utilizzo di Firebase per un'applicazione che dovrebbe consentire alle persone di utilizzare la ricerca full-text su una raccolta di alcune migliaia di oggetti. Mi piace l'idea di fornire un'applicazione client-only (non dovermi preoccupare di ospitare i dati), ma non sono sicuro di come gestire la ricerca. I dati saranno statici, quindi l'indicizzazione stessa non è un grosso problema.Firebase e indicizzazione/ricerca

Suppongo di aver bisogno di un servizio aggiuntivo che esegua query e restituisca gli handle dell'oggetto Firebase. Posso creare un servizio di questo tipo in qualche postazione fissa, ma poi devo preoccuparmi della sua scalabilità di disponibilità e annunci. Sebbene non preveda troppo traffico per questa app, può raggiungere un picco di un paio di migliaia di utenti simultanei.

Pensieri architettonici?

risposta

27

A lungo termine, Firebase avrà query più avanzate, quindi si spera che possa supportare questo genere di cose direttamente senza che tu debba fare qualcosa di speciale. Fino ad allora, hai alcune opzioni:

  1. Scrivere codice server per gestire la ricerca. Il modo più semplice sarebbe eseguire un codice server responsabile dell'indicizzazione/ricerca, come hai menzionato. Firebase ha un client Node.JS, quindi sarebbe un modo semplice per interfacciare il servizio in Firebase. Tutto il trasferimento dei dati potrebbe ancora avvenire tramite Firebase, ma dovresti scrivere un servizio Node.JS che cerca le "richieste di ricerca" del cliente in una determinata posizione in Firebase e quindi "risponde" scrivendo il set di risultati in Firebase, per cliente da consumare.
  2. Archiviare l'indice in Firebase con i client che lo aggiornano automaticamente. Se vuoi essere davvero intelligente, puoi provare a implementare uno schema senza server in cui i client indicizzano automaticamente i loro dati mentre lo scrivono ... Quindi l'indice per la ricerca full-text verrà memorizzato in Firebase e quando un client scrive un nuovo articolo nella raccolta, sarebbe responsabile anche di aggiornare l'indice in modo appropriato. E per fare una ricerca, il cliente consumerebbe direttamente l'indice per costruire il set di risultati. Questo in realtà ha molto senso per i casi semplici in cui si desidera indicizzare un campo di un oggetto complesso archiviato in Firebase, ma per la ricerca full-text, questo probabilmente sarebbe piuttosto nodoso. :-)
  3. Memorizza l'indice in Firebase con il codice del server che lo aggiorna. Puoi provare un approccio ibrido in cui l'indice è archiviato in Firebase e viene utilizzato direttamente dai client per effettuare ricerche, ma piuttosto che i client aggiornano l'indice, il tuo codice server aggiornerà l'indice ogni volta che nuovi elementi verranno aggiunti al collezione. In questo modo, i client potrebbero ancora cercare dati quando il tuo server non funziona. Potrebbero ottenere risultati obsoleti fino a quando il server non raggiungerà l'indicizzazione.

Fino a quando Firebase non ha query più avanzate, # 1 è probabilmente la soluzione migliore se sei disposto a eseguire un piccolo codice server. :-)

+1

Oops. Basta rileggere il tuo commento che i tuoi dati sono statici. In tal caso, l'opzione n. 2 non è necessaria e l'opzione n. 3 diventa più semplice. Devi ancora capire come costruire l'indice di ricerca full-text, archiviarlo in Firebase e chiedere ai clienti di interrogarlo direttamente, ma dovrebbe essere totalmente fattibile. –

+0

Grazie per aver confermato che non mi mancava qualcosa di ovvio.Penso che il n. 1 sia probabilmente la strada giusta da percorrere: la reimplementazione di un indice full-text in JavaScript non mi sembra un buon uso del mio tempo :-) –

+0

Dai un'occhiata a http://lunrjs.com/ per una completa soluzione di indicizzazione full-text basata su JS. – Nemo