Darbs ar indeksiem MongoDB

Ir labi zināms, ka ražošanas vidē resursi ir ļoti ierobežoti un ir taisnība, ka tagad serveri ir desmit reizes jaudīgāki nekā tie, kas pastāvēja pirms 5 gadiem, tomēr, palielinoties šo datoru jaudai, palielinājās arī vaicājums dati.

Atkarībā no laika, kas nepieciešams, lai vaicājums tiktu izpildīts, mēs varam teikt, vai tas ir kritisks vai nē, tomēr, pat ja tas nav kritisks, vienmēr ir neliela uzlabojumu rezerve, tādējādi ietaupot izpildes sekundes, kas dienas beigās tiek pārveidotas minūtēs, kas dod mums iespēju uzlabot lietotāju pieredzi.

PrasībasLai veiktu šo apmācību, mums ir nepieciešama funkcionāla instalācija MongoDB ar pietiekamām atļaujām, lai mēs varētu strādāt komandu konsolē.

Mums vajag arī a datu kopa vai dokumenti Lai aizpildītu mūsu kolekciju, iepriekšējās apmācībās mēs piedāvājām sākotnējo datu kopu, taču tiem, kam tās nav, viņi var izmantot šo:

 db.guiamongo.insert ({"nosaukums": "Marija", "vecums": "25", "dzimums": "sieviete", "valsts": "Kolumbija"}); db.guiamongo.insert ({"nosaukums ":" Pedro "," vecums ":" 32 "," dzimums ":" Vīrietis "," valsts ":" Ekvadora "}); db.guiamongo.insert ({" name ":" Ramon "," age " : "18", "dzimums": "Vīrietis", "valsts": "Hondurasa"}); db.guiamongo.insert ({"name": "John", "age": "22", "gender": "Vīrietis", "valsts": "Argentīna"}); db.guiamongo.insert ({"nosaukums": "Rosa", "vecums": "45", "dzimums": "sieviete", "valsts": " Čīle "," valodas ": [" Esp "," Ing "," Fra "]});
Ar to mums pietiks nelielam sākumam un tādējādi iegūsim rezultātus no vingrinājumiem, kurus mēs parādīsim zemāk.

1. MongoDB indeksēšana


Indeksēšana vai darbs ar indeksiem ir kopīgs jēdziens MongoDB Ar Datu bāzes relāciju, tas ir, ja mums ir priekšstats par šo jēdzienu, mēs varam saprast, kā tas darbojas MongoDB pirms neilga laika mums vienkārši jāturas pie konkrētās sintakses.

Darbs ar indeksiemJa mums šī koncepcija ir sveša, jāatzīmē, ka, strādājot ar indeksi ir nekas vairāk kā norādīšana uz Datu bāze kuri lauki jāizmanto atmiņā, lai padarītu meklēšanu efektīvāku, piemēram, ja mēs vaicājam lielai dokumentu kolekcijai laukam ar nosaukumu Vārds, ideāls būtu šo lauku indeksēt tā, lai dzinējs zinātu, ka tas jāvadās tieši pēc šī lauka, to darot, vaicājumi, kas izmanto šo lauku, kļūst ātrāki.

Lai izveidotu indeksu MongoDB mums vajadzētu izmantot šo funkciju sureIndex () un kā parametru nodot dokumentu JSON norādot mūsu dokumenta laukus vai rekvizītus, kuriem mums jāatbilst minētajam indeksam. Apskatīsim nelielu piemēru tam.

Pieņemsim, ka mums ir kolekcija ar nosaukumu guiamongo un mēs meklējam lauku ar nosaukumu nosaukums, kods būtu šāds:

 db.guiamongo.find ({“name”: “Name”})
Šis ir parasts vaicājums, kuram nav nekā īpaša. Vienīgā problēma ir tā, ka, ja ir miljoniem dokumentu, tas būtu ļoti lēns, tāpēc, lai izveidotu indeksu, tas ir jānorāda tikai šādi:
 db.guiamongo.ensureIndex ({“nosaukums”: 1})
