Kā uzlabot vaicājumus, izmantojot MongoDB indeksēšanu

Ka Uzlabot Vaicajumus Izmantojot Mongodb Indeksesanu



Vaicājuma ātruma palielināšana ir būtiska MongoDB un visām citām datu bāzu sistēmām. Veidojot datu struktūras, kas palīdz MongoDB ātrāk identificēt ierakstus, indeksēšana ir spēcīga pieeja meklēšanas paātrināšanai un optimizēšanai. Rādītāji ietver dažu ierakstu datu kopijas, lai padarītu pieprasījumus efektīvākus. Tas racionalizē centienus, kas saistīti ar atbildēm uz MongoDB pieprasījumiem. Šajā rokasgrāmatā mēs apspriedīsim indeksu izmantošanu, izmantojot dažādus indeksēšanas veidus.

Izveidot kolekciju

Pirms indeksu izmantošanas mums ir jāizveido jauna kolekcija mūsu MongoDB. Mēs jau esam izveidojuši vienu un ievietojuši 10 dokumentus ar nosaukumu “Manekens”. Funkcija find() MongoDB parāda visus ierakstus no kolekcijas “Dummy” zemāk esošajā MongoDB čaulas ekrānā.

tests> db.Dummy.find()







Izvēlieties Indeksēšanas veidu

Pirms indeksa izveides vispirms ir jānosaka kolonnas, kas parasti tiks izmantotas vaicājuma kritērijos. Indeksi labi darbojas kolonnās, kuras bieži tiek filtrētas, kārtotas vai meklētas. Lauki ar lielu kardinalitāti (daudz dažādu vērtību) bieži vien ir lieliskas indeksēšanas iespējas. Šeit ir daži kodu piemēri dažādiem indeksu veidiem.



01. piemērs: viena lauka indekss

Tas, iespējams, ir vissvarīgākais indeksa veids, kas indeksē vienu kolonnu, lai palielinātu vaicājuma ātrumu šajā kolonnā. Šis indeksa veids tiek izmantots vaicājumiem, kuros kolekcijas ierakstu vaicāšanai izmantojat vienu atslēgas lauku. Pieņemsim, ka izmantojat lauku “tips”, lai meklētu kolekcijas “Dummy” ierakstus meklēšanas funkcijā, kā norādīts tālāk. Šī komanda izskatīs visu kolekciju, kas var aizņemt ilgu laiku, līdz tiek apstrādātas milzīgas kolekcijas. Tāpēc mums ir jāoptimizē šī vaicājuma veiktspēja.



tests> db.Dummy.find({tips: 'emp' })





Iepriekš minētie Dummy kolekcijas ieraksti ir atrasti, izmantojot lauku “type”, t.i., ietverot nosacījumu. Tāpēc meklēšanas vaicājuma optimizēšanai šeit var izmantot vienas atslēgas indeksu. Tātad, mēs izmantosim MongoDB funkciju createIndex (), lai izveidotu indeksu kolekcijas “Dummy” laukā “type”. Šī vaicājuma izmantošanas ilustrācija parāda veiksmīgu vienas atslēgas indeksa izveidi ar nosaukumu “type_1” čaulā.

tests> db.Dummy.createIndex({ tips: 1 })

Izmantosim Find() vaicājumu, kad tas gūst labumu, izmantojot lauku “type”. Darbība tagad būs ievērojami ātrāka nekā iepriekš izmantotā Find() funkcija, jo indekss ir vietā, jo MongoDB var izmantot indeksu, lai ātri izgūtu ierakstus ar pieprasīto amata nosaukumu.



tests> db.Dummy.find({tips: 'emp' })

Piemērs 02: Saliktais indekss

Noteiktos apstākļos mēs varam meklēt preces, pamatojoties uz dažādiem kritērijiem. Saliktā indeksa ieviešana šiem laukiem var palīdzēt uzlabot vaicājuma veiktspēju. Pieņemsim, ka šoreiz vēlaties meklēt no kolekcijas “Manekens”, izmantojot vairākus laukus, kuros ir dažādi meklēšanas nosacījumi, kā tiek parādīts vaicājums. Šis vaicājums ir meklējis ierakstus no kolekcijas, kur lauks “type” ir iestatīts uz “emp” un lauks “sal” ir lielāks par 350.

Loģiskais operators $gte ir izmantots, lai piemērotu nosacījumu laukam “sal”. Pārmeklējot visu kolekciju, kas sastāv no 10 ierakstiem, kopā tika atgriezti divi ieraksti.

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

