Questa pagina include esempi di come vengono calcolate le unità di fatturazione in alcuni degli scenari più comuni. Tieni presente che ogni query potrebbe differire per i dati elaborati in base a fattori quali il piano di query, la forma dei dati e gli indici disponibili.
Ti consigliamo di utilizzare la funzionalità Spiegazione query per comprendere meglio il costo e le prestazioni delle tue query specifiche.
Operazioni di lettura
La maggior parte delle operazioni di lettura comporta l'esecuzione di una lettura puntuale di un documento specifico o la scansione di un intervallo di dati in base a un identificatore. Le operazioni di lettura consumano unità di lettura. Vedi i seguenti esempi.
Ricerca a testo intero
I costi per le query di ricerca a testo intero si distinguono tra il costo per eseguire una ricerca su un indice di testo e il costo per recuperare i documenti. Il costo per eseguire una ricerca su un indice di testo è determinato dalla complessità della query e dalla quantità di dati scansionati nell'indice per trovare i risultati. I fattori che influenzano questo costo includono il numero e la natura dei termini di ricerca (ad es. termini, frasi), l'applicazione o meno del punteggio di pertinenza e il numero di voci dell'indice che devono essere esaminate. Il costo per il recupero dei documenti pertinenti si basa sul numero e sulle dimensioni dei documenti recuperati al termine della fase di ricerca.
La tabella seguente illustra gli addebiti associati all'esecuzione di query di ricerca a testo intero per un catalogo di prodotti di e-commerce per un vivaio. Questo esempio presuppone una raccolta di 200.000 schede di prodotto, con ogni documento della scheda di prodotto di 2 KiB e una dimensione dell'indice della Ricerca testuale corrispondente di circa 100 MiB.
| Query | Esempio di codice | Unità di lettura stimate consumate per query | Costi stimati (regione: us-central1 in USD) |
|---|---|---|---|
| Cerca un prodotto raro "dry water" stack flat tray, che restituisce 3 documenti. | |
10 unità di lettura totali In base a 7 unità per la ricerca a testo intero e 3 unità aggiuntive per i documenti restituiti. |
0,50 $ per milione di query |
| Cerca tutti gli alberi di agrumi da interno, recuperando 36 documenti. | |
42 unità di lettura totali In base a 6 unità per la ricerca a testo intero e 36 unità aggiuntive per i documenti restituiti. |
2,10 $ per milione di query |
| Cerca fioriere da balcone dove ci sono molte corrispondenze di prodotti. Ordina i risultati in base alla pertinenza e limitati ai primi 50 risultati di ricerca. | |
75 unità di lettura totali In base a 25 unità per la ricerca a testo intero e 50 unità aggiuntive per i documenti restituiti. |
3,75 $ per milione di query |
Questi esempi illustrano in che modo i diversi pattern di query influiscono sui costi:
- La query"dry water" include una frase (
"dry water") e termini aggiuntivi. Le ricerche di frasi sono più complesse, poiché il motore di query deve controllare la prossimità e l'ordine dei token, contribuendo alle 7 unità di lettura per la fase di ricerca. Poiché i documenti corrispondenti sono pochissimi, il costo di recupero dei documenti è basso. - La query"indoor" "citrus" "tree" cerca tre termini distinti. Sebbene sia leggermente meno complessa per termine rispetto a una ricerca per frase, richiede comunque la ricerca di più token. Il costo di scansione dell'indice della Ricerca è leggermente inferiore, pari a 6 unità di lettura, rispetto all'esempio "dry water", ma vengono restituiti 36 documenti, il che aumenta il costo totale.
- La query "fioriera da balcone" ha il costo di ricerca a testo intero più elevato, pari a 25 unità, con un margine significativo. Ciò è dovuto principalmente al fatto che richiede che i risultati vengano ordinati per pertinenza (
.sort({score: {$meta: "textScore"}})) in base ai termini che corrispondono a molti documenti. Per determinare i 50 risultati più pertinenti, il motore di query deve trovare tutte le potenziali corrispondenze per "balcone" o "fioriera", calcolare un punteggio di pertinenza per ciascuna e poi ordinarle. Questo processo di assegnazione del punteggio e di ordinamento su un numero elevato di candidati all'interno dell'indice richiede un'elevata intensità di calcolo, anche se alla fine vengono recuperati solo 50 documenti. L'ampiezza dei termini, combinata con l'overhead del punteggio di pertinenza, rende la fase di ricerca più costosa.
Query geospaziali
I costi per le query geospaziali sono determinati dalla complessità della query, dalle condizioni specifiche e dall'ordinamento utilizzati, nonché dalle risorse necessarie per analizzare tutti i dati nell'indice geospaziale pertinente.
La tabella seguente illustra gli addebiti associati all'esecuzione di query geospaziali per un'applicazione di mappe. Questo esempio presuppone una raccolta di 1.000.000 di documenti che rappresentano punti di interesse, con ogni documento di punto di interesse di 1 KiB e una dimensione dell'indice geospaziale corrispondente di circa 60 MiB.
| Query | Esempio di codice | Unità di lettura stimate consumate per query | Costi stimati (regione: us-central1 in USD) |
|---|---|---|---|
| Trova tutti i punti di interesse entro un raggio massimo di 10 km, restituendo 10 corrispondenze. | |
16 unità di lettura totali. In base a 6 unità di lettura per la query geospaziale e 10 unità aggiuntive per i documenti restituiti. |
0,80 $ per milione di query |
| Trova tutti i punti di interesse con una distanza massima di 100 km e restituisci i 10 punti di interesse più vicini su 1000 corrispondenze | |
19 unità di lettura totali. In base a 9 unità di lettura per la query geospaziale e 10 unità aggiuntive per i documenti restituiti. |
0,95 $ per milione di query |
Questi esempi illustrano in che modo i diversi pattern di query influiscono sui costi:
- Query con raggio di 10 km: questa query analizza un'area geografica più piccola. Poiché trova solo 10 corrispondenze entro questo raggio di 10 km, il motore di query deve eseguire meno lavoro per identificare e ordinare questi punti in base alla distanza (come fa implicitamente
$near). Ciò si traduce in un costo di scansione dell'indice inferiore di 6 unità di lettura. - Query con raggio di 100 km: questa query copre un'area molto più ampia. La query trova 1000 potenziali corrispondenze entro un raggio di 100 km. Per soddisfare la richiesta dei 10 punti più vicini, il motore di query deve calcolare le distanze e ordinare un insieme molto più ampio di candidati (fino a 1000 punti) all'interno dell'indice. Questo lavoro di calcolo aggiuntivo per l'analisi e il ranking di molti più punti è il motivo per cui il costo della query geospaziale è più elevato, pari a 9 unità di lettura, rispetto alla query di 10 km, nonostante restituisca solo 10 documenti.
Letture di punti
Esempio di fatturazione per le letture di punti:
- Lettura puntuale di un singolo documento da 1 KiB. Consuma: 1 unità di lettura
- Lettura puntuale di un singolo documento da 4 KiB. Consuma: 1 unità di lettura
- Lettura puntuale di un singolo documento da 1 MiB. Consumo: 256 unità di lettura
- Lettura puntuale di 100 documenti, ciascuno di 1 KiB. Consumo: 100 unità di lettura
Analisi in corso
I seguenti esempi includono scenari che analizzano documenti o voci di indice.
Scansione di documenti
- Query che analizza 100 documenti, ciascuno di 1 KiB. Consumo: 25 unità di lettura
Scansione degli indici
Il costo della scansione, in termini di byte, è lo stesso indipendentemente dal fatto che venga eseguita la scansione di un documento o di un indice. Tuttavia, le voci dell'indice sono spesso di dimensioni inferiori. Di conseguenza, spesso possono fornire un modo più conveniente per scansionare i dati.
- Query che analizza 100 voci di indice, ciascuna di 1 KiB. Consumo: 25 unità di lettura.
- Query che analizza 100 voci di indice, ciascuna di 128 byte. Consuma: 4 unità di lettura.
Dimensioni minime del documento o della voce dell'indice
In determinate situazioni potrebbe non essere necessario leggere i contenuti di un documento o di una voce di indice per soddisfare una query. Sono incluse query di conteggio semplici, come il conteggio del numero totale di documenti in una raccolta. In queste situazioni, si applica un costo minimo di 32 byte per elemento scansionato.
- Contare il numero di documenti in una raccolta. La query analizza 1000 elementi nella raccolta. Consuma: 8 unità di lettura.
Combinazione di scansioni e letture di punti
Molte query eseguono una combinazione di scansioni e letture di punti per soddisfare un'operazione.
- Query che analizza 128 voci di indice, ciascuna di 256 byte, ed esegue una lettura puntuale di 128 documenti, ciascuno di 4 KiB. Consuma: 136 unità di lettura, composte da:
- 128 unità di lettura per le letture di punti
- 8 unità di lettura per le scansioni dell'indice
Spiegazione query
Query Explain ti aiuta a capire in che modo il database esegue le query. I dettagli forniti possono aiutarti a ottimizzare le query.
Quando utilizzi Spiegazione query, si applicano i seguenti costi:
- Query Explain che esegue la query: si applica il costo della query.
- Query Explain con l'opzione Solo piano. Consumo: 1 unità di lettura (costo minimo di una query)
Operazioni di scrittura
Le operazioni di scrittura (creazioni, aggiornamenti ed eliminazioni) vengono addebitate in base alle dimensioni dei documenti e degli indici creati, modificati o eliminati durante l'operazione. Le operazioni di scrittura consumano unità di scrittura. Le unità di scrittura vengono calcolate in tranche da 1 KiB.
Le operazioni di scrittura semplici, come l'aggiornamento in base all'ID documento, comportano solo il costo delle scritture. Le operazioni di scrittura che richiedono l'esecuzione di query per soddisfare l'operazione comporteranno inoltre i costi di lettura associati alla query.
Vedi i seguenti esempi.
Crea
- Crea un nuovo documento da 10 KiB senza indici. Consumo: 10 unità di scrittura
- Crea un documento da 1 KiB con una voce di indice di 256 byte nella raccolta. Consumo: 2 unità di scrittura
Aggiornamenti
- Trova un documento di 10 KiB in base all'ID documento e aggiornalo senza indici nella raccolta. Consumo: 10 unità di scrittura
- Trova un documento da 1 KiB in base all'ID documento e aggiorna 1 campo con 1 voce di indice da 256 byte. Consuma: 3 unità di scrittura. Nota: l'aggiornamento di una voce dell'indice in questa situazione consuma 2 unità di scrittura, una per eliminare e una per ricreare la voce dell'indice.
- Trova un documento da 1 KiB in base all'ID documento e non aggiornare nulla (nessuna modifica). Consuma: 1 unità di scrittura (i costi di scrittura minimi)
- Esegui una query su tutti i documenti da 1 KiB di una raccolta, che analizza 1000 documenti, e inserisci un nuovo campo da 256 byte senza indici nella raccolta: 1000 unità di lettura e 1000 unità di scrittura.
Eliminazioni
- Elimina un documento da 1 KiB con un indice nella raccolta. Consumo: 2 unità di scrittura
- Elimina un documento da 1 KiB, che non ha indici nella raccolta. Consumo: 1 unità di scrittura
Build di indici
Le creazioni di indici vengono addebitate in base alle voci di indice create o modificate durante l'operazione di creazione. Questi costi vengono addebitati ogni volta che viene aggiunta o rimossa una definizione dell'indice. Le voci dell'indice vengono fatturate in modo identico alle scritture, con un addebito di 1 unità di scrittura per 1 KiB.
- Crea un nuovo indice per una raccolta contenente 500 documenti, le voci dell'indice create sono di 1 KiB ciascuna. Consuma 500 unità di scrittura.
- Elimina un indice esistente per una raccolta contenente 500 documenti. Le voci dell'indice eliminate sono di 1 KiB ciascuna. Consuma 500 unità di scrittura.