Esempi di prezzi

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 in base ai 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à Spiega query per comprendere meglio il costo e il rendimento 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.

Gli addebiti 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 in 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), se viene applicata la valutazione della pertinenza e il numero di voci di 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 delinea gli addebiti associati all'esecuzione di query di ricerca full-text per un catalogo di prodotti di e-commerce per un vivaio. Questo esempio presuppone una raccolta di 200.000 schede di prodotto in una raccolta, con ogni documento di scheda di prodotto di 2 KiB e una dimensione dell'indice di ricerca di testo 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, ottenendo 3 documenti.
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

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 agrumi da interno, ottenendo 36 documenti.
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

42 unità di lettura totali

In base a 6 unità per la ricerca full-text e 36 unità aggiuntive per i documenti restituiti.

2,10 $ per milione di query
Cerca fioriere per balconi in cui sono presenti molte corrispondenze di prodotto. Ordina i risultati in base alla pertinenza e limita i risultati di ricerca ai primi 50.
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 unità di lettura totali

In base a 25 unità per la ricerca full-text e 50 unità aggiuntive per i documenti restituiti.

3,75 $ per milione di query

Questi esempi illustrano in che modo diversi pattern di query influiscono sui costi:

  • La query"acqua secca" include una frase ("dry water") e altri termini. Le ricerche di frasi sono più complesse perché 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é la corrispondenza è molto bassa, il costo del recupero dei documenti è basso.
  • La query "al chiuso" "agrumi" "albero" cerca tre termini separati. Anche se leggermente meno complessa per termine rispetto a una ricerca di frasi, richiede comunque la ricerca di più token. Ha un costo di scansione dell'indice di ricerca leggermente inferiore di 6 unità di lettura rispetto all'esempio "acqua secca", ma vengono restituiti 36 documenti, il che aumenta il costo totale.
  • La query fioriera per 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 in base alla pertinenza (.sort({score: {$meta: "textScore"}})) in base a termini che corrispondono a molti documenti. Per determinare i 50 risultati più pertinenti, il motore di query deve trovare tutte le corrispondenze potenziali per "balcone" o "fioriera", calcolare un punteggio di pertinenza per ciascuna e poi ordinarle. Questo processo di assegnazione del punteggio e ordinamento di un numero elevato di candidati all'interno dell'indice richiede molte risorse di calcolo, anche se alla fine vengono recuperati solo 50 documenti. L'ampiezza dei termini combinata con l'overhead del calcolo 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 e dalle condizioni e dall'ordinamento specifici utilizzati, nonché dalle risorse necessarie per analizzare tutti i dati nell'indice geospaziale pertinente.

La seguente tabella delinea 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 d'interesse, con ogni documento del punto d'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 massimo di 10 km, restituendo 10 risultati.
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

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 tra 1000 corrispondenze
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

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 diversi pattern di query influiscono sui costi:

  • Query per raggio di 10 km: questa query esegue la scansione di un'area geografica più piccola. Poiché trova solo 10 corrispondenze in questo raggio di 10 km, il motore di query deve fare meno lavoro per identificare e ordinare questi punti in base alla distanza (come fa implicitamente $near). Ciò comporta un costo di scansione dell'indice inferiore di 6 unità di lettura.
  • Query raggio di 100 km: questa query copre un'area molto più ampia. La query trova 1000 potenziali corrispondenze nel 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 computazionale aggiuntivo di setacciatura e classificazione 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 anche solo 10 documenti.

Letture punti

Esempio di fatturazione per le letture dei punti:

  • Lettura puntuale di un singolo documento da 1 KiB. Consuma: 1 unità di lettura
  • Lettura puntuale di un singolo documento di 4 KiB. Consuma: 1 unità di lettura
  • Lettura puntuale di un singolo documento di 1 MB. Consuma: 256 unità di lettura
  • Lettura puntuale di 100 documenti, 1 KiB ciascuno. Consuma: 100 unità di lettura

Analisi in corso

I seguenti esempi includono scenari che scansionano documenti o voci di indice.

Scansione di documenti

  • Query che analizza 100 documenti, ciascuno di 1 KiB. Consuma: 25 unità di lettura

Scansione degli indici

Il costo della scansione, in termini di byte, è lo stesso indipendentemente dal fatto che si tratti di un documento o di un indice. Tuttavia, le voci di indice sono spesso più piccole in termini di dimensioni. Di conseguenza, spesso possono fornire un modo più conveniente per scansionare i dati.

  • Query che esegue la scansione di 100 voci di indice, ciascuna di 1 KB. Consuma: 25 unità di lettura.
  • Query che esegue la scansione di 100 voci di indice, 128 byte ciascuna. Consuma: 4 unità di lettura.

Dimensione minima del documento o della voce di indice

In alcune 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, viene applicato un costo minimo di 32 byte per elemento scansionato.

  • Conta il numero di documenti in una raccolta. La query esegue la scansione di 1000 elementi nella raccolta. Consuma: 8 unità di lettura.

Combinazione di scansione e letture puntuali

Molte query eseguono una combinazione di scansione e letture puntuali per soddisfare un'operazione.

  • Query che analizza 128 voci di indice, 256 byte ciascuna ed esegue una lettura puntuale di 128 documenti, 4 KiB ciascuno. Consuma: 136 unità di lettura, composte da:
    • 128 unità di lettura per le letture puntuali
    • 8 unità di lettura per le scansioni degli indici

Spiegazione query

Query Explain ti aiuta a capire come il database esegue le query. I dettagli forniti possono aiutarti a ottimizzare le query.

Quando utilizzi Query Explain, vengono applicati i seguenti costi:

  • Query Explain che esegue la query: si applica il costo della query.
  • Query Explain utilizzando l'opzione Solo piano. Consuma: 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 per ID documento, comportano solo il costo delle scritture. Le operazioni di scrittura che richiedono una query per soddisfare l'operazione comporteranno inoltre i costi di lettura associati alla query.

Vedi i seguenti esempi.

Crea

  • Crea un nuovo documento di 10 KiB senza indici. Consuma: 10 unità di scrittura
  • Crea un documento di 1 KiB con una voce di indice di 256 byte nella raccolta. Consuma: 2 unità di scrittura

Aggiornamenti

  • Trova un documento di 10 KB in base all'ID documento e aggiornalo senza indici nella raccolta. Consuma: 10 unità di scrittura
  • Trova un documento di 1 KB in base all'ID documento e aggiorna un campo con una voce di indice di 256 byte. Consuma: 3 unità di scrittura. Nota: l'aggiornamento di una voce di indice in questa situazione utilizza 2 unità di scrittura: una per eliminare e una per ricreare la voce di indice.
  • Trova un documento di 1 KB per 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 KB in una raccolta, che analizza 1000 documenti e inserisci un nuovo campo di 256 byte senza indici nella raccolta: 1000 unità di lettura e 1000 unità di scrittura.

Eliminazioni

  • Elimina un documento di 1 KiB, che ha un indice nella raccolta. Consuma: 2 unità di scrittura
  • Elimina un documento di 1 KB, che non ha indici nella raccolta. Consuma: 1 unità di scrittura

Build di indice

Le build dell'indice vengono addebitate per le voci di indice create o modificate durante l'operazione di build. Questi costi vengono sostenuti ogni volta che viene aggiunta o rimossa una definizione di indice. Le voci di indice vengono fatturate in modo identico alle scritture, con un'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 di indice eliminate sono di 1 KiB ciascuna. Consuma 500 unità di scrittura.