Darbas su indeksais MongoDB

Gerai žinoma, kad gamybos aplinkoje ištekliai yra labai riboti ir kad tiesa, kad dabar serveriai yra dešimt kartų galingesni už tuos, kurie egzistavo prieš 5 metus, tačiau, padidėjus šių kompiuterių galiai, padidėjo ir užklausa duomenis.

Priklausomai nuo to, kiek laiko užklausa vykdoma, galime pasakyti, ar ji yra kritinė, ar ne, tačiau, net jei ji nėra kritinė, visada yra nedidelė galimybė tobulėti, o tai sutaupys kelias vykdymo sekundes. dienos pabaigoje yra paverčiamos minutėmis, o tai suteikia mums galimybę pagerinti vartotojo patirtį.

ReikalavimaiNorėdami atlikti šią pamoką, mums reikia funkcinio diegimo MongoDB turėdami pakankamai leidimų, kad galėtume dirbti komandų pulte.

Mums taip pat reikia a duomenų rinkinį ar dokumentus Norėdami užpildyti savo kolekciją, ankstesnėse pamokose mes siūlėme pradinį duomenų rinkinį, tačiau tiems, kurie jo neturi, jie gali tai naudoti:

 db.guiamongo.insert ({"name": "Maria", "age": "25", "gender": "Female", "country": "Colombia"}); db.guiamongo.insert ({"name ":" Pedro "," amžius ":" 32 "," lytis ":" Vyras "," šalis ":" Ekvadoras "}); db.guiamongo.insert ({" name ":" Ramon "," age " : "18", "gender": "Male", "country": "Honduras"}); db.guiamongo.insert ({"name": "John", "age": "22", "gender": "Vyras", "šalis": "Argentina"}); db.guiamongo.insert ({"name": "Rosa", "age": "45", "gender": "Female", "country": " Čilė "," kalbos ": [" Esp "," Ing "," Fra "]});
Tokiu būdu mums užteks nedidelio starto ir taip gausime rezultatų iš pratimų, kuriuos pateiksime žemiau.

1. „MongoDB“ indeksavimas


Indeksavimas arba darbas su indeksais yra bendrai naudojama sąvoka MongoDB su Duomenų bazės santykinis, tai yra, jei turime sąvoką apie šią sąvoką, galime suprasti, kaip ji veikia MongoDB netrukus mums tiesiog reikia laikytis tam tikros sintaksės.

Darbas su indeksaisJei mums ši koncepcija svetima, reikėtų pažymėti, kad dirbant su indeksus yra ne kas kita, kaip nurodymas Duomenų bazė kokius laukus turėtumėte naudoti atmintyje, kad jūsų paieška būtų efektyvesnė, pavyzdžiui, jei ieškome didelės dokumentų kolekcijos laukui, vadinamam vardas, idealus būtų indeksuoti šį lauką, kad variklis žinotų, jog jis turėtų vadovautis tiesiogiai tuo lauku, todėl užklausos, kuriose naudojamas tas laukas, tampa greitesnės.

Norėdami sukurti indeksą MongoDB ką turėtume padaryti, tai naudoti funkciją sureIndex () ir kaip parametras perduoti dokumentą JSONAS nurodant mūsų dokumento laukus ar ypatybes, su kuriomis turime atitikti minėtą indeksą. Pažvelkime į nedidelį to pavyzdį.

Tarkime, kad turime kolekciją pavadinimu Guiamongo ir mes ieškome lauko pavadinimu pavadinimas, kodas būtų toks:

 db.guiamongo.find ({„name“: „Name“})
Tai yra įprasta užklausa, kurioje nėra nieko konkretaus, vienintelė problema yra ta, kad jei yra milijonai dokumentų, tai būtų labai lėta, todėl norėdami sukurti indeksą turime jį nurodyti tik taip:
 db.guiamongo.ensureIndex ({„vardas“: 1})
Su tuo mes jau sukūrėme užklausos indeksą, jei jį vykdysime dar kartą, jis bus daug greitesnis. Pažiūrėkime, kaip tai atrodo mūsų konsolėje MongoDB:

Galime pastebėti, kad sukūrę indeksą, MongoDB Jis grąžina mums dokumentą, kuriame nurodo mūsų funkcijos būseną ir kiek indeksų turėjome prieš ir po programos, papildomai parodydamas lauką Gerai 1, o tai rodo, kad vykdymas buvo sėkmingas.

Ankstesnė užklausa yra gana naudinga vienam laukui, bet jei atliksime šiuos veiksmus:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Suprantame, kad šiuo atveju indeksas Ankstesnis nebeveikia, nes užklausoje paieškai naudojamas kitoks laukų derinys, todėl turime sukurti naują indeksą, naudodamiesi tuo, ką sužinojome anksčiau, pažiūrėkime, kaip tai būtų:
 db.guiamongo.ensureIndex ("vardas": 1, "amžius": 1);
Dabar, jei taip patikrinsime savo duomenų bazę, pamatysime, kad kolekcijoje yra naujas indeksas:

2. Trūkumai naudojant indeksus


Nepaisant didelių privalumų, kuriuos naudoja ir dirba indeksusTai ne visada yra naudinga, todėl prieš diegdami šią funkciją savo duomenų bazėje turime nuodugniai išanalizuoti.

Didžiausias trūkumasThe didelis trūkumas naudojant indeksus kad variklis turi įtraukti naujus duomenis, kuriuos įterpiame į lentelę ar indeksų sąrašą, dėl šios priežasties kiekvieną kartą, kai atliekama funkcija Įdėti () bus sukurta daugybė gretimų procesų, kurie gali padidinti disko ir apdorojimo naudojimą.

