Lucrul cu indexuri în MongoDB

Este bine cunoscut faptul că resursele sunt foarte limitate în mediile de producție și că este adevărat că acum există servere de zece ori mai puternice decât cele care existau acum 5 ani, totuși, deoarece puterea acestor computere a crescut, la fel a crescut și interogarea date.

În funcție de cantitatea de timp necesară pentru a rula o interogare, putem spune dacă este critică sau nu, totuși, chiar dacă nu este critică, există întotdeauna o mică marjă de îmbunătățire, cu aceasta vom economisi câteva secunde de execuție, care la sfârșitul zilei sunt transformate în minute, ceea ce ne oferă posibilitatea de a îmbunătăți experiența utilizatorului.

CerințePentru a realiza acest tutorial avem nevoie de o instalare funcțională a MongoDB cu permisiuni suficiente pentru a putea lucra în consola de comandă.

De asemenea, avem nevoie de un set de date sau documente Pentru a completa colecția noastră, în tutoriale anterioare am oferit un set de date inițial, cu toate acestea, pentru cei care nu o au, pot folosi acest lucru:

 db.guiamongo.insert ({"nume": "Maria", "vârstă": "25", "sex": "Femeie", "țară": "Columbia"}); db.guiamongo.insert ({"nume" ":" Pedro "," age ":" 32 "," gender ":" Male "," country ":" Ecuador "}); db.guiamongo.insert ({" name ":" Ramon "," age " : "18", "gender": "Bărbat", "țară": "Honduras"}); db.guiamongo.insert ({"nume": "Ioan", "vârstă": "22", "sex": „Bărbat”, „țară”: „Argentina”}); db.guiamongo.insert ({„nume”: „Rosa”, „vârstă”: „45”, „sex”: „Femeie”, „țară”: „ Chile "," limbi ": [" Esp "," Ing "," Fra "]});
Cu aceasta vom avea suficient pentru un început mic și astfel vom obține rezultate din exercițiile pe care le vom prezenta mai jos.

1. Indexarea MongoDB


Indexarea sau lucrul cu indexuri este un concept împărtășit MongoDB cu Baze de date relațional, adică, dacă avem o noțiune a acestui concept, putem înțelege cum funcționează MongoDB în scurt timp, trebuie pur și simplu să rămânem la sintaxa particulară.

Lucrul cu indiciiDacă suntem străini de concept, trebuie remarcat faptul că lucrul cu indicii nu este altceva decât să specifici la Bază de date ce câmpuri ar trebui să utilizați în memorie pentru a vă face căutarea mai eficientă, de exemplu dacă interogăm o colecție mare de documente pentru un câmp numit Nume, ideal ar fi să indexați acest câmp astfel încât motorul să știe că ar trebui să fie ghidat direct de acel câmp, făcând acest lucru interogările care folosesc acel câmp încep să fie mai rapide.

Pentru a crea un index pe MongoDB ceea ce ar trebui să facem este să folosim funcția asiguraIndex () și ca parametru treceți un document JSON indicând câmpurile sau proprietățile documentului nostru cu care trebuie să conformăm indexul menționat. Să vedem un mic exemplu în acest sens.

Să presupunem că avem o colecție numită guiamongo și căutăm un câmp numit nume, codul ar fi acesta:

 db.guiamongo.find ({„nume”: „nume”})
Aceasta este o interogare normală care nu are nimic în special, singura problemă este că, dacă există milioane de documente, ar fi foarte lent, deci pentru a crea un index trebuie doar să-l specificăm după cum urmează:
 db.guiamongo.ensureIndex ({„nume”: 1})
Cu aceasta am creat deja indexul pentru interogare, dacă îl executăm din nou, va fi mult mai rapid. Să vedem cum arată acest lucru pe consola noastră MongoDB:

Putem observa că odată ce am creat indexul, MongoDB Ne returnează un document în care indică starea funcției noastre și câte indexuri aveam înainte și după aplicație, arătându-ne în plus câmpul Bine la 1 care indică faptul că execuția a avut succes.

Interogarea anterioară este destul de utilă pentru un singur câmp, dar dacă facem următoarele:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Ne dăm seama că în acest caz index Precedentul nu mai funcționează, acest lucru se datorează faptului că interogarea folosește o combinație diferită de câmpuri pentru căutare, de aceea trebuie să facem un nou index folosind ceea ce am învățat anterior, să vedem cum ar fi:
 db.guiamongo.ensureIndex („nume”: 1, „vârstă”: 1);
Acum, dacă verificăm baza noastră de date după cum urmează, vom vedea că avem un nou index în colecție:

2. Dezavantaj în utilizarea indexurilor


În ciuda marilor avantaje cu care se utilizează și se lucrează indiciiAcestea nu sunt întotdeauna benefice, de aceea trebuie să analizăm temeinic înainte de a implementa această caracteristică în baza noastră de date.

Cel mai mare dezavantaj mare dezavantaj în utilizarea indexurilor este că motorul trebuie să încorporeze noile date pe care le introducem în tabelul sau lista indexurilor, din acest motiv de fiecare dată când se realizează o funcție insert () vor fi create o serie de procese adiacente care pot crește utilizarea discului și a procesării.

