Рад са индексима у МонгоДБ -у

Добро је познато да су ресурси веома ограничени у производним окружењима и да је тачно да сада постоје сервери десет пута моћнији од оних који су постојали пре 5 година, међутим, како се снага ових рачунара повећавала, тако се повећавао и упит података.

У зависности од времена које је потребно да се изврши упит, можемо рећи да ли је критичан или не, међутим, чак и ако није критичан, увек постоји мала маргина за побољшање, са овим ћемо уштедети секунде извршења које на крај дана претварају се у минуте, што нам даје могућност да побољшамо корисничко искуство.

ЗахтевиЗа извођење овог водича потребна нам је функционална инсталација МонгоДБ са довољним дозволама како бисмо могли да радимо у командној конзоли.

Такође нам је потребан а скуп података или документи Да бисмо попунили нашу збирку, у прошлим водичима нудили смо почетни скуп података, међутим за оне који га немају могу користити ово:

 дб.гуиамонго.инсерт ({"наме": "Мариа", "аге": "25", "гендер": "Фемале", "цоунтри": "Цоломбиа"}); дб.гуиамонго.инсерт ({"наме ":" Педро "," аге ":" 32 "," гендер ":" Мале "," цоунтри ":" Ецуадор "}); дб.гуиамонго.инсерт ({" наме ":" Рамон "," аге " : "18", "гендер": "Мале", "цоунтри": "Хондурас"}); дб.гуиамонго.инсерт ({"наме": "Јохн", "аге": "22", "гендер": "Мушки", "држава": "Аргентина"}); дб.гуиамонго.инсерт ({"име": "Роса", "старост": "45", "пол": "Женско", "држава": " Чиле "," језици ": [" Есп "," Инг "," Фра "]});
Са овим ћемо имати довољно за мали почетак и тако добити резултате из вежби које ћемо представити у наставку.

1. Индексирање МонгоДБ -а


Индексирање или рад са индексима је концепт који се дели МонгоДБ са Базе података релационим, то јест, ако имамо појам о овом концепту, можемо разумети како он функционише МонгоДБ ускоро ћемо се једноставно морати држати одређене синтаксе.

Рад са индексимаАко смо концепт странци, треба напоменути да рад са индекси није ништа друго до прецизирање База података која поља треба да користите у меморији да би ваше претраживање било ефикасније, на пример ако тражимо велику збирку докумената за поље тзв. Име, идеално би било индексирати ово поље тако да мотор зна да га треба водити директно тим пољем, чиме упити који користе то поље почињу бити бржи.

За креирање индекса на МонгоДБ оно што треба да урадимо је да користимо функцију сецуреИндек () и као параметар проћи документ ЈСОН означавајући поља или својства нашег документа са којима морамо ускладити наведени индекс. Погледајмо мали пример овога.

Претпоставимо да имамо збирку тзв гуиамонго и претражујемо поље под именом, код би био следећи:

 дб.гуиамонго.финд ({“наме”: “Наме”})
Ово је уобичајен упит који нема ништа посебно, једини проблем је што би, ако постоји милион докумената, био веома спор, па га за стварање индекса морамо само навести на следећи начин:
 дб.гуиамонго.енсуреИндек ({„име“: 1})
Овим смо већ креирали индекс за упит, ако га поново извршимо, то ће бити много брже. Хајде да видимо како ово изгледа на нашој конзоли МонгоДБ:

Можемо приметити да када створимо индекс, МонгоДБ Враћа нам документ у којем се приказује статус наше функције и колико смо индекса имали пре и после апликације, додатно нам показује поље Добро на 1 што указује да је извршење било успешно.

Претходни упит је прилично користан за једно поље, али ако урадимо следеће:

 дб.гуиамонго.финд ({"наме": "Наме", "аге": {"$ гт": "20"}}). сорт ({"аге": - 1});
Схватамо да је у овом случају индекс Претходни више не функционише, то је зато што упит користи другачију комбинацију поља за претрагу, зато морамо да направимо нови индекс користећи оно што смо претходно научили, да видимо како би то било:
 дб.гуиамонго.енсуреИндек ("име": 1, "старост": 1);
Ако сада проверимо нашу базу података на следећи начин, видећемо да имамо нови индекс у колекцији:

2. Недостатак у коришћењу индекса


Упркос великим предностима са којима се користе и раде индексиОво није увек корисно, зато морамо темељито анализирати пре него што имплементирамо ову функцију у нашу базу података.

