Kuidas MongoDB indekseerimisega päringuid täiustada

Kuidas Mongodb Indekseerimisega Paringuid Taiustada



Päringu kiiruse suurendamine on MongoDB ja kõigi teiste andmebaasisüsteemide jaoks hädavajalik. Luues andmestruktuure, mis aitavad MongoDB-l kirjeid kiiremini tuvastada, on indekseerimine tõhus lähenemisviis otsingute kiirendamiseks ja optimeerimiseks. Indeksid sisaldavad osade andmete koopiaid kirjetest, et teha päringuid tõhusamaks. See lihtsustab MongoDB taotlustele vastamisega seotud jõupingutusi. Selles juhendis käsitleme indeksite kasutamist erinevate indekseerimistüüpide abil.

Loo kollektsioon

Enne indeksite kasutamist peame oma MongoDB-s looma uue kollektsiooni. Oleme juba loonud ühe ja lisanud 10 dokumenti nimega “Dummy”. Funktsioon find() MongoDB kuvab alloleval MongoDB kestakuval kõik 'Dummy' kollektsiooni kirjed.

test> db.Dummy.find()







Valige indekseerimise tüüp

Enne indeksi loomist peate esmalt määrama veerud, mida päringukriteeriumides tavaliselt kasutatakse. Indeksid toimivad hästi veergudel, mida sageli filtreeritakse, sorteeritakse või otsitakse. Suure kardinaalsusega (palju erinevaid väärtusi) väljad on sageli suurepärased indekseerimisvõimalused. Siin on mõned koodinäited erinevate indeksitüüpide jaoks.



Näide 01: ühe välja indeks

See on tõenäoliselt kõige põhilisem indeksi tüüp, mis indekseerib ühe veeru, et suurendada päringu kiirust selles veerus. Seda tüüpi indeksit kasutatakse päringute jaoks, mille puhul kasutate kogukirjete päringute tegemiseks ühte võtmevälja. Oletame, et kasutate välja „tüüp”, et pärida kogu „Dummy” kirjete kohta otsingufunktsioonis, nagu allpool kirjeldatud. See käsk vaatab läbi kogu kogu, mille töötlemiseks võib kuluda palju aega. Seetõttu peame selle päringu toimivust optimeerima.



test> db.Dummy.find({tüüp: 'emp' })





Ülaltoodud Dummy kollektsiooni kirjed leiti välja 'tüüp' abil, st sisaldavad tingimust. Seetõttu saab siin otsingupäringu optimeerimiseks kasutada ühe võtmega indeksit. Niisiis, me kasutame MongoDB funktsiooni createIndex(), et luua indeks kollektsiooni 'Dummy' väljale 'tüüp'. Selle päringu kasutamise illustratsioon näitab ühe võtmega indeksi 'tüüp_1' edukat loomist kestas.

test> db.Dummy.createIndex({tüüp: 1 })

Kasutame päringut find(), kui see välja „tüüp” abil kasu saab. Toiming on nüüd oluliselt kiirem kui varem kasutatud Find() funktsioon, kuna indeks on paigas, kuna MongoDB saab indeksit kasutada soovitud ametinimetusega kirjete kiireks toomiseks.



test> db.Dummy.find({tüüp: 'emp' })

Näide 02: Ühendindeks

Võib-olla soovime teatud tingimustel otsida esemeid erinevate kriteeriumide alusel. Liitindeksi rakendamine nendele väljadele võib aidata parandada päringu toimivust. Oletame, et seekord soovite otsida kogust 'Dummy', kasutades mitut välja, mis sisaldavad erinevaid otsingutingimusi, nagu päring kuvatakse. See päring on otsinud kirjeid kogust, kus välja 'type' väärtuseks on määratud 'emp' ja väli 'sal' on suurem kui 350.

Tingimuse rakendamiseks väljale 'sal' on kasutatud loogilist operaatorit $gte. Kokku tagastati pärast kogu 10 plaadist koosneva kollektsiooni läbiotsimist kaks plaati.

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