Un alt dezavantaj este că avem un maxim de 64 de indici pe colecțieDe aceea trebuie să lucrăm cu cea mai mică cantitate posibilă în baza noastră de date, asigurându-ne astfel că se folosește doar ceea ce este strict necesar.

3. Cum să știți când să utilizați un index


Deoarece cunoaștem restricțiile și dezavantajele utilizării indexurilor, un bun exercițiu pentru a ști dacă ar trebui să le creăm sau nu este să luăm această serie de întrebări, dacă le putem răspunde la toate, avem caracteristicile necesare pentru a crea un index, pe pe de altă parte, dacă nu putem, va trebui să analizăm situația dintr-un alt punct de vedere, să analizăm întrebările:

Ce întrebări facem?Trebuie să realizăm o analiză a situației și să vedem ce se întâmplă în colecția noastră, cu aceasta vom afla dacă avem nevoie de indexuri sau, dacă nu, poate că trebuie să eliminăm unele.

Care este orientarea corectă a indicilor?Trebuie să știm cum ordonăm datele din indici, dacă sunt alfabetice sau numerice, crescătoare sau descendente, acest lucru influențează direct viteza de indexare.

Cum se va scala?Trebuie să ne gândim la creșterea datelor noastre, deoarece astfel vom ști dacă ceea ce funcționează astăzi mâine cu 10 sau 100 de ori mai multe date va funcționa corect.

Desigur, acesta este doar un ghid, există cazuri speciale și foarte particulare ale fiecărui administrator de aplicație în care trebuie să aplicați criteriile dvs. asupra acestui tip de tutoriale, totuși este un ghid bun pentru a ne începe în lumea optimizării datelor.

4. Indici în cadrul documentelor încorporate


Structura documentelor pe care le putem gestiona MongoDB se pretează la stocarea complexă a datelor, nu toate datele de care avem nevoie vor fi la același nivel, de aceea necesitatea de a crea indexuri de documente încorporate. Cu acești indici MongoDB Veți putea indexa date care au structuri mai complexe.

Pentru a obține un rezultat vom folosi ceea ce se numește notație punct, care nu este altceva decât accesarea câmpurilor documentelor încorporate ca și cum ar fi proprietăți ale unui obiect printr-un punct. În exemplul următor vom crea un index al acestor caracteristici, să vedem inițial sintaxa.

Mai întâi vom introduce o înregistrare cu un document încorporat în setul nostru de date de testare:

 db.guiamongo.insert ({"nume": "Juan", "vârstă": "40", "sex": "bărbat", "țară": "Brazilia", "calificări": {"istorie": "85 "," literatura ":" 90 "," curs ":" 3 "}});
Apoi vom face o interogare simplă în acest caz pentru proprietatea cursului:
 db.guiamongo.find ({„grades.course”: ”3”});
Acum, dacă dorim să creăm un index, trebuie pur și simplu să facem următoarele:
 db.guiamongo.ensureIndex ({„grades.course”: 1});
Cu aceasta am creat deja un index al unui document încorporat în altul într-o colecție din MongoDB. Dacă ne uităm la asta ar fi trebuit să obținem în consolă:

5. Folosiți explicați ()


Deoarece știm cum să creăm indexuri și avem o idee despre când și de ce ar trebui să le creăm, totuși, nu am văzut încă un instrument foarte important, unul care să ne permită să știm puțin mai mult și să mergem mai departe în interogările noastre; ne referim la explica () această funcție ne permite să cunoaștem timpul și indexurile utilizate în interogări.

Ce ne spune?Returnarea explica () Este un document în care va indica cursorul pe care îl folosește pentru căutare, apoi indică limitele indexului, avem și un câmp care are numele milis și va indica cantitatea de timp în milisecunde necesară unei interogări pentru a fi executată, aceasta din urmă este foarte importantă atunci când înțelegem performanța Bază de date.

Să vedem cum putem aplica această funcție unei interogări, o vom folosi pe cea pe care am făcut-o în exemplul nostru anterior:

 db.guiamongo.find ({„grades.course”: ”3”}). explica ();
După aplicare, ar trebui să returneze ceva de genul:

Observăm cum ni se oferă date pentru a putea analiza interogarea, în cursor vedem că am folosit indexul pe care l-am creat în exercițiul anterior numit note.curs_1, acest lucru ne-a ajutat să ajungem acolo 0 milisecunde timpul de execuție, care este momentul optim pentru interogările noastre, evident, deoarece acesta este un mediu de testare, nu vom avea ceva dincolo de asta, dar dacă putem face acest exercițiu pe servere cu milioane de înregistrări, vom realiza puterea indexurilor.

Cu aceasta am terminat acest tutorial, am creat indicii în colecțiile noastre de documente și, în plus, am explorat câteva instrumente care ne ajută să obținem informații cheie pentru a îmbunătăți și, mai ales, pentru a spori performanța Bază de date.

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave