Indicizzazione base
MongoDB fornisce delle veloci performance di interrogazione per mezzo dell' uso degli indici - una struttura dati che raccoglie informazioni sui valori dei "campi indice" specificati nei documenti di una collection. Questa struttura dati è usata dal query optimizer di Mongo per attraversare velocemente e ordinare i documenti in una collection. Descrivendoli in maniera formale, questi indici sono implementati come indici "B-Tree".
In mongo con la Shell interattiva, possiamo creare un indice chiamando la funzione ensureIndex(), e fornendo un documento che specifica una o più chiavi da indicizzare. Facendo riferimento ai nostri esempi da Mongo Usage Basics, noi possiamo indicizzare il campo 'j' come segue:
db.things.ensureIndex({j:1});
La funzione ensureIndex() crea solamente l'indice se esso non esiste ancora.
Una volta che una collection è indicizzata su una chiave, l'accesso random con query che contengono la chiave specificata sono velocizzate. Senza l'indice, MongoDB deve andare attraverso ciascun documento e controllare il valore specificato dalla chiave nella query:
db.things.find({j : 2}); db.things.find({x : 3});
Chiavi composte
In aggiunta alla chiave singola e indicizzazione base, MongoDB supporta indici "composti" da più chiavi. Alla stessa maniera degli indici base, usiamo la funzione ensureIndex() in mongo con la Shell interattiva per creare l'indice, ma invece di specificare solo una chiave, possiamo specificare un set:
db.things.ensureIndex({j:1, name:1});
Documenti come chiavi
MongoDB indicizza chiavi di qualsiasi tipo, inclusi i documenti:
db.factories.save( { name: "xyz", metro: { city: "New York", state: "NY" } } );
db.factories.ensureIndex( { metro : 1 } );
Non si può ancora specificare un criterio per l'ordinamento di un oggetto chiave; così, in questo momento gli oggetti chiave sono utili per il recupero con ordinamento casuale, meno per il recupero con accesso ordinato.(Per quest'ultimo, considera l'uso di un indice a chiave composta.)
Performance di un indice
Gli indici permettono il recupero per mezzo di una chiave, inclusi recuperi ordinati sequenzialmente, molto velocemente. Aggiornamenti per chiave sono veloci il tempo che MongoDB impiega a trovare il documento da aggiornare.
Comunque tieni a mente che ciascun indice aggiunge una certa quantità di overhead per gli inserimenti e le cancellazioni. In aggiunta per scrivere dati alla collection base, le chiavi devono essere aggiunte agli indici b-tree. Così, gli indici sono il meglio per collection dove il numero di letture è molto più grande del numero di scritture. Per collection che sono write-intensive, gli indici in alcuni casi sono controproducenti. La maggior parte delle collection sono read-intensive; così per la maggior parte delle situazioni, gli indici sono una buona cosa.
Note aggiuntive sugli indici
- Quando indicizzati, i documenti che non hanno il campo specificato come indice non sono inclusi nell' indice.
- Duplicati e chiavi univoche sono supportate. La maggior parte dei driver prende un parametro boolean extra per specificare l'unicità.
- Gli indici di MongoDB (e il test di uguaglianza tra stringhe in genere) sono case sensitive.
- Quando si aggiorna un oggetto con{{ save()}}, se l'oggetto è nella precedente area di allocazione, solo quelli i cui indici vengono cambiati dalle chiavi vengono aggiornati. Questo migliora le performance. Nota che se l'oggetto cresce e deve essere aggiornato, tutti gli indici devono essere aggiornati e diminuisce la velocità
Usare sort() senza un indice
La funzione sort() può essere usata per restituire dati in ordine senza un indice se il set di dati da restituire è piccolo (meno di quattro megabytes). Per questi casi è meglio isare limit() e sort() insieme.
|
IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.
These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group. blog comments powered by Disqus