Највећи недостатакТхе велики недостатак у коришћењу индекса је да мотор мора да укључи нове податке које убацујемо у табелу или листу индекса, из тог разлога сваки пут када се изврши функција инсерт () биће направљен низ суседних процеса који могу повећати употребу диска и обраде.

Још један недостатак је што имамо максимално 64 индекса по збирци, Зато морамо радити с најмањим могућим бројем њих у нашој бази података, осигуравајући тако да се користи само оно што је строго потребно.

3. Како знати када користити индекс


Будући да знамо ограничења и недостатке употребе индекса, добра вежба је да ли треба да их створимо или не јесте да поставимо ову серију питања, ако на њих можемо одговорити све што имамо потребне карактеристике за креирање индекса, на с друге стране, ако не можемо, мораћемо да анализирамо ситуацију са другог становишта, погледајмо питања:

Које упите радимо?Морамо извршити анализу ситуације и видети шта се дешава у нашој збирци, помоћу овога ћемо сазнати да ли су нам потребни индекси, или ако не, можда морамо неке елиминисати.

Која је исправна оријентација индекса?Морамо знати како уређујемо податке у индексима, ако су абецедно или бројчано, узлазно или силазно, то директно утиче на брзину индексирања.

Како ће се повећати?Морамо размишљати о расту наших података, јер ћемо на овај начин знати да ли ће оно што данас функционира сутра са 10 или 100 пута више података исправно функционирати.

Наравно, ово је само водич, постоје посебни и врло посебни случајеви сваког администратора апликације у којима морате примијенити своје критерије на ову врсту водича, међутим то је добар водич за почетак у свијету оптимизације података.

4. Индекси у уграђеним документима


Структура докумената са којима можемо да рукујемо МонгоДБ Подржава сложено складиштење података, неће сви подаци који су нам потребни бити на истом нивоу, зато је потреба за креирањем индекси уграђених докумената. Са овим индексима МонгоДБ Моћи ћете индексирати податке који имају сложенију структуру.

Да бисмо постигли резултат, користићемо оно што се назива тачкаста нотација, што није ништа друго до приступ пољима уграђених докумената као да су својства објекта кроз тачку. У следећем примеру ћемо направити индекс ових карактеристика, хајде да прво погледамо синтаксу.

Прво ћемо у наш тестни скуп уметнути запис са уграђеним документом:

 дб.гуиамонго.инсерт ({"наме": "Јуан", "аге": "40", "гендер": "Мале", "цоунтри": "Бразил", "квалификације": {"хистори": "85 "," литературе ":" 90 "," цоурсе ":" 3 "}});
Затим ћемо направити једноставан упит у овом случају за својство курса:
 дб.гуиамонго.финд ({“граде.цоурсе”: ”3”});
Сада, ако желимо да направимо индекс, једноставно морамо да урадимо следеће:
 дб.гуиамонго.енсуреИндек ({“оцјене.курс”: 1});
Овим смо већ створили индекс документа уграђеног у други у збирци у МонгоДБ. Ако погледамо ово, требало је да добијемо у конзоли:

5. Користите објашњење ()


Међутим, будући да знамо како стварати индексе и имамо идеју о томе када и зашто их требамо стварати, још нисмо видјели алат који је јако важан, који нам омогућава да сазнамо нешто више и идемо даље у наши упити; на које се позивамо објасни () ова функција нам омогућава да знамо време и индексе који се користе у упитима.

Шта нам то говори?Повратак објасни () То је документ у коме ће означити курсор који користи за претрагу, затим означава границе индекса, имамо и поље које има назив миллис и показаће колико времена у милли-секундама је потребно да се упит изврши, ово последње је веома важно за разумевање перформанси нашег База података.

Хајде да видимо како можемо да применимо ову функцију на упит, користићемо ону коју смо урадили у претходном примеру:

 дб.гуиамонго.финд ({“граде.цоурсе”: ”3”}). објаснити ();
Након примене, требало би да врати нешто попут следећег:

Напомињемо како нам се нуде подаци да бисмо могли анализирати упит, у курсор видимо да смо користили индекс који смо створили у претходној вежби тзв оцене.курс_1, ово нам је помогло да стигнемо тамо 0 мили-секунди време извршења, што је оптимално време за наше упите, очигледно пошто је ово окружење за тестирање нећемо имати нешто даље од тога, али ако ову вежбу можемо да изведемо на серверима са милионима записа, схватићемо моћ индекса.

Овим смо завршили овај водич, створили смо индекси у нашим збиркама докумената и додатно смо истражили неке алате који нам помажу да добијемо кључне информације за побољшање и изнад свега повећање перформанси наших База података.

wave wave wave wave wave