Prima di tutto: non sono competitor

Firebase offre entrambi perché servono a cose diverse. Google stessa consiglia di valutarli separatamente e, nei progetti complessi, di usarli insieme. Il Realtime Database è il prodotto originale di Firebase — semplice, veloce, pensato per dati che cambiano di continuo. Firestore è arrivato dopo per colmare i limiti del primo: query più potenti, struttura a documenti, scalabilità automatica.

Struttura dati a confronto

🟡 Realtime Database
  • 🌳 Un grande albero JSON
  • 📍 Accesso per path: ref('chats/room-42')
  • WebSocket sempre aperto — latenza ~50ms
  • 🔢 Struttura piatta consigliata (no deep nesting)
  • 🌍 Un'unica regione geografica per database
🟢 Cloud Firestore
  • 📁 Collezioni → Documenti → Sotto-collezioni
  • 🔍 Query per campo su qualsiasi documento
  • ⏱️ Latenza ~100-200ms (più lenta ma scalabile)
  • 📊 Struttura relazionale gerarchica
  • 🌐 Multi-regione con replica automatica

Confronto dettagliato

Caratteristica 🟡 Realtime Database 🟢 Firestore
Struttura JSON tree Collezioni / Documenti
Query Filtro su un campo, order su uno Query composte, indici multipli
Real-time Nativo, WebSocket persistente Supportato, ma con overhead maggiore
Latenza ~50ms ~100-200ms
Free tier letture 1 GB trasferimento/mese 50.000 letture/giorno
Scritture free incluse nel trasferimento 20.000 scritture/giorno
Scalabilità Verticale (un server per DB) Orizzontale automatica
Offline support Sì (solo mobile SDK) Sì (mobile + web)
Transazioni Sì (su singolo path) Sì (multi-documento)
Dimensione documento Nessun limite per nodo Max 1 MB per documento

Il modello di costo che cambia tutto

Questa è la differenza più importante nella pratica. Il Realtime Database si paga per gigabyte trasferiti: scarichi un albero JSON enorme una volta sola e sei a posto. Firestore si paga per numero di operazioni — ogni documento letto è una lettura fatturabile. Questo cambia radicalmente come devi strutturare i dati.

Con Firestore, leggere 1.000 documenti per costruire una dashboard costa 1.000 letture. Con Realtime Database, scarichi l'intera sezione in un colpo solo e paghi in KB trasferiti. Viceversa, con un flusso di chat che genera 10.000 messaggi al giorno, Firestore accumula 10.000 scritture — mentre RTDB conta solo i byte inviati.

Regola empirica sui costi: se leggi pochi documenti grandi → RTDB. Se esegui molte query filtrate su collezioni strutturate → Firestore. Se non sei sicuro, usa il calcolatore Firebase su questo sito.

Quando scegliere Realtime Database

  • Chat e messaggistica — latenza bassissima, aggiornamenti in push istantanei
  • Presenza utenti online/offline — supporto nativo a .onDisconnect()
  • Dati che cambiano molte volte al minuto — contatori, posizioni GPS, feed live
  • Struttura semplice e piatta — se non hai bisogno di query complesse
  • Prototipazione rapida — API minimalista, setup in cinque minuti

Quando scegliere Firestore

  • Log, storico, ricevute — documenti strutturati con query per data, utente, tipo
  • Catalogo prodotti / e-commerce — filtri per categoria, prezzo, disponibilità
  • Dati utente complessi — profili con sotto-collezioni (ordini, indirizzi, preferenze)
  • App con molti utenti concorrenti — scalabilità automatica senza configurazione
  • Offline-first mobile — cache locale più robusta e persistente

Come ho usato entrambi nello stesso progetto

In PanelControl ho due database Firebase nello stesso progetto, usati per scopi diversi. Il Realtime Database gestisce la chat tra operatori e le notifiche push live: messaggi che arrivano ogni pochi secondi, devono apparire istantaneamente, e non hanno bisogno di query complesse — solo leggere un path e ascoltare i cambiamenti.

Firestore gestisce invece il log delle attività — ferie, permessi, accessi, turni. Questi sono documenti con sei-sette campi, che devo filtrare per operatore, tipo e intervallo di date. Impossibile con RTDB, triviale con Firestore. Il fatto che arrivino con un ritardo di 100ms in più non ha nessuna importanza per dati storici.

🧭 Guida rapida alla scelta

I dati cambiano più volte al minuto? → RTDB
Hai bisogno di filtri su più campi? → Firestore
Stai costruendo una chat o presenze online? → RTDB
Stai costruendo un catalogo, uno storico, un admin panel? → Firestore
Hai >100k utenti concorrenti previsti? → Firestore
Budget quasi zero, struttura semplice? → RTDB

Non esiste la scelta universalmente corretta. Firebase stesso è progettato per usarli insieme: inizia con quello che si adatta meglio al tuo caso principale, aggiungi l'altro quando hai un caso d'uso specifico che lo richiede. Non è un'architettura strana — è esattamente quello che Google suggerisce nella documentazione ufficiale.