Kuinka parantaa kyselyitä MongoDB-indeksoinnin avulla

Kuinka Parantaa Kyselyita Mongodb Indeksoinnin Avulla



Kyselyn nopeuden parantaminen on välttämätöntä MongoDB:lle ja kaikille muille tietokantajärjestelmille. Rakentamalla tietorakenteita, jotka auttavat MongoDB:tä tunnistamaan tietueet nopeammin, indeksointi on tehokas tapa nopeuttaa ja optimoida hakuja. Indeksit sisältävät kopioita tietueiden tiedoista kyselyiden tehostamiseksi. Tämä virtaviivaistaa MongoDB:n pyyntöihin vastaamiseen liittyvää työtä. Tässä oppaassa käsittelemme indeksien käyttöä eri indeksointityyppien avulla.

Luo kokoelma

Ennen indeksien käyttöä meidän on luotava uusi kokoelma MongoDB:hen. Olemme jo luoneet yhden ja lisänneet 10 asiakirjaa nimeltä 'Dummy'. Find() MongoDB-funktio näyttää kaikki tietueet 'Dummy'-kokoelmasta alla olevalla MongoDB-kuorinäytöllä.

testi> db.Dummy.find()







Valitse Indeksointityyppi

Ennen indeksin luomista sinun on ensin määritettävä sarakkeet, joita käytetään yleisesti hakuehdoissa. Indeksit toimivat hyvin sarakkeissa, joita suodatetaan, lajitellaan tai haetaan usein. Kentät, joilla on suuri kardinaliteetti (monia erilaisia ​​arvoja), ovat usein erinomaisia ​​indeksointivaihtoehtoja. Tässä on joitain koodiesimerkkejä eri indeksityypeille.



Esimerkki 01: Yhden kentän indeksi

Se on luultavasti perustavanlaatuisin indeksityyppi, joka indeksoi yhden sarakkeen kyselyn nopeuden parantamiseksi kyseisessä sarakkeessa. Tämän tyyppistä hakemistoa käytetään kyselyissä, joissa käytät yhtä avainkenttää kokoelmatietueiden kyselyyn. Oletetaan, että käytät 'tyyppi'-kenttää kyselyn kokoelman 'Dummy' tietueista hakutoiminnossa alla kuvatulla tavalla. Tämä komento katsoisi koko kokoelman läpi, mikä saattaa kestää kauan ennen kuin valtavia kokoelmia käsitellään. Siksi meidän on optimoitava tämän kyselyn suorituskyky.



testi> db.Dummy.find({tyyppi: 'tyhjä' })





Yllä olevat Dummy-kokoelman tietueet on löydetty käyttämällä 'tyyppi'-kenttää, eli ne sisältävät ehdon. Siksi yhden avaimen indeksiä voidaan käyttää tässä hakukyselyn optimointiin. Joten käytämme MongoDB:n createIndex()-funktiota indeksin luomiseen 'Dummy'-kokoelman 'tyyppi'-kenttään. Tämän kyselyn käyttöä koskeva esimerkki näyttää yhden avaimen indeksin, jonka nimi on 'tyyppi_1', luominen onnistuneesti kuoreen.

testi> db.Dummy.createIndex({ tyyppi: 1 })

Käytetään Find()-kyselyä, kun se saa 'type'-kentän avulla. Toiminto on nyt huomattavasti nopeampi kuin aiemmin käytetty find()-funktio, koska indeksi on paikallaan, koska MongoDB voi käyttää indeksiä hakeakseen nopeasti tietueet pyydetyllä työnimikkeellä.



testi> db.Dummy.find({tyyppi: 'tyhjä' })

Esimerkki 02: Yhdisteindeksi

Saatamme haluta etsiä kohteita eri kriteerien perusteella tietyissä olosuhteissa. Yhdistetyn indeksin käyttöönotto näille kentille voi auttaa parantamaan kyselyn suorituskykyä. Oletetaan, että tällä kertaa haluat etsiä kokoelmasta 'Dummy' käyttämällä useita kenttiä, jotka sisältävät erilaisia ​​hakuehtoja kyselyssä. Tämä kysely on etsinyt tietueita kokoelmasta, jossa 'type'-kentän arvo on 'emp' ja 'sal'-kentän arvo on suurempi kuin 350.

$gte loogista operaattoria on käytetty ehdon soveltamiseen 'sal'-kenttään. Yhteensä 10 tietueesta koostuvan kokoelman läpi haun jälkeen palautettiin yhteensä kaksi levyä.

testi> db.Dummy.find({tyyppi: 'tyhjä' , sal: {$gte: 350 } })

