Kako poboljšati upite pomoću MongoDB indeksiranja

Kako Poboljsati Upite Pomocu Mongodb Indeksiranja



Poboljšanje brzine upita bitno je za MongoDB i sve druge sustave baza podataka. Izgradnjom struktura podataka koje pomažu MongoDB-u da brže identificira zapise, indeksiranje je moćan pristup ubrzanju i optimiziranju pretraživanja. Indeksi uključuju kopije nekih podataka iz zapisa kako bi upiti bili učinkovitiji. Ovo pojednostavljuje napore uključene u odgovaranje na zahtjeve u MongoDB-u. U ovom vodiču raspravljat ćemo o korištenju indeksa uz pomoć različitih tipova indeksiranja.

Stvori zbirku

Prije korištenja indeksa, moramo stvoriti novu kolekciju u našem MongoDB-u. Već smo izradili jedan i umetnuli 10 dokumenata pod nazivom 'Dummy'. Funkcija find() MongoDB prikazuje sve zapise iz kolekcije 'Dummy' na donjem zaslonu ljuske MongoDB.

test> db.Dummy.find()







Odaberite vrstu indeksiranja

Prije uspostavljanja indeksa, prvo morate odrediti stupce koji će se obično koristiti u kriterijima upita. Indeksi imaju dobre rezultate u stupcima koji se često filtriraju, sortiraju ili pretražuju. Polja s velikom kardinalnošću (mnogo različitih vrijednosti) često su izvrsne opcije indeksiranja. Evo nekoliko primjera koda za različite vrste indeksa.



Primjer 01: Indeks jednog polja

To je vjerojatno najosnovniji tip indeksa, koji indeksira jedan stupac kako bi se povećala brzina upita na tom stupcu. Ova vrsta indeksa koristi se za upite u kojima koristite jedno ključno polje za upite o zapisima zbirke. Pretpostavimo da koristite polje 'type' za upite o zapisima zbirke 'Dummy' unutar funkcije traženja kao što je prikazano u nastavku. Ova bi naredba pregledala cijelu kolekciju, što bi moglo potrajati dugo vremena za obradu velikih kolekcija. Stoga moramo optimizirati izvedbu ovog upita.



test> db.Dummy.find({tip: 'emp' })





Gornji zapisi zbirke Dummy pronađeni su pomoću polja 'vrsta', tj. sadrže uvjet. Stoga se ovdje može upotrijebiti indeks s jednim ključem za optimizaciju upita za pretraživanje. Dakle, koristit ćemo funkciju createIndex() MongoDB-a za stvaranje indeksa u polju 'type' kolekcije 'Dummy'. Ilustracija korištenja ovog upita prikazuje uspješno stvaranje indeksa s jednim ključem pod nazivom 'type_1' na ljusci.

test> db.Dummy.createIndex({ tip: 1 })

Upotrijebimo upit find() nakon što počne koristiti polje 'type'. Operacija će sada biti značajno brža od prethodno korištene funkcije find() jer je indeks na mjestu jer MongoDB može koristiti indeks za brzo dohvaćanje zapisa sa traženim nazivom posla.



test> db.Dummy.find({tip: 'emp' })

Primjer 02: Indeks spoja

Možda ćemo htjeti tražiti stavke na temelju različitih kriterija u određenim okolnostima. Implementacija složenog indeksa za ova polja može poboljšati izvedbu upita. Recimo, ovaj put želite pretraživati ​​iz zbirke 'Dummy' koristeći više polja koja sadrže različite uvjete pretraživanja kako se upit prikazuje. Ovaj upit je tražio zapise iz zbirke gdje je polje 'type' postavljeno na 'emp', a polje 'sal' je veće od 350.

Logički operator $gte korišten je za primjenu uvjeta na polje 'sal'. Ukupno dvije ploče vraćene su nakon pretraživanja cijele zbirke koja se sastoji od 10 ploča.

test> db.Dummy.find({tip: 'emp' , sal: {$gte: 350 } })

