Panoramica dell'indicizzazione
Gli indici sono un fattore importante per le prestazioni di un database. Proprio come la indice di un libro che mappa gli argomenti di un libro ai numeri di pagina, un indice di database mappa gli elementi di un database alle relative posizioni all'interno del database. Quando esegui una query su un database, il database può utilizzare un indice per identificare rapidamente le posizioni degli elementi richiesti.
Questa pagina descrive i due tipi di indici utilizzati da Firestore: indici a campo singolo e compositi indici.
Definizione e struttura dell'indice
Un indice è definito da un elenco di campi di un determinato documento, con un modalità di indice corrispondente per ogni campo.
Un indice contiene una voce per ogni campo denominato nella definizione dell'indice. La l'indice include tutti i documenti che rappresentano i potenziali risultati per le query in base a dell'indice. Un documento è incluso nell'indice solo se ha un valore indicizzato impostato per ogni campo usato nell'indice. Se la definizione dell'indice fa riferimento a un campo per cui il documento non ha valori impostati, il documento non verrà visualizzato nell'indice. In questo caso, il documento non verrà mai restituito come risultato per qualsiasi query basata sull'indice.
L'indice composto viene ordinato in base ai valori dei campi, nell'ordine specificato nel dell'indice.
Un indice dietro ogni query
Se non esiste alcun indice per una query, la maggior parte dei database esegue la scansione dell'elemento di contenuto per voce, un processo lento che rallenta ancora di più man mano che il database cresce. Firestore garantisce prestazioni elevate delle query utilizzando indici per tutte le query. Di conseguenza, le prestazioni delle query dipendono del set di risultati e non dal numero di elementi nel database.
Meno gestione dell'indice, più sviluppo di app
Firestore include funzionalità che riducono la quantità di tempo da spendere per la gestione dell'indice. Gli indici richiesti per l'architettura di base vengono create automaticamente. Mentre usi e testi la tua app, Firestore ti aiuta a identificare creare indici aggiuntivi richiesti dalla tua app.
Tipi di indice
Firestore utilizza due tipi di indici: campo singolo e composito. Oltre al numero di campi indicizzati, i campi a campo singolo e gli indici composti differiscono nel modo in cui li gestisci.
Indici a campo singolo
Un indice a campo singolo memorizza una mappatura ordinata di tutti i documenti in un contenente un campo specifico. Ogni voce in un indice a campo singolo registra il valore di un documento per un campo specifico e la posizione del documento nel database. Firestore usa questi indici per eseguire per le query di base. Puoi gestire gli indici a campo singolo configurando impostazioni di indicizzazione automatica ed esenzioni dell'indice.
Indicizzazione automatica
Per impostazione predefinita, Firestore gestisce automaticamente gli indici a campo singolo per ogni campo in un documento e ogni campo secondario in una mappa. Firestore utilizza le seguenti impostazioni predefinite per gli indici a campo singolo:
Per ogni campo non array e non mappa, Firestore definisce due Indici a campo singolo collection-scope, uno in modalità crescente e uno in modalità decrescente.
Per ogni campo della mappa, Firestore crea quanto segue:
- Un indice crescente con ambito di raccolta per ogni sottocampo non array e non mappa.
- Un indice decrescente con ambito di raccolta per ogni sottocampo non array e non di mappa.
- Un array con ambito di raccolta contiene un indice per ogni sottocampo dell'array.
- Firestore indicizza in modo ricorsivo ogni sottocampo della mappa.
Per ogni campo di array in un documento, Firestore crea e mantiene un indice con ambito di raccolta -contains.
Gli indici a campo singolo con ambito del gruppo di raccolte non sono gestiti da predefinito.
Esenzioni dell'indice a campo singolo
Puoi escludere un campo dall'indicizzazione automatica delle impostazioni creando un'esenzione dell'indice a campo singolo. Un'esenzione dell'indicizzazione esegue l'override delle impostazioni dell'indice automatico a livello di database. Un esenzione può attivare un indice a campo singolo che le impostazioni di indicizzazione automatica altrimenti disabiliterebbe o disabiliterebbe un indice a campo singolo che l'indicizzazione automatica altrimenti consentirebbe. Per i casi in cui le esenzioni possono essere utili, consulta best practice per l'indicizzazione.
Utilizza il valore del percorso del campo *
per aggiungere esenzioni dell'indice a livello di raccolta su tutti
campi in un gruppo di raccolte. Ad esempio, per il gruppo di raccolte comments
, imposta
il percorso del campo a *
in modo che corrisponda a tutti i campi nel gruppo di raccolte comments
e
disabilita l'indicizzazione di tutti i campi nel gruppo di raccolte. Puoi quindi aggiungere
esenzioni per indicizzare solo i campi obbligatori per le tue query. Ridurre
di campi indicizzati riduce i costi di archiviazione e può migliorare
le prestazioni dei dispositivi.
Se crei un'esenzione dell'indice a campo singolo per un campo della mappa, il valore campi secondari ereditano queste impostazioni. Puoi, tuttavia, definire un indice a campo singolo per i sottocampi specifici. Se elimini un'esenzione per un campo secondario, il campo secondario erediterà le impostazioni di esenzione dell'elemento padre, se presenti, o impostazioni a livello di database se non esistono esenzioni padre.
Per creare e gestire le esenzioni degli indici a campo singolo, consulta: Gestire gli indici.
Indici composti
Un indice composto archivia una mappatura ordinata di tutti i documenti di una raccolta, in base a un elenco ordinato di campi da indicizzare.
Firestore utilizza indici composti per supportare query non già supportate dagli indici a campo singolo.
Firestore non crea automaticamente indici composti come questo. degli indici a campo singolo a causa dell'elevato numero di campi possibili combinazioni. Firestore ti aiuta invece a identificare e creare indici composti richiesti mentre crei l'app.
Ogni volta che tenti di eseguire una query non supportata da un indice, Firestore restituisce un messaggio di errore con un link che puoi seguire per creare l'elemento di Google.
Puoi anche definire e gestire gli indici composti manualmente utilizzando la console o l'account Firebase interfaccia a riga di comando. Per ulteriori informazioni sulla creazione e la gestione indici composti, consulta Gestire gli indici.
Modalità di indice e ambiti delle query
Puoi configurare gli indici a campo singolo e quelli composti in modo diverso, ma entrambi richiedono di configurare le modalità di indice e gli ambiti di query per gli indici.
Modalità indice
Quando definisci un indice, seleziona una modalità di indice per ogni campo indicizzato. Ciascuna la modalità di indice del campo supporta clausole di query specifiche su quel campo. Tu puoi scegliere tra le seguenti modalità di indice:
Modalità indice | Descrizione |
---|---|
Crescente | Supporta le clausole di query < , <= , == , >= , > , != , in e not-in nel campo e l'ordinamento dei risultati in ordine crescente in base al valore di questo campo. |
In ordine decrescente | Supporta le clausole di query < , <= , == , >= , > , != , in e not-in sul campo e supporta l'ordinamento dei risultati in ordine decrescente in base al valore di questo campo. |
Array‐contiene | Supporta le clausole di query array-contains e array-contains-any sul campo. |
Vector | Supporta le clausole di query FindNearest sul campo. |
Ambiti di query
Ogni indice ha come ambito una raccolta o un gruppo di raccolte. Questo è noto come ambito della query dell'indice:
- Ambito della raccolta
- Firestore crea indici con ambito di raccolta per impostazione predefinita. Questi indici supportano query che restituiscono i risultati da una singola raccolta.
- Ambito del gruppo di raccolte
- Un gruppo di raccolte include tutte le raccolte con lo stesso ID raccolta. A Eseguire una query sul gruppo di raccolta che restituisca un filtro o risultati ordinati da un gruppo di raccolte, devi creare un con l'ambito del gruppo di raccolte.
Ordine predefinito e campo __name__
Oltre a ordinare i documenti in base alle modalità di indicizzazione
specificato per ogni campo (ordine crescente o decrescente) , gli indici applicano una
in base al campo __name__
di ogni documento. Il valore dell'attributo __name__
sia impostato sul percorso completo del documento. Ciò significa che i documenti
nel set di risultati con gli stessi valori di campo, vengono ordinati in base al percorso del documento.
Per impostazione predefinita, il campo __name__
è ordinato nella stessa direzione dell'ultimo
campo ordinato nella definizione dell'indice. Ad esempio:
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
cities | Nome di __name__ |
, Raccolta |
cities | Stato __name__ |
, Raccolta |
cities | __name__ |
paese, popolazione, Raccolta |
Per ordinare i risultati in base alla direzione __name__
non predefinita, devi creare questo indice.
Proprietà indice
Un indice che consente un'esecuzione più efficiente della query è definito dalle seguenti proprietà:
- Campi utilizzati nei filtri di uguaglianza
- Campi utilizzati negli ordinamenti
- Campi utilizzati nei filtri di intervallo e di disuguaglianza (non ancora inclusi negli ordini di ordinamento)
- Campi utilizzati nelle aggregazioni (non già inclusi nei filtri di ordinamento e intervallo e disuguaglianza)
Firestore calcola i risultati per le query in questo modo:
- Identifica l'indice corrispondente alla raccolta, alle proprietà di filtro, agli operatori di filtro e agli ordini di ordinamento della query.
- Identifica la posizione dell'indice da cui inizia la scansione. La posizione iniziale è preceduta dal prefisso dei filtri di uguaglianza della query e termina con i filtri per intervallo e disuguaglianza nel primo campo
orderBy
. - Avvia la scansione dell'indice, restituendo ogni documento che soddisfa tutti i filtri finché il processo di scansione non esegue una delle seguenti operazioni:
- Rileva un documento che non soddisfa le condizioni di filtro e conferma che i documenti successivi non soddisferanno mai completamente le condizioni di filtro.
- Raggiunge la fine dell'indice.
- Raccoglie il numero massimo di risultati richiesti dalla query.
Esempio di indicizzazione
Creando automaticamente indici a campo singolo, Firestore
consente alla tua applicazione di supportare rapidamente le query di database più basilari.
Gli indici a campo singolo consentono di eseguire semplici query basate sui valori dei campi
e i confronti <
, <=
, ==
, >=
, >
e in
. Per i campi di un array, consentono
di eseguire query array-contains
e array-contains-any
.
Per spiegarci meglio, esamina gli esempi seguenti dal punto di vista
la creazione degli indici. Il seguente snippet crea un
alcuni city
documenti in una raccolta cities
e imposta name
, state
,
Campi country
, capital
, population
e tags
per ogni documento:
Web
var citiesRef = db.collection("cities"); citiesRef.doc("SF").set({ name: "San Francisco", state: "CA", country: "USA", capital: false, population: 860000, regions: ["west_coast", "norcal"] }); citiesRef.doc("LA").set({ name: "Los Angeles", state: "CA", country: "USA", capital: false, population: 3900000, regions: ["west_coast", "socal"] }); citiesRef.doc("DC").set({ name: "Washington, D.C.", state: null, country: "USA", capital: true, population: 680000, regions: ["east_coast"] }); citiesRef.doc("TOK").set({ name: "Tokyo", state: null, country: "Japan", capital: true, population: 9000000, regions: ["kanto", "honshu"] }); citiesRef.doc("BJ").set({ name: "Beijing", state: null, country: "China", capital: true, population: 21500000, regions: ["jingjinji", "hebei"] });
Presumendo le impostazioni predefinite di indicizzazione automatica, Firestore si aggiorna un indice a campo singolo crescente per campo non array, un indice a campo singolo decrescente indice di campi per campo non array e un array che contiene un indice a campo singolo per il campo array. Ogni riga della tabella seguente rappresenta una voce in un indice a campo singolo:
Raccolta | Campo indicizzato | Ambito di query |
---|---|---|
cities | Nome | Raccolta |
cities | stato | Raccolta |
cities | paese | Raccolta |
cities | capitale | Raccolta |
cities | popolazione | Raccolta |
cities | Nome | Raccolta |
cities | stato | Raccolta |
cities | paese | Raccolta |
cities | capitale | Raccolta |
cities | popolazione | Raccolta |
cities | array-contains regioni |
Raccolta |
Query supportate da indici a campo singolo
Utilizzando questi indici a campo singolo creati automaticamente, puoi eseguire semplici query simili alle seguenti:
Web
const stateQuery = citiesRef.where("state", "==", "CA"); const populationQuery = citiesRef.where("population", "<", 100000); const nameQuery = citiesRef.where("name", ">=", "San Francisco");
Puoi anche creare query in
e di uguaglianza composta (==
):
Web
citiesRef.where('country', 'in', ["USA", "Japan", "China"]) // Compound equality queries citiesRef.where("state", "==", "CO").where("name", "==", "Denver") citiesRef.where("country", "==", "USA") .where("capital", "==", false) .where("state", "==", "CA") .where("population", "==", 860000)
Se devi eseguire una query composta che utilizza un confronto di intervalli (<
, <=
,
>
o >=
) oppure se devi ordinare in base a un campo diverso, devi creare un'etichetta
indice composto per la query.
L'indice array-contains
ti consente di eseguire query sul campo dell'array regions
:
Web
citiesRef.where("regions", "array-contains", "west_coast") // array-contains-any and array-contains use the same indexes citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
Query supportate da indici composti
Firestore utilizza indici composti per supportare query composte non ancora supportate dagli indici a campo singolo. Ad esempio, è necessario un indice composto per le seguenti query:
Web
citiesRef.where("country", "==", "USA").orderBy("population", "asc") citiesRef.where("country", "==", "USA").where("population", "<", 3800000) citiesRef.where("country", "==", "USA").where("population", ">", 690000) // in and == clauses use the same index citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000)
Queste query richiedono l'indice composto riportato di seguito. Poiché la query utilizza
un'uguaglianza (==
o in
) per il campo country
, puoi utilizzare
una modalità indice crescente o decrescente per questo campo. Per impostazione predefinita,
le clausole di disuguaglianza applicano un ordinamento crescente in base al campo
una clausola di disuguaglianza.
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
cities | (o ) paese, popolazione | Raccolta |
Per eseguire le stesse query in ordine decrescente,
è necessario un indice composto aggiuntivo in direzione discendente per population
:
Web
citiesRef.where("country", "==", "USA").orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", "<", 3800000) .orderBy("population", "desc") citiesRef.where("country", "==", "USA") .where("population", ">", 690000) .orderBy("population", "desc") citiesRef.where("country", "in", ["USA", "Japan", "China"]) .where("population", ">", 690000) .orderBy("population", "desc")
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
cities | paese, popolazione | Raccolta |
città | paese, popolazione | Raccolta |
Per evitare perdite di prestazioni causate dall'unione degli indici, ti consigliamo di creare
un indice composto per combinare una query array-contains
o array-contains-any
con clausole aggiuntive:
Web
citiesRef.where("regions", "array-contains", "east_coast") .where("capital", "==", true) // array-contains-any and array-contains use the same index citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"]) .where("capital", "==", true)
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
cities | Tag array-contains, con | (o ) di lettere maiuscoleRaccolta |
Query supportate dagli indici dei gruppo di raccolte
Per dimostrare un indice con l'ambito del gruppo di raccolte, aggiungi un
landmarks
raccolta secondaria ad alcuni dei city
documenti:
Web
var citiesRef = db.collection("cities"); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Bridge", category : "bridge" }); citiesRef.doc("SF").collection("landmarks").doc().set({ name: "Golden Gate Park", category : "park" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Gallery of Art", category : "museum" }); citiesRef.doc("DC").collection("landmarks").doc().set({ name: "National Mall", category : "park" });
Utilizzando il seguente indice a campo singolo con ambito della raccolta, puoi eseguire query
raccolta landmarks
di una singola città in base al campo category
:
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
punti di riferimento | Categoria | (o )Raccolta |
Web
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park") citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])
Se vuoi eseguire query sui punti di riferimento di tutte le città, ad esempio,
esegui questa query sul gruppo di raccolte che è composto da tutti i seguenti elementi: landmarks
raccolte. Devi anche abilitare un indice a campo singolo landmarks
con
ambito del gruppo di raccolte:
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
punti di riferimento | Categoria | (o )Gruppo di raccolte |
Con questo indice attivato, puoi eseguire query sul gruppo di raccolte landmarks
:
Web
var landmarksGroupRef = db.collectionGroup("landmarks"); landmarksGroupRef.where("category", "==", "park") landmarksGroupRef.where("category", "in", ["park", "museum"])
Eseguire una query sul gruppo di raccolte che restituisca un filtro o risultati ordinati, devi abilitare un'istanza corrispondente a campo singolo o composito con l'ambito del gruppo di raccolte. Query del gruppo di raccolte che non filtrano o i risultati degli ordini, tuttavia, non richiedono ulteriori definizioni dell'indice.
Ad esempio, puoi eseguire la seguente query sul gruppo di raccolte senza abilitare un indice aggiuntivo:
Web
db.collectionGroup("landmarks").get()
Voci indice
Gli indici configurati del progetto e la struttura di un documento determinano il numero di voci di indice per un documento. Le voci dell'indice vengono conteggiate ai fini del calcolo il limite del numero di voci di indice.
L'esempio seguente mostra le voci di indice di un documento.
Documento
/cities/SF
city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]
Indici a campo singolo
- ASC City_name
- city_name DESC
- temperature.estate ASC
- temperatures.summer DESC
- temperature.inverno ASC
- temperature.winter DESC
- quartieres Array Contains (ASC e DESC)
Indici composti
- città_name ASC, quartieri ARRAY
- città_name DESC, quartieri ARRAY
Voci indice
Questa configurazione di indicizzazione genera le seguenti voci di indice per il parametro documento:
Indice | Dati indicizzati |
---|---|
Voci di indice a campo singolo | |
ASC City_name | city_name: "Milano" |
città_name DESC | city_name: "Milano" |
temperature.estate ASC | temperatures.summer: 67 |
temperature.estate DESC | temperature.estate: 67 |
temperature.inverno ASC | temperature.inverno: 55 |
temperature.winter DESC | temperature.inverno: 55 |
L'array di quartieri Contiene ASC | quartieri: "Missione" |
Quartieri Array Contiene DESC | quartieri: "Missione" |
L'array di quartieri Contiene ASC | quartieri: "Centro" |
Quartieri Array Contiene DESC | neighborhoods: "Downtown" |
L'array di quartieri Contiene ASC | quartieri: "Marina" |
Quartieri Array Contiene DESC | neighborhoods: "Marina" |
Voci di indice composto | |
città_name ASC, quartieri ARRAY | city_name: "San Francisco", quartieri: "Missione" |
città_name ASC, quartieri ARRAY | city_name: "San Francisco", quartieri: "Centro" |
città_name ASC, quartieri ARRAY | city_name: "San Francisco", quartieri: "Marina" |
città_name DESC, quartieri ARRAY | city_name: "San Francisco", quartieri: "Missione" |
city_name DESC, neighborhoods ARRAY | city_name: "San Francisco", quartieri: "Centro" |
città_name DESC, quartieri ARRAY | city_name: "San Francisco", quartieri: "Marina" |
Indici e prezzi
Gli indici contribuiscono ai costi di archiviazione della tua applicazione. Per saperne di più su come calcolare la dimensione dello spazio di archiviazione per gli indici, consulta Dimensioni delle voci di indice.
Utilizza l'unione degli indici
Sebbene Firestore utilizzi un indice per ogni query,
richiedono necessariamente un indice per query. Per le query con più clausole di uguaglianza (==
) e, facoltativamente, una clausola orderBy
, Firestore può riutilizzare gli indici esistenti. Firestore può unire gli indici per
filtri di uguaglianza per creare gli indici composti necessari per ottenere un'uguaglianza maggiore
query.
Puoi ridurre i costi di indicizzazione identificando le situazioni in cui puoi utilizzare l'indicizzazione
l'unione. Ad esempio, in una raccolta restaurants
per un'app di valutazione dei ristoranti:
Ristoranti
hamburgerthyme
name : "Burger Thyme"
category : "burgers"
city : "San Francisco"
editors_pick : true
star_rating : 4
Questa app utilizza query come le seguenti. L'app usa combinazioni di uguaglianza
clausole per category
, city
e editors_pick
, ordinando sempre per
in ordine crescente star_rating
:
Web
db.collection("restaurants").where("category", "==", "burgers") .orderBy("star_rating") db.collection("restaurants").where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==", "San Francisco") .orderBy("star_rating") db.collection("restaurants").where("category", "==", "burgers") .where("city", "==" "San Francisco") .where("editors_pick", "==", true ) .orderBy("star_rating")
Puoi creare un indice per ogni query:
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
ristoranti | Categoria | , stelleRaccolta |
ristoranti | città, stelle | Raccolta |
ristoranti | Categoria | , città, stelleRaccolta |
ristoranti | Categoria | , città, scelta dagli editor, star_ratingRaccolta |
Come soluzione migliore, puoi ridurre il numero di indici sfruttando la capacità di Firestore di unire indici per le clausole di uguaglianza:
Raccolta | Campi indicizzati | Ambito di query |
---|---|---|
ristoranti | Categoria | , stelleRaccolta |
ristoranti | città, stelle | Raccolta |
ristoranti | scelta dagli editor, valutazione_stella | Raccolta |
Questo insieme di indici non solo è più piccolo, ma supporta anche una query aggiuntiva:
Web
db.collection("restaurants").where("editors_pick", "==", true) .orderBy("star_rating")
Limiti di indicizzazione
Agli indici si applicano i limiti seguenti. Per ulteriori informazioni su quote e limiti, consulta Quote e limiti.
Questa pagina identifica le quote e i limiti delle richieste per Firestore.
Limite | Dettagli |
---|---|
Numero massimo di indici composti per un database |
|
Numero massimo di configurazioni a campo singolo per un database |
Configurazione a livello di campo può contenere più configurazioni per lo stesso campo. Ad esempio: un'esenzione dell'indicizzazione a campo singolo e un criterio TTL per lo stesso campo vengono conteggiate come una configurazione del campo ai fini del limite. |
Numero massimo di voci di indice per ogni documento |
40.000 Il numero di voci di indice corrisponde alla somma di quanto segue per un documento:
Per scoprire in che modo Firestore trasforma un documento e una serie di indici in voci di indice, vedi questo esempio di conteggio di voci di indice. |
Numero massimo di campi in un indice composto | 100 |
Dimensione massima di una voce di indice |
7,5 KiB Per scoprire in che modo Firestore calcola la dimensione di una voce di indice, vai alla pagina Dimensioni delle voci di indice. |
Somma massima delle dimensioni delle voci di indice di un documento |
8 MiB La dimensione totale corrisponde alla somma di quanto segue per un documento: |
Dimensione massima di un valore di campo indicizzato |
1500 byte I valori di campo superiori a 1500 byte vengono troncati. Le query che includono valori di campo troncati possono restituire risultati incoerenti. |
Best practice per l'indicizzazione
Per la maggior parte delle app puoi fare affidamento sull'indicizzazione automatica e sui link dei messaggi di errore che rimandano a e gestire gli indici. Tuttavia, ti consigliamo di aggiungere esenzioni a campo singolo nel i seguenti casi:
Richiesta | Descrizione |
---|---|
Campi stringa grandi | Se hai un campo stringa che spesso contiene lunghi valori stringa che che non usi per le query, puoi ridurre i costi di archiviazione escludendo il campo dall'indicizzazione. |
Elevate velocità di scrittura in una raccolta contenente documenti con valori sequenziali | Se indicizzi un campo che aumenta o diminuisce in sequenza tra documenti di una raccolta, ad esempio un timestamp, quindi la frequenza di scrittura massima è di 500 scritture al secondo. Se non esegui query in base al campo con valori sequenziali, puoi esentare il campo dall'indicizzazione per aggirare questo limite. In un caso d'uso IoT con una frequenza di scrittura elevata, ad esempio, una raccolta contenente documenti con un campo timestamp potrebbe avvicinarsi al limite di 500 scritture al secondo. |
Campi TTL |
Se utilizzi i criteri di durata (TTL), tieni presente che il valore deve essere un timestamp. L'indicizzazione sui campi TTL è abilitata per impostazione predefinita e può influisce sulle prestazioni con tassi di traffico più elevati. Come best practice, aggiungi esenzioni a campo singolo per i campi TTL. |
Array di grandi dimensioni o campi della mappa | I campi array o di mappa di grandi dimensioni possono avvicinarsi al limite di 40.000 voci di indice per documento. Se non stai eseguendo query sulla base di un array o di un campo di mappa di grandi dimensioni, devi esentarlo dall'indicizzazione. |
Se utilizzi query con operatori di intervallo e disuguaglianza su più campi, consulta la sezione sull'indicizzazione considerazioni che dovresti prendere in considerazione per ottimizzare le prestazioni e il costo delle query Firestore
Per maggiori informazioni su come risolvere i problemi di indicizzazione (fanout dell'indice, errori INVALID_ARGUMENT
), consulta la pagina di risoluzione dei problemi.