Scegli un database: Cloud Firestore o Realtime Database

Firebase offre due soluzioni di database basate su cloud accessibili dal client che supportano la sincronizzazione dei dati in tempo reale:

  • Cloud Firestore è il database più recente di Firebase per lo sviluppo di app mobili. Si basa sui successi del Realtime Database con un nuovo modello di dati più intuitivo. Cloud Firestore offre inoltre query più ricche e veloci e offre una maggiore scalabilità rispetto al Realtime Database.

  • Realtime Database è il database originale di Firebase. Si tratta di una soluzione efficiente e a bassa latenza per le app mobili che richiedono stati sincronizzati tra i client in tempo reale.

Quale database consiglia Firebase?

La scelta della soluzione di database dipenderà da molti fattori, ma quando si tratta di determinate funzionalità, possiamo consigliarti quale database è adatto a te.

Entrambe le soluzioni offrono:

  • SDK client-first, senza server da distribuire e gestire
  • Aggiornamenti in tempo reale
  • Livello gratuito, quindi paga in base all'utilizzo

Considerazioni chiave

Oltre alle ottime funzionalità principali comuni a entrambi i database, pensa a come alcune o tutte le considerazioni elencate di seguito influenzeranno il successo delle tue app.

Ruolo della banca dati
La mia app utilizza un database per...
Principalmente sincronizzazione dei dati, con query di base.
Se non hai bisogno di query, ordinamenti e transazioni avanzati, ti consigliamo Realtime Database .
Interrogazioni avanzate, ordinamento e transazioni.
Se hai bisogno di interazioni complesse con i tuoi dati, ad esempio nelle app di e-commerce, ti consigliamo Cloud Firestore .
Operazioni sui dati
L'utilizzo del database della mia app è simile a...
Pochi GB o meno di dati che cambiano frequentemente.
Se la tua app invierà un flusso di piccoli aggiornamenti, come in un'app per lavagna digitale, ti consigliamo Realtime Database .
Da centinaia di GB a TB di dati che vengono letti molto più spesso di quanto non vengano modificati.
Per set di dati molto grandi e quando sono spesso necessarie operazioni batch, consigliamo Cloud Firestore .
Modello di dati
Preferisco strutturare i miei dati come...
Un semplice albero JSON.
Per i dati non strutturati JSON, consigliamo Realtime Database .
Documenti organizzati in raccolte.
Per documenti e raccolte strutturate, consigliamo Cloud Firestore .
Disponibilità
Le mie esigenze di disponibilità sono...
Garanzia di uptime estremamente elevata pari al 99,999%.
Se la disponibilità è della massima importanza, ad esempio nelle app di e-commerce, consigliamo Cloud Firestore .
Una garanzia di almeno il 99,95% di uptime.
Quando è accettabile una disponibilità molto elevata ma non critica, consigliamo Cloud Firestore o Realtime Database .
Query offline su dati locali
La mia app dovrà eseguire query su dispositivi con connettività limitata o assente...
Spesso.
Per funzionalità di query sofisticate sui dati locali quando l'utente è offline, consigliamo Cloud Firestore .
Raramente o mai.
Se ti aspetti che i tuoi utenti siano costantemente online, ti consigliamo Cloud Firestore o Realtime Database .

Quali sono altre cose importanti da considerare?

Dopo aver riflettuto sulle considerazioni chiave precedenti, potresti essere pronto per scegliere un database . Se stai ancora valutando pro e contro, questa sezione copre altre differenze tra Cloud Firestore e Realtime Database.

Modello di dati

Sia Realtime Database che Cloud Firestore sono database NoSQL.

Banca dati in tempo reale Cloud Fire Store
Memorizza i dati come un unico grande albero JSON.
  • I dati semplici sono molto facili da memorizzare.
  • I dati complessi e gerarchici sono più difficili da organizzare su larga scala.

Ulteriori informazioni sul modello dati Realtime Database .

Memorizza i dati come raccolte di documenti.
  • I dati semplici sono facili da archiviare nei documenti, che sono molto simili a JSON.
  • I dati complessi e gerarchici sono più facili da organizzare su larga scala, utilizzando sottoraccolte all'interno dei documenti.
  • Richiede meno denormalizzazione e appiattimento dei dati.

Ulteriori informazioni sul modello di dati Cloud Firestore .

Supporto in tempo reale e offline

Entrambi dispongono di SDK in tempo reale mobile-first ed entrambi supportano l'archiviazione di dati locali per app pronte per offline.

Banca dati in tempo reale Cloud Fire Store
Supporto offline per client Apple e Android. Supporto offline per client Apple, Android e Web.

Presenza

Può essere utile sapere quando un cliente è online o offline. Firebase Realtime Database può registrare lo stato della connessione del client e fornire aggiornamenti ogni volta che lo stato della connessione del client cambia.

Banca dati in tempo reale Cloud Fire Store
Presenza supportata. Non supportato in modo nativo. Puoi sfruttare il supporto di Realtime Database per la presenza sincronizzando Cloud Firestore e Realtime Database utilizzando Cloud Functions. Consulta Creare la presenza in Cloud Firestore .

Interrogando

Recupera, ordina e filtra i dati da entrambi i database tramite query.

