È noto che le risorse sono molto limitate negli ambienti di produzione e che è vero che ora ci sono server dieci volte più potenti di quelli che esistevano 5 anni fa, tuttavia, poiché la potenza di questi computer è aumentata, è aumentata anche la query di dati.
A seconda del tempo che impiega una query per l'esecuzione, possiamo dire se è critica o meno, tuttavia, anche se non è critica c'è sempre un piccolo margine di miglioramento, con questo risparmieremo secondi di esecuzione che al fine giornata si trasformano in minuti, il che ci dà la possibilità di migliorare l'esperienza dell'utente.
RequisitiPer eseguire questo tutorial abbiamo bisogno di un'installazione funzionale di MongoDB con autorizzazioni sufficienti in modo da poter lavorare nella console di comando.
Abbiamo anche bisogno di un set di dati o documenti Per riempire la nostra collezione, nei tutorial passati abbiamo offerto un set di dati iniziale, tuttavia per chi non ce l'ha può usare questo:
db.guiamongo.insert ({"nome": "Maria", "età": "25", "genere": "Femmina", "paese": "Colombia"}); db.guiamongo.insert ({"nome ":" Pedro "," età ":" 32 "," genere ":" Maschio "," paese ":" Ecuador "}); db.guiamongo.insert ({" nome ":" Ramon "," età " : "18", "genere": "Maschio", "paese": "Honduras"}); db.guiamongo.insert ({"nome": "Giovanni", "età": "22", "genere": "Maschio", "paese": "Argentina"}); db.guiamongo.insert ({"nome": "Rosa", "età": "45", "genere": "Femmina", "paese": " Cile "," lingue: [" Esp "," Ing "," Fra "]});Con questo avremo abbastanza per un piccolo inizio e quindi otterremo risultati dagli esercizi che presenteremo di seguito.
1. Indicizzazione MongoDB
L'indicizzazione o l'utilizzo degli indici è un concetto condiviso in MongoDB con il Banche dati relazionale, cioè se abbiamo una nozione di questo concetto, possiamo capire come funziona in MongoDB in poco tempo, dobbiamo semplicemente attenerci alla sintassi particolare.
Lavorare con gli indiciSe siamo estranei al concetto, va notato che lavorare con indici non è altro che specificare al Banca dati quali campi dovresti usare in memoria per rendere più efficiente la tua ricerca, ad esempio se stiamo interrogando una grande raccolta di documenti per un campo chiamato Nome, l'ideale sarebbe indicizzare questo campo in modo che il motore sappia che deve essere guidato direttamente da quel campo, così facendo le query che utilizzano quel campo iniziano ad essere più veloci.
Per creare un indice su MongoDB quello che dovremmo fare è usare la funzione garantireIndice() e come parametro passa un documento JSON indicando i campi o le proprietà del nostro documento a cui dobbiamo conformare detto indice. Diamo un'occhiata a un piccolo esempio di questo.
Supponiamo di avere una collezione chiamata guiamongo e facciamo una ricerca per un campo chiamato nome, il codice sarebbe questo:
db.guiamongo.find ({“nome”: “Nome”})Questa è una query normale che non ha nulla di particolare, l'unico problema è che se ci sono milioni di documenti sarebbe molto lenta, quindi per creare un indice dobbiamo solo specificarlo come segue:
db.guiamongo.ensureIndex ({“nome”: 1})Con questo abbiamo già creato l'indice per la query, se lo eseguiamo di nuovo sarà molto più veloce. Vediamo come appare sulla nostra console MongoDB:
Possiamo notare che una volta creato l'indice, MongoDB Ci restituisce un documento dove indica lo stato della nostra funzione e quanti indici avevamo prima e dopo l'applicazione, mostrandoci inoltre il campo va bene a 1 che indica che l'esecuzione è andata a buon fine.
La query precedente è abbastanza utile per un singolo campo, ma se facciamo quanto segue:
db.guiamongo.find ({"nome": "Nome", "età": {"$ gt": "20"}}). sort ({"età": - 1});Ci rendiamo conto che in questo caso il indice Il precedente non funziona più, questo perché la query utilizza una diversa combinazione di campi per la ricerca, ecco perché dobbiamo creare un nuovo indice utilizzando quanto appreso in precedenza, vediamo come sarebbe:
db.guiamongo.ensureIndex ("nome": 1, "età": 1);Ora se controlliamo il nostro database come segue, vedremo che abbiamo un nuovo indice nella raccolta:
2. Svantaggio nell'uso degli indici
Nonostante i grandi vantaggi che l'uso e il lavoro con indiciQuesti non sono sempre utili, ecco perché dobbiamo analizzare a fondo prima di implementare questa funzione nel nostro database.
Il più grande svantaggioIl grande svantaggio nell'uso degli indici è che il motore deve incorporare i nuovi dati che inseriamo nella tabella o lista di indici, per questo ogni volta che viene fatta una funzione inserire () verrà creato un numero di processi adiacenti che possono aumentare l'utilizzo del disco e dell'elaborazione.
Un altro svantaggio è che abbiamo un massimo di 64 indici per collezione, Ecco perché dobbiamo lavorare con il minor numero possibile di essi nel nostro Database, assicurando così che solo ciò che è strettamente necessario sia ciò che viene utilizzato.
3. Come sapere quando usare un indice
Poiché conosciamo le limitazioni e gli svantaggi dell'uso degli indici, un buon esercizio per sapere se dobbiamo crearli o meno è prendere questa serie di domande, se possiamo rispondere a tutte abbiamo le caratteristiche necessarie per creare un indice, su se invece non possiamo dovremo analizzare la situazione da un altro punto di vista, diamo un'occhiata alle domande:
Che query stiamo facendo?Dobbiamo fare un'analisi della situazione e vedere cosa succede nella nostra collezione, con questo scopriremo se abbiamo bisogno di indici, o se no, forse dobbiamo eliminarne alcuni.
Qual è il corretto orientamento degli indici?Abbiamo bisogno di sapere come stiamo ordinando i dati negli indici, se è alfabetico o numerico, crescente o decrescente, questo influenza direttamente la velocità di indicizzazione.
Come scalerà?Dobbiamo pensare alla crescita dei nostri dati, poiché in questo modo sapremo se ciò che funziona oggi domani con 10 o 100 volte più dati funzionerà correttamente.
Ovviamente questa è solo una guida, ci sono casi speciali e molto particolari di ogni amministratore di applicazioni in cui devi applicare i tuoi criteri su questo tipo di tutorial, tuttavia è una buona guida per iniziarci nel mondo dell'ottimizzazione dei dati.
4. Indici all'interno di documenti incorporati
La struttura dei documenti che possiamo gestire in MongoDB si presta alla memorizzazione di dati complessi, non tutti i dati di cui abbiamo bisogno saranno allo stesso livello, ecco perché la necessità di creare indici di documenti incorporati. Con questi indici MongoDB Sarai in grado di indicizzare dati che hanno strutture più complesse.
Per ottenere un risultato utilizzeremo quello che viene chiamato il notazione punto, che non è altro che accedere ai campi dei documenti incorporati come se fossero proprietà di un oggetto attraverso un punto. Nell'esempio seguente creeremo un indice di queste caratteristiche, vediamo inizialmente la sintassi.
Per prima cosa inseriremo un record con un documento incorporato nel nostro set di dati di test:
db.guiamongo.insert ({"nome": "Juan", "età": "40", "genere": "Maschio", "paese": "Brasile", "qualificazioni": {"storia": "85 "," letteratura ":" 90 "," corso ":" 3 "}});Quindi eseguiremo una semplice query in questo caso per la proprietà del corso:
db.guiamongo.find ({“grades.course”: ”3”});Ora se vogliamo creare un indice dobbiamo semplicemente fare quanto segue:
db.guiamongo.ensureIndex ({“grades.course”: 1});Con questo abbiamo già creato un indice di un documento incorporato all'interno di un altro in una raccolta in MongoDB. Se osserviamo questo è ciò che avremmo dovuto ottenere in console:
5. Usa spiegare ()
Poiché sappiamo creare indici e abbiamo un'idea di quando e perché dovremmo crearli, tuttavia, non abbiamo ancora visto uno strumento molto importante, uno che ci permetta di saperne un po' di più e di andare oltre le nostre domande; ci riferiamo a spiegare () questa funzione ci permette di conoscere l'ora e gli indici utilizzati nelle query.
Cosa ci dice?Ritorno di spiegare () È un documento dove indicherà il cursore che usa per la ricerca, quindi indica i limiti dell'indice, abbiamo anche un campo che ha il nome millis e indicherà la quantità di tempo in millisecondi che una query impiega per eseguire, quest'ultima è molto importante per comprendere le prestazioni del nostro Banca dati.
Vediamo come possiamo applicare questa funzione a una query, useremo quella che abbiamo fatto nel nostro esempio precedente:
db.guiamongo.find ({“grades.course”: ”3”}).spiegare ();Dopo la sua applicazione, dovrebbe restituire qualcosa di simile al seguente:
Notiamo come i dati ci vengono offerti per poter analizzare la query, in cursore vediamo che abbiamo usato l'indice che abbiamo creato nell'esercizio precedente chiamato gradi.corso_1, questo ci ha aiutato ad arrivarci 0 millisecondi tempo di esecuzione, che è il tempo ottimale per le nostre query, ovviamente poiché questo è un ambiente di test non avremo qualcosa oltre, ma se possiamo fare questo esercizio su server con milioni di record, realizzeremo la potenza degli indici.
Con questo abbiamo finito questo tutorial, abbiamo creato indici nelle nostre raccolte di documenti e inoltre abbiamo esplorato alcuni strumenti che ci aiutano a ottenere informazioni chiave per migliorare e soprattutto aumentare le prestazioni del nostro Banca dati.