Rad s indeksima u MongoDB -u

Dobro je poznato da su resursi vrlo ograničeni u proizvodnim okruženjima i da je točno da sada postoje poslužitelji deset puta snažniji od onih koji su postojali prije 5 godina, međutim, kako se snaga ovih računala povećavala, tako se povećavao i upit podaci.

Ovisno o vremenu koje je potrebno da se izvrši upit, možemo reći je li kritično ili ne, međutim, čak i ako nije kritično, uvijek postoji mala margina za poboljšanje, time ćemo uštedjeti sekunde izvršenja koje na kraj dana pretvaraju se u minute, što nam daje mogućnost poboljšanja korisničkog iskustva.

ZahtjeviZa izvođenje ovog vodiča potrebna nam je funkcionalna instalacija MongoDB s dovoljnim dopuštenjima kako bismo mogli raditi u naredbenoj konzoli.

Također nam treba a skupu podataka ili dokumentima Da bismo popunili našu zbirku, u prošlim smo vodičima nudili početni skup podataka, međutim za one koji ga nemaju mogu koristiti ovo:

 db.guiamongo.insert ({"name": "Maria", "age": "25", "gender": "Female", "country": "Colombia"}); db.guiamongo.insert ({"name ":" Pedro "," dob ":" 32 "," spol ":" Muško "," država ":" Ekvador "}); db.guiamongo.insert ({" name ":" Ramon "," age " : "18", "gender": "Male", "country": "Honduras"}); db.guiamongo.insert ({"name": "John", "age": "22", "gender": "Muško", "država": "Argentina"}); db.guiamongo.insert ({"ime": "Rosa", "dob": "45", "spol": "Žensko", "država": " Čile "," jezici ": [" Esp "," Ing "," Fra "]});
Time ćemo imati dovoljno za mali početak i tako dobiti rezultate iz vježbi koje ćemo predstaviti u nastavku.

1. Indeksiranje MongoDB -a


Indeksiranje ili rad s indeksima koncept je zajednički MongoDB sa Baze podataka relacijski, odnosno, ako imamo pojam o ovom konceptu, možemo razumjeti kako on funkcionira MongoDB uskoro ćemo se jednostavno morati držati određene sintakse.

Rad s indeksimaAko smo koncept stranci, treba napomenuti da rad s indeksa nije ništa drugo do navođenje Baza podataka koja polja trebate koristiti u memoriji kako bi vaše pretraživanje bilo učinkovitije, na primjer ako tražimo veliku zbirku dokumenata za polje tzv. Ime, idealno bi bilo indeksirati ovo polje kako bi motor znao da ga treba voditi izravno tim poljem, pa bi upiti koji koriste to polje počeli biti brži.

Za stvaranje indeksa na MongoDB ono što bismo trebali učiniti je koristiti funkciju osiguratiIndex () i kao parametar proslijedite dokument JSON označavajući polja ili svojstva našeg dokumenta s kojima moramo uskladiti navedeni indeks. Pogledajmo mali primjer ovoga.

Pretpostavimo da imamo zbirku tzv guiamongo i pretražujemo polje pod imenom, kod bi bio sljedeći:

 db.guiamongo.find ({“name”: “Name”})
Ovo je uobičajen upit koji nema ništa posebno, jedini problem je što bi, ako postoje milijuni dokumenata, bio vrlo spor, pa ga za stvaranje indeksa moramo samo navesti na sljedeći način:
 db.guiamongo.ensureIndex ({“ime”: 1})
Ovim smo već stvorili indeks za upit, ako ga ponovno izvedemo bit će mnogo brže. Pogledajmo kako ovo izgleda na našoj konzoli MongoDB:

Možemo primijetiti da nakon što stvorimo indeks, MongoDB Vraća nam dokument u kojem je naznačeno stanje naše funkcije i koliko smo indeksa imali prije i nakon aplikacije, a dodatno nam pokazuje polje u redu na 1 što znači da je izvršenje uspješno.

Prethodni upit je vrlo koristan za jedno polje, ali ako učinimo sljedeće:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Shvaćamo da je u ovom slučaju indeks Prethodni više ne radi, to je zato što upit koristi drugu kombinaciju polja za pretraživanje, zato moramo napraviti novi indeks koristeći ono što smo prethodno naučili, da vidimo kako bi to bilo:
 db.guiamongo.ensureIndex ("ime": 1, "dob": 1);
Ako sada provjerimo našu bazu podataka, vidjet ćemo da imamo novi indeks u zbirci:

2. Nedostatak u korištenju indeksa


Unatoč velikim prednostima s kojima se koriste i rade indeksaTo nije uvijek korisno, zato moramo temeljito analizirati prije implementacije ove značajke u našu bazu podataka.

Najveći nedostatakThe veliki nedostatak u korištenju indeksa je da motor mora uključiti nove podatke koje umetnemo u tablicu ili popis indeksa, iz tog razloga svaki put kada se izvrši funkcija umetnuti () bit će stvoreni broj susjednih procesa koji mogu povećati upotrebu diska i obrade.