Izveidosim salikto indeksu iepriekšminētajam vaicājumam. Šim saliktajam indeksam ir lauki “type” un “sal”. Cipari “1” un “-1” apzīmē attiecīgi augošu un dilstošu secību laukiem “type” un “sal”. Saliktā indeksa kolonnu secība ir svarīga, un tai jāatbilst vaicājumu modeļiem. MongoDB šim saliktajam indeksam ir piešķīris nosaukumu “type_1_sal_-1”, kā parādīts.

tests> db.Dummy.createIndex({ tips: 1 , būs:- 1 })

Pēc tā paša find() vaicājuma izmantošanas, lai meklētu ierakstus ar lauka “type” vērtību kā “emp” un lauka “sal” vērtību, kas ir lielāka par 350, mēs esam ieguvuši tādu pašu izvadi ar nelielām izmaiņām secībā. salīdzinot ar iepriekšējā vaicājuma rezultātu. Lielāks vērtības ieraksts laukam “sal” tagad ir pirmajā vietā, savukārt mazākais ir zemākajā vietā saskaņā ar “-1”, kas iestatīts laukam “sal” iepriekš minētajā saliktajā indeksā.

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

03. piemērs: teksta rādītājs

Dažreiz var rasties situācija, kad jums ir jārisina liela datu kopa, piemēram, lieli produktu, sastāvdaļu apraksti utt. Teksta rādītājs var būt noderīgs, lai veiktu pilna teksta meklēšanu lielā teksta laukā. Piemēram, mūsu testu datubāzē esam izveidojuši jaunu kolekciju ar nosaukumu “Test”. Šajā kolekcijā tika ievietoti pavisam 6 ieraksti, izmantojot funkciju insertMany() saskaņā ar tālāk norādīto vaicājumu find().

tests> db.Test.insertMany([

{nosaukums: 'Ana' , no: 'Viņa dzīvo Londonā un ir laba skolotāja' },

{nosaukums: 'Roberts' , no: 'Viņš ir tik satriecošs futbolists' },

{nosaukums: 'no' , no: 'Varētu ceļot uz Dubaiju' },

{nosaukums: 'Jēkabs' , no: 'Viņš ir pārsteidzošs un bagāts.' },

{nosaukums: 'Cillian' , no: 'Lielisks filmas sākums vienā mirklī ieguva slavu' },

{nosaukums: 'Ken' , no: 'Ēdienu mīļotājs. Viņa var ēst arī tevi.' }

])

Tagad mēs izveidosim teksta indeksu šīs kolekcijas laukā “Des”, izmantojot MongoDB funkciju createIndex (). Atslēgvārds “teksts” lauka vērtībā parāda indeksa veidu, kas ir “teksta” indekss. Indeksa nosaukums des_text ir automātiski ģenerēts.

tests> db.Test.createIndex({ des: 'teksts' })

Tagad funkcija find () ir izmantota, lai veiktu 'teksta meklēšanu' kolekcijā, izmantojot indeksu 'des_text'. Operators $search tika izmantots, lai kolekcijas ierakstos meklētu vārdu “pārtika” un parādītu šo konkrēto ierakstu.

tests> db.Test.find({ $text: { $search: 'ēdiens' }});

Pārbaudīt indeksus:

Jūs varat pārbaudīt un uzskaitīt visus piemērotos dažādu kolekciju indeksus savā MongoDB. Šim nolūkam izmantojiet metodi getIndexes () kopā ar kolekcijas nosaukumu savā MongoDB čaulas ekrānā. Mēs esam izmantojuši šo komandu atsevišķi kolekcijām “Test” un “Dummy”. Tas parāda visu nepieciešamo informāciju par iebūvētajiem un lietotāja definētajiem indeksiem jūsu ekrānā.

tests> db.Test.getIndexes()

tests> db.Dummy.getIndexes()

Krituma indeksi:

Ir pienācis laiks dzēst indeksus, kas iepriekš tika izveidoti kolekcijai, izmantojot funkciju dropIndex() un to pašu lauka nosaukumu, kuram tika lietots indekss. Tālāk sniegtais vaicājums parāda, ka viens rādītājs ir noņemts.

tests> db.Dummy.dropIndex({tips: 1 })

Tādā pašā veidā var samazināt salikto indeksu.

tests> db.Dummy.drop indekss({tips: 1 , būs: 1 })

Secinājums

Paātrinot datu izgūšanu no MongoDB, indeksēšana ir būtiska, lai uzlabotu vaicājumu efektivitāti. Ja nav indeksu, MongoDB visā kolekcijā ir jāmeklē atbilstoši ieraksti, kas kļūst mazāk efektīvi, palielinoties kopas lielumam. MongoDB spēja ātri atklāt pareizos ierakstus, izmantojot indeksu datu bāzes struktūru, paātrina vaicājumu apstrādi, ja tiek izmantota piemērota indeksēšana.