Loome eelnimetatud päringu jaoks liitindeksi. Sellel liitindeksil on väljad 'tüüp' ja 'sal'. Numbrid '1' ja '-1' tähistavad vastavalt kasvavat ja kahanevat järjekorda väljade 'tüüp' ja 'sal' jaoks. Liitindeksi veergude järjestus on oluline ja peaks vastama päringumustritele. MongoDB on andnud sellele liitindeksile kuvatud kujul nime 'type_1_sal_-1'.

test> db.Dummy.createIndex({tüüp: 1 , tahetakse:- 1 })

Pärast sama päringu find() kasutamist kirjete otsimiseks, mille välja väärtus on 'emp' ja välja 'sal' väärtus on suurem kui 350, oleme saanud sama väljundi, järjekorda veidi muudetud. võrreldes eelmise päringu tulemusega. Välja “sal” suurem väärtuse rekord on nüüd esimesel kohal, samas kui väikseim on madalaimal kohal vastavalt ülaltoodud liitindeksi “sal” väljale seatud väärtusele “-1”.

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

Näide 03: tekstiregister

Mõnikord võib tekkida olukord, kus peaksite tegelema suure andmekogumiga, näiteks suurte toodete, koostisosade kirjeldustega jne. Tekstiregister võib olla kasulik täistekstiotsingu tegemiseks suurel tekstiväljal. Näiteks oleme oma testide andmebaasis loonud uue kollektsiooni nimega 'Test'. Sellesse kogusse sisestati kokku 6 kirjet, kasutades funktsiooni insertMany() vastavalt allolevale päringule find().

test> db.Test.insertMany([

{nimi: 'Ana' , selle: 'Ta elab Londonis ja on hea õpetaja' },

{nimi: 'Robert' , selle: 'Ta on nii vinge jalgpallur' },

{nimi: 'alates' , selle: 'Võib-olla reisin Dubaisse' },

{nimi: 'Jaakob' , selle: 'Ta on meeliülendav ja rikas.' },

{nimi: 'Cillian' , selle: 'Filmi superstart sai hetkega kuulsuse' },

{nimi: 'Ken' , selle: 'Toiduarmastaja. Ta võib ka sind süüa.' }

])

Nüüd loome selle kollektsiooni väljale 'Des' tekstiindeksi, kasutades MongoDB funktsiooni createIndex(). Märksõna 'tekst' välja väärtuses näitab indeksi tüüpi, mis on 'teksti' indeks. Indeksi nimi des_text on automaatselt genereeritud.

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

Nüüd on funktsiooni find () kasutatud kogus tekstiotsingu tegemiseks indeksi 'des_text' kaudu. Operaatorit $search kasutati sõna 'toit' otsimiseks kogumiskirjetest ja selle konkreetse kirje kuvamiseks.

test> db.Test.find({ $text: { $otsing: 'toit' }});

Kontrollige indekseid:

Saate vaadata ja loetleda oma MongoDB-s erinevate kogude kõiki rakendatud indekseid. Selleks kasutage meetodit getIndexes() koos kogu nimega oma MongoDB kestaekraanil. Oleme seda käsku kasutanud eraldi kogude 'Test' ja 'Dummy' jaoks. See näitab kogu vajalikku teavet teie ekraanil olevate sisseehitatud ja kasutaja määratud indeksite kohta.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Kukkumise indeksid:

On aeg kustutada varem kollektsiooni jaoks loodud indeksid funktsiooni dropIndex() abil koos sama väljanimega, millele indeks oli rakendatud. Allolev päring näitab, et üksik register on eemaldatud.

test> db.Dummy.dropIndex({tüüp: 1 })

Samamoodi saab langetada liitindeksit.

test> db.Dummy.drop index({tüüp: 1 , teeb: 1 })

Järeldus

Kiirendades andmete otsimist MongoDB-st, on indekseerimine päringute tõhususe suurendamiseks hädavajalik. Indekside puudumisel peab MongoDB otsima kogu kogust sobivaid kirjeid, mis muutub komplekti suuruse suurenedes vähem tõhusaks. MongoDB võime indeksi andmebaasi struktuuri kasutades kiiresti õigeid kirjeid leida kiirendab päringute töötlemist, kui kasutatakse sobivat indekseerimist.