Još jedan nedostatak je što imamo maksimalno 64 indeksa po zbirci, Zato moramo raditi s najmanjim mogućim brojem njih u našoj bazi podataka, osiguravajući tako da se koristi samo ono što je strogo potrebno.

3. Kako znati kada koristiti indeks


Budući da znamo ograničenja i nedostatke korištenja indeksa, dobra je vježba da znamo trebamo li ih stvoriti ili ne jest uzeti ovaj niz pitanja, možemo li na njih odgovoriti sve imamo potrebne karakteristike za stvaranje indeksa, na s druge strane, ako ne možemo, morat ćemo analizirati situaciju s drugog gledišta, pogledajmo pitanja:

Koje upite radimo?Moramo provesti analizu situacije i vidjeti što se događa u našoj zbirci. Time ćemo saznati trebaju li nam indeksi, ili ako ne, možda moramo neke eliminirati.

Koja je ispravna orijentacija indeksa?Moramo znati kako uređujemo podatke u indeksima, ako su abecedno ili brojčano, uzlazno ili silazno, to izravno utječe na brzinu indeksiranja.

Kako će se skala mjeriti?Moramo razmišljati o rastu naših podataka jer ćemo na ovaj način znati hoće li ono što danas funkcionira sutra s 10 ili 100 puta više podataka ispravno funkcionirati.

Naravno, ovo je samo vodič, postoje posebni i vrlo posebni slučajevi svakog administratora aplikacije u kojima morate primijeniti svoje kriterije na ovu vrstu vodiča, međutim to je dobar vodič za početak u svijetu optimizacije podataka.

4. Indeksi unutar ugrađenih dokumenata


Struktura dokumenata s kojima možemo rukovati MongoDB podložan je složenoj pohrani podataka, neće svi potrebni podaci biti na istoj razini, stoga je potreba za stvaranjem indeksi ugrađenih dokumenata. S ovim indeksima MongoDB Moći ćete indeksirati podatke koji imaju složeniju strukturu.

Za postizanje rezultata koristit ćemo ono što se naziva točkasta oznaka, što nije ništa drugo nego pristup poljima ugrađenih dokumenata kao da su svojstva objekta kroz točku. U sljedećem primjeru stvorit ćemo indeks ovih karakteristika, pogledajmo na početku sintaksu.

Prvo ćemo u naš testni skup podataka umetnuti zapis s ugrađenim dokumentom:

 db.guiamongo.insert ({"name": "Juan", "age": "40", "gender": "Male", "country": "Brazil", "kvalifikacije": {"history": "85 "," književnost ":" 90 "," tečaj ":" 3 "}});
Zatim ćemo napraviti jednostavan upit u ovom slučaju za svojstvo tečaja:
 db.guiamongo.find ({“ocjene.kurs”: ”3”});
Sada, ako želimo stvoriti indeks, jednostavno moramo učiniti sljedeće:
 db.guiamongo.ensureIndex ({“ocjene.kurs”: 1});
Time smo već stvorili indeks dokumenta ugrađenog u drugi u zbirci u MongoDB. Ako pogledamo ovo, ono što smo trebali dobiti u konzoli:

5. Koristite objašnjenje ()


Međutim, budući da znamo stvarati indekse i imamo ideju o tome kada i zašto bismo ih trebali stvarati, još nismo vidjeli alat koji je jako važan, koji nam omogućuje da saznamo nešto više i idemo dalje u naši upiti; na koje se pozivamo objasni () ova nam funkcija omogućuje da znamo vrijeme i indekse korištene u upitima.

Što nam to govori?Povratak objasni () To je dokument u kojem će naznačiti kursor koji koristi za pretraživanje, zatim označava granice indeksa, imamo i polje koje ima naziv millis i pokazat će količinu vremena u milli-sekundama koje je potrebno izvršiti upitu, potonje je vrlo važno za razumijevanje performansi našeg Baza podataka.

Pogledajmo kako možemo primijeniti ovu funkciju na upit, upotrijebit ćemo onu koju smo radili u prethodnom primjeru:

 db.guiamongo.find ({“ocjene.kurs”: ”3”}). objasniti ();
Nakon primjene trebao bi vratiti nešto poput sljedećeg:

Primjećujemo kako nam se podaci nude kako bismo mogli analizirati upit, u pokazivač vidimo da smo koristili indeks koji smo stvorili u prethodnoj vježbi tzv ocjene.kurs_1, ovo nam je pomoglo da tamo stignemo 0 mili-sekundi vrijeme izvođenja, što je optimalno vrijeme za naše upite, očito budući da je ovo testno okruženje, nećemo imati nešto više od toga, ali ako ovu vježbu možemo izvesti na poslužiteljima s milijunima zapisa, uvidjet ćemo moć indeksa.

Ovim smo završili ovaj vodič, stvorili smo indeksa u našim zbirkama dokumenata i dodatno smo istražili neke alate koji nam pomažu u prikupljanju ključnih informacija za poboljšanje, a prije svega povećanje performansi naših Baza podataka.

wave wave wave wave wave