Comprensione dell’indicizzazione in MongoDB

TLDR: L’indicizzazione è solo un modo di raggruppare i documenti, dividendo le collezioni in gruppi per accelerare le prestazioni

Panoramica

Gli indici aumentano le prestazioni delle query e sono usati per le ricerche

L’idea di indicizzazione in MongoDB è simile all’indice di qualsiasi libro, aumentano la velocità di trovare una pagina. L’indice in MongoDB aumenta la velocità di trovare i documenti

Come funzionano gli indici?

Prima di tutto, cerchiamo di capire come si dichiara l’indice in MongoDB

collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index

Qui il campo è il “fieldName” che sarà indicizzato. “Value” può essere -1 o 1 o “text”.

Definisce il tipo di indice, 1 o -1 aumentano le prestazioni della query find() mentre “text” è usato per la ricerca.

1 e -1 danno l’ordine dell’indice. Ascendente = -1 & Discendente =1

Ora, come funzionano gli indici sotto il cofano?

Immaginate una collezione di utenti, ogni documento contiene varie informazioni, una delle quali è il punteggio.

Diciamo che vogliamo che tutti gli utenti ottengano 23 punti.

Quando non esiste un indice, MongoDB passa attraverso ogni documento per trovare il documento ricercato, questo è chiamato Collection scan, MongoDB ha un’abbreviazione per questo COLLSCAN (Questo è chiamato Table scan nei database relazionali)

Come possiamo ottimizzare questo?

Per ottimizzare questo possiamo creare una tabella con una colonna per il punteggio e un’altra colonna per i riferimenti che conterrà gli ID dei documenti con quel particolare punteggio. Ora abbiamo solo bisogno di scansionare quella tabella piuttosto che scansionare l’intero database. Questo è molto più veloce. Questo è esattamente ciò che è un indice.

Gli indici aiutano MongoDB a restringere il set di dati che dovrà scansionare. Questo si chiama Index Scan, MongoDB ha un’abbreviazione anche per questo IXNSCAN

Ecco una rappresentazione visiva di un indice di punteggio e la sua mappatura.

Il miglioramento delle prestazioni dell’indice è visibile solo quando il numero di documenti supera i 100K circa.

Puoi confrontarlo tu stesso confrontando due query una con un campo indicizzato e una senza indice

db.<collection name>.find(query).explain()

Sarà restituito un oggetto

oggetto.winingPlan.stage dirà il tipo di scansione COLLSCAN o IXNSCAN

ma non vi dirà il tempo impiegato nell’esecuzione

utilizzate il metodo explain(‘executionStat’) prima del metodo di interrogazione come find

db.<collection name>explain('executionStat').find(query)

executionTimeMillis vi dirà il tempo impiegato nell’esecuzione

Svantaggi dell’indice

Gli indici non sono liberi, Gli indici costano spazio. Gli indici possono aumentare la velocità di lettura ma ogni volta che qualcosa viene scritto, l’indice deve essere aggiornato per risolvere questo usiamo l’albero B- facciamo alcuni calcoli prima dell’inserimento in modo che sia più veloce.

B-Tree

Gli indici non sono una tabella di gruppi, concettualmente è in realtà un B-Tree (Binary Tree) non solo MongoDB, anche il database SQL usa B Tree per l’indicizzazione

questo video spiega meglio B Tree

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.