Banca dati in tempo reale Cloud Fire Store
Query approfondite con funzionalità di ordinamento e filtro limitate.
  • Le query possono ordinare o filtrare una proprietà, ma non entrambe le cose.
  • Le query sono profonde per impostazione predefinita: restituiscono sempre l'intero sottoalbero.
  • Le query possono accedere ai dati con qualsiasi granularità, fino ai singoli valori dei nodi foglia nell'albero JSON.
  • Le query non richiedono un indice; tuttavia, le prestazioni di alcune query peggiorano man mano che il set di dati cresce.
Query indicizzate con ordinamento e filtro composti.
  • Puoi concatenare filtri e combinare filtri e ordinamenti su una proprietà in un'unica query.
  • Le query sono superficiali: restituiscono solo documenti in una particolare raccolta o gruppo di raccolte e non restituiscono dati di sottoraccolte.
  • Le query devono sempre restituire documenti interi.
  • Le query sono indicizzate per impostazione predefinita: le prestazioni delle query sono proporzionali alla dimensione del set di risultati, non al set di dati.

Scritture e transazioni

Banca dati in tempo reale Cloud Fire Store
Operazioni di scrittura e transazione di base.
  • Scrivere dati attraverso operazioni di impostazione e aggiornamento.
  • Le transazioni sono atomiche su una sottostruttura di dati specifica.
Operazioni avanzate di scrittura e transazione.
  • Scrivere operazioni sui dati tramite operazioni di impostazione e aggiornamento, nonché trasformazioni avanzate come operatori numerici e di matrice.
  • Le transazioni possono leggere e scrivere atomicamente dati da qualsiasi parte del database.

Affidabilità e prestazioni

Banca dati in tempo reale Cloud Fire Store
Realtime Database è una soluzione regionale.
  • Disponibile in configurazioni regionali. I database sono limitati alla disponibilità zonale all'interno di una regione.
  • Latenza estremamente bassa, opzione ideale per la sincronizzazione frequente dello stato.
Ulteriori informazioni sulle prestazioni e sulle caratteristiche di affidabilità del Realtime Database sono disponibili nel Contratto sul livello di servizio .
Cloud Firestore è una soluzione regionale e multiregionale con scalabilità automatica.
  • Ospita i tuoi dati in più data center in regioni distinte, garantendo scalabilità globale e forte affidabilità.
  • Disponibile in configurazioni regionali o multiregionali in tutto il mondo.
Scopri di più sulle prestazioni e sulle caratteristiche di affidabilità di Cloud Firestore nel contratto sul livello di servizio .

Scalabilità

Banca dati in tempo reale Cloud Fire Store
Il ridimensionamento richiede lo sharding.
  • Scala fino a circa 200.000 connessioni simultanee e 1.000 scritture al secondo in un unico database. Per andare oltre è necessario condividere i dati su più database.
  • Nessun limite locale alle velocità di scrittura su singoli dati.
Il ridimensionamento è automatico.
  • Si ridimensiona in modo completamente automatico. Attualmente, i limiti di scalabilità sono circa 1 milione di connessioni simultanee e 10.000 scritture/secondo. Prevediamo di aumentare questi limiti in futuro.
  • Presenta limiti sulle velocità di scrittura su singoli documenti o indici.

Sicurezza

Banca dati in tempo reale Cloud Fire Store
Linguaggio di regole a cascata che separa l'autorizzazione e la convalida. Regole non a cascata che combinano autorizzazione e convalida.
  • Legge e scrive da SDK per dispositivi mobili protetti dalle regole di sicurezza di Cloud Firestore .
  • Legge e scrive dagli SDK del server protetti da Identity and Access Management (IAM) .
  • Le regole non si sovrappongono a meno che non si utilizzi un carattere jolly.
  • Le regole possono limitare le query: se i risultati di una query potrebbero contenere dati a cui l'utente non ha accesso, l'intera query fallisce.

Prezzi

Entrambe le soluzioni sono disponibili sui piani tariffari Spark e Blaze .

Banca dati in tempo reale Cloud Fire Store
Addebita solo la larghezza di banda e lo spazio di archiviazione , ma a una tariffa più elevata.

Ulteriori informazioni sui piani tariffari di Realtime Database .

Addebita principalmente le operazioni eseguite nel database (lettura, scrittura, eliminazione) e, a una tariffa inferiore, larghezza di banda e spazio di archiviazione.

Cloud Firestore supporta limiti di spesa giornalieri per i progetti App Engine, per assicurarti di non superare i costi che ti senti a tuo agio.

Ulteriori informazioni sui piani tariffari di Cloud Firestore .

Utilizzo di Cloud Firestore e Realtime Database

Puoi utilizzare entrambi i database all'interno della stessa app o progetto Firebase. Entrambi i database NoSQL possono archiviare gli stessi tipi di dati e le librerie client funzionano in modo simile. Tieni presente le differenze sopra descritte se decidi di utilizzare entrambi i database nella tua app .

Scopri di più sulle funzionalità disponibili sia in Realtime Database che in Cloud Firestore .

Pronto a scegliere un database?

Speriamo che questo confronto ti abbia aiutato a scegliere una soluzione di database Firebase. Ora puoi imparare come aggiungere un database ai tuoi progetti Firebase.