Kitas trūkumas yra tas, kad mes turime daugiausiai 64 indeksai vienoje kolekcijoje, Todėl mes turime dirbti su kuo mažesniu jų kiekiu mūsų duomenų bazėje, taip užtikrindami, kad naudojama tik tai, kas būtina.

3. Kaip žinoti, kada naudoti indeksą


Kadangi žinome indeksų naudojimo apribojimus ir trūkumus, geras pratimas žinoti, ar turėtume juos kurti, ar ne, yra atsakyti į šią klausimų seriją, jei galime į juos atsakyti, turime visas būtinas savybes, kad sukurtume indeksą. kita vertus, jei negalime, turėsime analizuoti situaciją kitu požiūriu, pažvelkime į klausimus:

Kokias užklausas darome?Turime atlikti situacijos analizę ir pamatyti, kas atsitiks mūsų kolekcijoje, ir tai išsiaiškinsime, ar mums reikia indeksų, ar jei ne, galbūt turime juos pašalinti.

Kokia yra teisinga indeksų orientacija?Turime žinoti, kaip tvarkome indeksų duomenis, jei jie yra abėcėlės ar skaitmeniniai, didėjantys ar mažėjantys, tai tiesiogiai įtakoja indeksavimo greitį.

Kaip jis padidės?Turime galvoti apie savo duomenų augimą, nes tokiu būdu žinosime, ar tai, kas šiandien veikia rytoj su 10 ar 100 kartų daugiau duomenų, veiks tinkamai.

Žinoma, tai tik vadovas, yra ypatingų ir labai konkrečių atvejų, kai kiekvienas programų administratorius turi taikyti savo kriterijus tokio tipo vadovėliams, tačiau tai yra geras vadovas, padedantis mums pradėti duomenų optimizavimo pasaulį.

4. Įterptųjų dokumentų indeksai


Dokumentų, kuriuos galime tvarkyti, struktūra MongoDB tinka sudėtingam duomenų saugojimui, ne visi mums reikalingi duomenys bus to paties lygio, todėl reikia sukurti įterptųjų dokumentų rodyklės. Su šiais indeksais MongoDB Galėsite indeksuoti sudėtingesnių struktūrų duomenis.

Norėdami pasiekti rezultatą, naudosime tai, kas vadinama taškų žymėjimas, kas yra ne kas kita, kaip prieiga prie įterptųjų dokumentų laukų, tarsi jie būtų objekto savybės per tašką. Šiame pavyzdyje sukursime šių charakteristikų indeksą, iš pradžių pažiūrėkime sintaksę.

Pirmiausia į bandymų duomenų rinkinį įterpsime įrašą su įterptu dokumentu:

 db.guiamongo.insert ({"vardas": "Juanas", "amžius": "40", "lytis": "vyras", "šalis": "Brazilija", "kvalifikacija": {"istorija": "85" "," literatūra ":" 90 "," kursas ":" 3 "}});
Tada šiuo atveju atliksime paprastą kurso ypatybės užklausą:
 db.guiamongo.find ({„pažymiai.kursas“: „3“});
Dabar, jei norime sukurti indeksą, tiesiog turime atlikti šiuos veiksmus:
 db.guiamongo.ensureIndex ({„pažymiai.kursas“: 1});
Tuo mes jau sukūrėme dokumento, įterpto į kitą kolekciją, indeksą MongoDB. Jei pažvelgsime į tai, ką turėjome gauti konsolėje:

5. Naudokite paaiškinimą ()


Kadangi žinome, kaip kurti indeksus, ir turime supratimą, kada ir kodėl turėtume juos kurti, tačiau dar nematėme labai svarbaus įrankio, leidžiančio mums sužinoti šiek tiek daugiau ir eiti toliau mūsų užklausos; mes nurodome paaiškinti () Ši funkcija leidžia mums žinoti laiką ir užklausose naudojamus indeksus.

Ką tai mums sako?Grįžimas paaiškinti () Tai dokumentas, kuriame bus nurodytas žymeklis, kurį jis naudoja paieškai, tada nurodomos indekso ribos, taip pat turime lauką, pavadintą milis ir tai parodys, kiek laiko milisekundėmis užtrunka užklausos vykdymas, pastarasis yra labai svarbus suprantant mūsų Duomenų bazė.

Pažiūrėkime, kaip galime pritaikyti šią funkciją užklausai, mes naudosime tą, kurią padarėme ankstesniame pavyzdyje:

 db.guiamongo.find ({„pažymiai.kursas“: „3“}). paaiškinti ();
Po jo taikymo jis turėtų grąžinti kažką panašaus:

Atkreipiame dėmesį, kaip mums siūlomi duomenys, kad galėtume analizuoti užklausą žymeklis matome, kad panaudojome indeksą, kurį sukūrėme ankstesniame pratime pažymiai.kursas_1, tai padėjo mums ten patekti 0 milisekundžių vykdymo laikas, kuris yra optimaliausias laikas mūsų užklausoms, aišku, kadangi tai yra bandomoji aplinka, mes neturėsime nieko daugiau, bet jei galėsime atlikti šį pratimą serveriuose, kuriuose yra milijonai įrašų, suprasime indeksų galią.

Tuo mes baigėme šią pamoką, kurią sukūrėme indeksus savo dokumentų rinkiniuose ir papildomai ištyrėme kai kuriuos įrankius, kurie padeda mums gauti pagrindinės informacijos, kad pagerintume ir visų pirma padidintume Duomenų bazė.

wave wave wave wave wave