Kreirajmo složeni indeks za gore navedeni upit. Ovaj složeni indeks ima polja 'vrsta' i 'sal'. Brojevi “1” i “-1” predstavljaju uzlazni i silazni redoslijed za polja “type” i “sal”. Redoslijed stupaca složenog indeksa važan je i trebao bi odgovarati obrascima upita. MongoDB je dao naziv 'type_1_sal_-1' ovom složenom indeksu kako je prikazan.

test> db.Dummy.createIndex({ tip: 1 , hoće:- 1 })

Nakon korištenja istog upita find() za traženje zapisa s vrijednošću polja 'type' kao 'emp' i vrijednošću polja 'sal' većom od jednake 350, dobili smo isti izlaz s malom promjenom redoslijeda u usporedbi s prethodnim rezultatom upita. Veći zapis vrijednosti za polje 'sal' sada je na prvom mjestu, dok je najmanji na najnižem prema '-1' postavljenom za polje 'sal' u složenom indeksu iznad.

test> db.Dummy.find({tip: 'emp' , sal: {$gte: 350 } })

Primjer 03: Indeks teksta

Ponekad se možete susresti sa situacijom u kojoj biste trebali raditi s velikim skupom podataka, kao što su veliki opisi proizvoda, sastojaka itd. Tekstualni indeks može biti koristan za pretraživanje cijelog teksta u velikom tekstualnom polju. Na primjer, stvorili smo novu kolekciju pod nazivom 'Test' unutar naše test baze podataka. Umetnuto je ukupno 6 zapisa u ovu zbirku pomoću funkcije insertMany() prema upitu find() u nastavku.

test> db.Test.insertMany([

{Ime: 'Ana' , od: 'Ona živi u Londonu i dobra je učiteljica' },

{Ime: 'Robert' , od: 'On je tako sjajan nogometaš' },

{Ime: 'iz' , od: 'Možda putujem Dubaijem' },

{Ime: 'Jakov' , od: 'On je nevjerojatan i bogat.' },

{Ime: 'Cillian' , od: 'Filmski super početak postao je slavan u tren oka' },

{Ime: 'Ken' , od: 'Ljubavnica hrane. Može i tebe pojesti.' }

])

Sada ćemo stvoriti tekstualni indeks na polju 'Des' ove zbirke, koristeći MongoDB-ovu funkciju createIndex(). Ključna riječ 'tekst' u vrijednosti polja prikazuje vrstu indeksa, koji je 'tekstualni' indeks. Naziv indeksa, des_text, automatski je generiran.

test> db.Test.createIndex({ des: 'tekst' })

Sada se funkcija find() koristi za izvođenje 'pretraživanja teksta' u zbirci putem indeksa 'des_text'. Operator $search korišten je za traženje riječi 'hrana' u zapisima zbirke i prikaz tog određenog zapisa.

test> db.Test.find({ $text: { $search: 'hrana' }});

Provjerite indekse:

Možete provjeriti i popisati sve primijenjene indekse različitih kolekcija u vašem MongoDB-u. U tu svrhu upotrijebite metodu getIndexes() zajedno s nazivom kolekcije na zaslonu svoje MongoDB ljuske. Koristili smo ovu naredbu zasebno za zbirke 'Test' i 'Dummy'. Ovo prikazuje sve potrebne informacije o ugrađenim i korisnički definiranim indeksima na vašem zaslonu.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Ispusti indekse:

Vrijeme je da izbrišete indekse koji su prethodno stvoreni za kolekciju pomoću funkcije dropIndex() zajedno s istim nazivom polja na koje je indeks primijenjen. Donji upit pokazuje da je pojedinačni indeks uklonjen.

test> db.Dummy.dropIndex({tip: 1 })

Na isti način, složeni indeks se može ispustiti.

test> db.Dummy.drop index({tip: 1 , će: 1 })

Zaključak

Ubrzavanjem dohvaćanja podataka iz MongoDB-a, indeksiranje je bitno za povećanje učinkovitosti upita. U nedostatku indeksa, MongoDB mora pretraživati ​​cijelu zbirku tražeći podudarne zapise, što postaje manje učinkovito kako se veličina skupa povećava. Sposobnost MongoDB-a da brzo otkrije prave zapise korištenjem strukture baze podataka indeksa ubrzava obradu upita kada se koristi odgovarajuće indeksiranje.