Ar to mēs jau esam izveidojuši vaicājuma indeksu, ja mēs to izpildīsim vēlreiz, tas būs daudz ātrāk. Apskatīsim, kā tas izskatās mūsu konsolē MongoDB:

Mēs varam pamanīt, ka, izveidojot indeksu, MongoDB Tas mums atgriež dokumentu, kurā norādīts mūsu funkcijas statuss un to, cik indeksu mums bija pirms un pēc pieteikuma, turklāt parādot mums lauku Labi pie 1, kas norāda, ka izpilde bija veiksmīga.

Iepriekšējais vaicājums ir diezgan noderīgs vienam laukam, bet, ja mēs rīkojamies šādi:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Mēs saprotam, ka šajā gadījumā rādītājs Iepriekšējais vairs nedarbojas, jo vaicājumā meklēšanai tiek izmantota cita lauku kombinācija, tāpēc mums jāizveido jauns indekss, izmantojot iepriekš uzzināto, redzēsim, kā tas būtu:
 db.guiamongo.ensureIndex ("nosaukums": 1, "vecums": 1);
Tagad, ja mēs pārbaudām savu datu bāzi šādi, mēs redzēsim, ka kolekcijā ir jauns indekss:

2. Trūkumi indeksu izmantošanā


Neskatoties uz lielajām priekšrocībām, ko izmanto un strādā indeksiTie ne vienmēr ir izdevīgi, tāpēc pirms šīs funkcijas ieviešanas mūsu datubāzē mums ir rūpīgi jāanalizē.

Lielākais trūkums liels trūkums indeksu izmantošanā dzinējam ir jāiekļauj jaunie dati, kurus mēs ievietojam tabulu vai indeksu sarakstā, šī iemesla dēļ katru reizi, kad tiek veikta funkcija ievietot () tiks izveidoti vairāki blakus procesi, kas var palielināt diska un apstrādes izmantošanu.

Vēl viens trūkums ir tas, ka mums ir maksimums 64 rādītāji katrai kolekcijai, Tāpēc mūsu datu bāzē ir jāstrādā ar pēc iespējas mazāku daudzumu, tādējādi nodrošinot, ka tiek izmantots tikai tas, kas ir absolūti nepieciešams.

3. Kā uzzināt, kad izmantot indeksu


Tā kā mēs zinām indeksu izmantošanas ierobežojumus un trūkumus, labs uzdevums, lai uzzinātu, vai mums tie būtu jāizveido vai nē, ir uzdot šo jautājumu sēriju, ja mēs varam atbildēt uz tiem visiem, mums ir nepieciešamās īpašības indeksa izveidošanai, no otras puses, ja mēs to nevaram, mums būs jāanalizē situācija no cita skatu punkta, apskatīsim jautājumus:

Kādus jautājumus mēs darām?Mums ir jāveic situācijas analīze un jāskatās, kas notiek mūsu kolekcijā, ar to mēs noskaidrosim, vai mums ir nepieciešami indeksi, vai, ja nē, varbūt daži ir jālikvidē.

Kāda ir indeksu pareiza orientācija?Mums jāzina, kā mēs sakārtojam datus indeksos, ja tie ir alfabētiski vai skaitliski, augoši vai dilstoši, tas tieši ietekmē indeksēšanas ātrumu.

Kā tas mērogosies?Mums jādomā par mūsu datu pieaugumu, jo tādā veidā mēs zināsim, vai tas, kas šodien darbojas rīt ar 10 vai 100 reizes vairāk datu, darbosies pareizi.

Protams, tas ir tikai ceļvedis, katram lietojumprogrammas administratoram ir īpaši un ļoti īpaši gadījumi, kad jums ir jāpiemēro savi kritēriji šāda veida apmācībām, tomēr tas ir labs ceļvedis, lai sāktu mūs datu optimizācijas pasaulē.

