2013-04-26 5 views
22

Sto testando Firebase per un progetto che potrebbe avere un numero ragionevolmente elevato di chiavi, potenzialmente milioni.Prestazioni di Firebase con set di dati di grandi dimensioni

Ho provato a caricare alcuni 10k di record utilizzando il nodo, e le prestazioni di carico sembrano buone. Tuttavia, l'interfaccia utente Web "FORGE" diventa insolitamente lenta e rende ogni singolo record se espongo il mio nodo principale.

Firebase non è progettato per questo volume di dati o sto facendo qualcosa di sbagliato?

+1

Come Kato menziona di seguito, questo è un problema di Forge, non un problema di Firebase. Prova a navigare direttamente in un percorso più profondo per gestire set di dati più grandi. –

risposta

64

Sono semplicemente le limitazioni dell'interfaccia utente di Forge. È ancora abbastanza rudimentale.

Le funzioni in tempo reale in Firebase non sono solo adatte, ma progettate per set di dati di grandi dimensioni. Il fatto che il flusso dei record sia in tempo reale è perfetto per questo.

Le prestazioni sono, come con qualsiasi app di dati di grandi dimensioni, valide solo come la vostra implementazione. Quindi, ecco alcuni trucchi da tenere a mente con set di dati di grandi dimensioni.

denormalizzare, denormalizzare, denormalizzare

Se un set di dati verrà ripetuta, e le sue registrazioni si contano a migliaia, riporlo in un proprio percorso.

Questo è un male per iterare grandi insiemi di dati:

/users/uid 
/users/uid/profile 
/users/uid/chat_messages 
/users/uid/groups 
/users/uid/audit_record 

Questo è un bene per iterare grandi insiemi di dati:

/user_profiles/uid 
/user_chat_messages/uid 
/user_groups/uid 
/user_audit_records/uid 

Evitare di 'valore' su grandi insiemi di dati

Utilizzare child_added poiché value deve caricare l'intero set di record sul client.

orologio per nascosti value operazioni sui bambini

Quando si chiama child_added, si sono essenzialmente chiamando value su ogni record figlio. Quindi, se quei bambini contengono elenchi di grandi dimensioni, dovranno caricare tutti i dati da restituire. Quindi, la sezione DENORMALIZZA sopra.

+0

Vuoi dire, se vogliamo solo ottenere tutto su un utente, proprio come visualizzare una pagina del profilo utente, allora usiamo i metodi '" Questo è male per iterare grandi set di dati "', altrimenti, se vuoi visualizzare un elenco di esempi utente per l'uso di admin, allora usiamo '" questo è utile per iterare il metodo dei grandi set di dati "'? – vzhen

+4

@vzhen praticamente, il trucco è ricordare che quando chiami child_added o value (non importa quale) che stai scaricando tutti i dati in quel percorso, compresi tutti i bambini, e non solo l'elemento di livello root che hai richiesto. – Kato

+5

Come menzionato da Kato, child_added viene chiamato un po 'in modo confuso poiché restituisce anche tutti i dati sotto un percorso, indipendentemente da quando è stato effettivamente aggiunto. Se vuoi "evento ogni volta che viene aggiunto un nuovo figlio", devi fare qualcosa come "ref.limitToLast (1) .on ('child_added', ...'. –