Panoramica di Firestore in modalità Native

Firestore in modalità Native è costituito da due insiemi di operazioni: operazioni Firestore Core e operazioni Firestore Pipeline.

Le operazioni Firestore Core forniscono la funzionalità standard di creazione, lettura, aggiornamento ed eliminazione (CRUD) dei documenti, oltre al supporto integrato per le query di ascolto in tempo reale e la persistenza offline. Una differenza operativa distinta in questa versione è che gli indici sono facoltativi e non vengono creati automaticamente per i singoli campi. Sebbene ciò consenta l'esecuzione delle query senza una configurazione iniziale dell'indice, le query non indicizzate eseguiranno la scansione dell'intera raccolta per impostazione predefinita. Ciò può comportare un aumento della latenza e dei costi man mano che il set di dati cresce.

Le operazioni Firestore Pipeline sono una funzionalità centrale della versione Enterprise di Firestore, basata su un motore di query avanzato per espandere in modo significativo la gamma di query possibili. Le operazioni Pipeline utilizzano una sintassi di query flessibile e un metodo di indicizzazione distinto in cui gli indici sono facoltativi e non vengono creati automaticamente, consentendo operazioni di recupero dei dati avanzate per le applicazioni.

Funzionalità delle operazioni Firestore Core

Le operazioni del Centro consentono operazioni CRUD standard e query di ascolto in tempo reale. Tuttavia, quando si utilizzano queste operazioni nella versione Enterprise, il comportamento sottostante relativo all'indicizzazione e alla fatturazione cambia in modo significativo rispetto alla versione Standard.

Funzionalità e continuità

Le operazioni Core mantengono la sintassi di concatenamento dei metodi (ad esempio .where(), .orderBy()) utilizzata nella versione Standard. Queste operazioni supportano le query di ascolto in tempo reale e la persistenza offline per i client web e mobile. Ti consigliamo di utilizzare queste operazioni per carichi di lavoro transazionali standard, ricerche semplici e migrazione del codice dell'applicazione esistente.

Indicizzazione personalizzata

A differenza della versione Standard, le operazioni Core nella versione Enterprise non creano automaticamente indici a campo singolo. Gli indici sono facoltativi e non sono necessari per eseguire una query. Se manca un indice specifico, la query esegue una scansione completa della raccolta. Sebbene le query non indicizzate consentano una prototipazione rapida, potrebbero essere più lente e costare di più man mano che il set di dati cresce. Gli sviluppatori devono creare manualmente gli indici per ottimizzare le prestazioni delle query e ridurre il consumo di unità di lettura.

Modello di fatturazione (basato su unità)

Le unità di lettura vengono addebitate in tranche da 4 KB anziché in base al conteggio dei documenti. Una query non indicizzata che esegue la scansione di una raccolta di grandi dimensioni consumerà unità di lettura in base al totale dei byte sottoposti a scansione in tutti i documenti. Le unità di scrittura vengono addebitate in tranche da 1 KB. La scrittura di un documento consuma unità per i dati più unità aggiuntive per ogni voce di indice aggiornata. A differenza della versione Standard, che applica l'indicizzazione automatica a campo singolo, ora puoi scegliere campi specifici da indicizzare per ottimizzare i costi e le prestazioni di scrittura.

Funzionalità delle operazioni Firestore Pipeline

La versione Enterprise di Firestore con operazioni Pipeline utilizza un motore di query avanzato che rimuove molte limitazioni esistenti della versione Standard di Firestore. Le operazioni Pipeline forniscono centinaia di funzionalità di query aggiuntive. Le operazioni Pipeline hanno le seguenti funzionalità:

Sintassi componibile basata su fasi

Le query Pipeline vengono create definendo una serie di fasi sequenziali che vengono eseguite in ordine. Ciò consente operazioni complesse, come il filtraggio sul risultato di un'aggregazione, che in precedenza non era possibile.

Il seguente esempio mostra una query Pipeline che trova il numero di ID prodotto unici visualizzati nell'ultimo mese:

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