4. Indeksi iegultos dokumentos


Dokumentu struktūra, ar kuriem mēs varam rīkoties MongoDB ir piemērota sarežģītai datu glabāšanai, ne visi nepieciešamie dati būs vienā līmenī, tāpēc ir nepieciešams izveidot iegulto dokumentu indeksi. Ar šiem indeksiem MongoDB Jūs varēsit indeksēt datus ar sarežģītākām struktūrām.

Lai sasniegtu rezultātu, mēs izmantosim tā saukto punktu pieraksts, kas ir nekas cits kā piekļuve iegulto dokumentu laukiem tā, it kā tie būtu objekta rekvizīti caur punktu. Nākamajā piemērā mēs izveidosim šo īpašību indeksu, sākotnēji apskatīsim sintaksi.

Vispirms mūsu testa datu kopā ievietosim ierakstu ar iegultu dokumentu:

 db.guiamongo.insert ({"nosaukums": "Huans", "vecums": "40", "dzimums": "Vīrietis", "valsts": "Brazīlija", "kvalifikācija": {"vēsture": "85" "," literatūra ":" 90 "," kurss ":" 3 "}});
Tad mēs šajā gadījumā veiksim vienkāršu vaicājumu par kursa īpašumu:
 db.guiamongo.find ({“grade.course”: ”3”});
Tagad, ja mēs vēlamies izveidot indeksu, mums vienkārši jādara šādi:
 db.guiamongo.ensureIndex ({“grade.course”: 1});
Ar to mēs jau esam izveidojuši dokumenta indeksu, kas ir ievietots citā kolekcijā MongoDB. Ja paskatāmies, to mums vajadzēja iegūt konsolē:

5. Izmantojiet skaidrojumu ()


Tā kā mēs zinām, kā izveidot indeksus, un mums ir priekšstats par to, kad un kāpēc mums tie būtu jāizveido, tomēr mēs vēl neesam redzējuši ļoti svarīgu rīku, kas ļautu mums uzzināt nedaudz vairāk un iet tālāk. mūsu jautājumi; mēs atsaucamies paskaidro () šī funkcija ļauj mums uzzināt laiku un vaicājumos izmantotos indeksus.

Ko tas mums stāsta?Atgriešanās paskaidro () Tas ir dokuments, kurā tas norādīs kursoru, ko tas izmanto meklēšanai, tad tas norāda indeksa robežas, mums ir arī lauks ar nosaukumu milis un tas norādīs laiku milisekundēs, kas nepieciešams vaicājuma izpildei, pēdējais ir ļoti svarīgs, lai izprastu mūsu veiktspēju Datu bāze.

Apskatīsim, kā mēs varam piemērot šo funkciju vaicājumam, mēs izmantosim to, ko darījām iepriekšējā piemērā:

 db.guiamongo.find ({“grade.course”: ”3”}). izskaidrot ();
Pēc tā piemērošanas tam jāatgriež kaut kas līdzīgs šim:

Mēs atzīmējam, kā mums tiek piedāvāti dati, lai varētu analizēt vaicājumu kursors mēs redzam, ka esam izmantojuši indeksu, ko izveidojām iepriekšējā uzdevumā ar nosaukumu atzīmes.kurss_1, tas mums palīdzēja tur nokļūt 0 milisekundes izpildes laiks, kas ir optimālais laiks mūsu vaicājumiem, acīmredzot, tā kā šī ir testa vide, mums nebūs nekā cita, bet, ja mēs varēsim veikt šo uzdevumu serveros ar miljoniem ierakstu, mēs sapratīsim indeksu spēku.

Ar to mēs esam pabeiguši šo apmācību, ko esam izveidojuši indeksi savos dokumentu krājumos un papildus esam izpētījuši dažus rīkus, kas palīdz mums iegūt galveno informāciju, lai uzlabotu un galvenokārt uzlabotu mūsu darbību Datu bāze.

wave wave wave wave wave