Luodaan yhdistelmäindeksi edellä mainitulle kyselylle. Tässä yhdistetyssä indeksissä on kentät 'tyyppi' ja 'sal'. Numerot '1' ja '-1' edustavat nousevaa ja laskevaa järjestystä 'tyyppi'- ja 'sal'-kentille. Yhdistelmäindeksin sarakkeiden järjestys on tärkeä ja sen tulee vastata kyselymalleja. MongoDB on antanut tälle näytetylle yhdisteindeksille nimen 'type_1_sal_-1'.

testi> db.Dummy.createIndex({ tyyppi: 1 , tulee:- 1 })

Kun etsimme samaa find()-kyselyä tietueiden etsimiseen, joiden 'type'-kentän arvo on 'emp' ja 'sal'-kentän arvo on suurempi kuin 350, olemme saaneet saman tuloksen pienellä muutoksella järjestystä. edelliseen kyselyyn verrattuna. Sal-kentän suurempi arvotietue on nyt ensimmäisellä sijalla, kun taas pienin on alimmillaan yllä olevan yhdisteindeksin 'sal' -kenttään asetetun '-1' mukaan.

testi> db.Dummy.find({tyyppi: 'tyhjä' , sal: {$gte: 350 } })

Esimerkki 03: Tekstihakemisto

Joskus saatat kohdata tilanteen, jossa sinun pitäisi käsitellä suurta tietojoukkoa, kuten suuria tuotekuvauksia, ainesosia jne. Tekstihakemisto voi olla hyödyllinen kokotekstihakujen tekemisessä suuresta tekstikentästä. Olemme esimerkiksi luoneet testitietokantaamme uuden kokoelman nimeltä 'Test'. Lisäsi yhteensä 6 tietuetta tähän kokoelmaan käyttämällä insertMany()-funktiota alla olevan find()-kyselyn mukaisesti.

testi> db.Test.insertMany([

{nimi: 'Ana' , seuraavista: 'Hän asuu Lontoossa ja on hyvä opettaja' },

{nimi: 'Robert' , seuraavista: 'Hän on niin mahtava jalkapalloilija' },

{nimi: 'alkaen' , seuraavista: 'Saattaa matkustaa Dubaihin' },

{nimi: 'Jakob' , seuraavista: 'Hän on mieleenpainuva ja rikas.' },

{nimi: 'Cillian' , seuraavista: 'Elokuvan superaloitus sai mainetta hetkessä' },

{nimi: 'Ken' , seuraavista: 'Ruoan ystävä. Hän voi myös syödä sinut.' }

])

Nyt luomme tekstihakemiston tämän kokoelman 'Des'-kenttään käyttämällä MongoDB:n createIndex()-funktiota. Avainsana 'teksti' kentän arvossa näyttää indeksin tyypin, joka on 'teksti'-indeksi. Indeksin nimi, des_text, on luotu automaattisesti.

testi> db.Test.createIndex({ des: 'teksti' })

Nyt Find()-funktiota on käytetty 'tekstihaun' suorittamiseen kokoelmassa 'des_text'-indeksin kautta. $search-operaattoria käytettiin etsimään sanaa 'ruoka' kokoelmatietueista ja näyttämään kyseinen tietue.

testi> db.Test.find({ $text: { $search: 'ruoka' }});

Tarkista indeksit:

Voit tarkistaa ja luetteloida kaikki käytetyt indeksit eri kokoelmista MongoDB:ssäsi. Käytä tätä varten getIndexes()-menetelmää yhdessä kokoelman nimen kanssa MongoDB-kuorinäytössä. Olemme käyttäneet tätä komentoa erikseen 'Test'- ja 'Dummy'-kokoelmissa. Tämä näyttää kaikki tarvittavat tiedot näytön sisäänrakennetuista ja käyttäjän määrittelemistä indekseistä.

testi> db.Test.getIndexes()

testi> db.Dummy.getIndexes()

Pudotusindeksit:

On aika poistaa indeksit, jotka on luotu aiemmin kokoelmalle dropIndex()-funktiolla ja samalla kentän nimellä, johon indeksiä on käytetty. Alla oleva kysely osoittaa, että yksittäinen hakemisto on poistettu.

testi> db.Dummy.dropIndex({tyyppi: 1 })

Samalla tavalla yhdisteindeksi voidaan pudottaa.

testi> db.Dummy.drop index({tyyppi: 1 , tulee: 1 })

Johtopäätös

Nopeuttamalla tietojen hakua MongoDB:stä indeksointi on välttämätöntä kyselyiden tehokkuuden parantamiseksi. Indeksien puuttuessa MongoDB:n on etsittävä koko kokoelmasta vastaavia tietueita, mikä heikkenee joukon koon kasvaessa. MongoDB:n kyky löytää nopeasti oikeat tietueet indeksitietokantarakenteen avulla nopeuttaa kyselyiden käsittelyä, kun käytetään sopivaa indeksointia.