Funzionalità ampliate

La query Pipeline introduce un numero elevato di nuove funzionalità, tra cui:

  • Aggregazioni: supporto per nuove funzioni di aggregazione (come sum(...), min(...) e count_distinct(...)) combinate con campi di raggruppamento arbitrari.
  • Filtraggio complesso: supporto per centinaia di funzioni aggiuntive per esprimere istruzioni where(...) arbitrariamente complesse, tra cui regex_match(...), add(...) e str_contains(...), il tutto senza requisiti di indice rigidi.
  • Letture parziali / proiezioni: recupera sottoinsiemi dinamici di documenti utilizzando select(...), remove_fields(...) e molte altre fasi di manipolazione dei documenti.

Per scoprire di più su queste funzionalità, consulta Eseguire query sui dati con le operazioni Pipeline.

Supporto in tempo reale e offline

Per utilizzare le funzionalità in tempo reale e offline, gli sviluppatori possono utilizzare le operazioni Firestore Core nella versione Enterprise di Firestore.

Integrazione di client e strumenti

La versione Enterprise include funzionalità specializzate per interagire con le query Pipeline e gestirle:

  • Spiegazione e profilazione delle query: puoi utilizzare i risultati di Query Explain per capire quante unità di lettura o scrittura consuma una query e analizzarne l'esecuzione.
  • Query Insights: la versione Enterprise supporta Query Insights, che ti aiuta a determinare dove è possibile creare indici per migliorare le prestazioni e i costi fornendo visibilità sulle query principali eseguite sul database e sulle relative caratteristiche di prestazioni.
  • Nuovi tipi di indici: puoi creare indici specializzati per la versione Enterprise, inclusi tipi di indici come indici sparsi, non sparsi e univoci. Supporta anche la creazione e la modifica degli indici di ricerca vettoriale per i database Enterprise.

Differenze tra Firestore Standard e Firestore Enterprise

La principale differenza operativa tra le operazioni Core e Pipeline risiede nella gestione dell'indicizzazione, che influisce direttamente su prestazioni e costi.

Versione Standard - Operazioni Core Versione Enterprise - Operazioni Core e Pipeline
Requisito di indicizzazione Gli indici sono obbligatori per le query.

Gli indici per i singoli campi vengono creati automaticamente, mentre le query più complesse si basano su indici composti o indici di gruppi di raccolte che devono essere configurati manualmente.

Gli indici non sono obbligatori e quindi sono facoltativi per le query.

Definisci gli indici in base alle esigenze. La versione Enterprise supporta anche una gamma più ampia di tipi di indici, inclusi indici non sparsi/sparsi e univoci.

Prestazioni Query indicizzate: le prestazioni e i costi scalano in base alle dimensioni del set di risultati.

Query non indicizzate: le prestazioni e i costi scalano in base alle dimensioni del set di dati.

Query indicizzate: le prestazioni e i costi scalano in base alle dimensioni del set di risultati.

Ti consigliamo di utilizzare gli strumenti Query Explain e Query Insights per creare indici e migliorare le prestazioni e i costi delle query.

Implicazioni sui costi di archiviazione Si verifica un overhead di archiviazione dovuto agli indici automatici e agli indici composti. Risparmi sui costi di archiviazione perché gli indici non vengono creati automaticamente per ogni campo.
Base di costo Viene addebitata un'operazione di lettura, scrittura ed eliminazione per documento. Viene addebitata un'operazione per unità di lettura (tranche da 4 KB) e unità di scrittura (tranche da 1 KB). La scrittura delle voci di indice consuma unità di scrittura.

Scopri di più sui nuovi prezzi con alcuni esempi.

Regole di sicurezza Le regole di sicurezza proteggono le raccolte verificando le autorizzazioni di lettura/scrittura. Le regole di sicurezza proteggono le raccolte verificando le autorizzazioni di lettura/scrittura. Scopri come modellare i dati per supportare le query Pipeline nella guida al modello di dati.