Работа с индекси в MongoDB

Добре известно е, че ресурсите са много ограничени в производствените среди и че е вярно, че сега има сървъри, десет пъти по -мощни от тези, които са съществували преди 5 години, но с увеличаването на мощността на тези компютри се увеличава и заявката данни.

В зависимост от времето, необходимо на заявката за изпълнение, можем да кажем дали е критично или не, но дори и да не е критично, винаги има малък запас за подобрение, с това ще спестим секунди от изпълнението, което при края на деня се трансформират в минути, което ни дава възможност да подобрим потребителското изживяване.

ИзискванияЗа да изпълним този урок, се нуждаем от функционална инсталация на MongoDB с достатъчно разрешения, за да можем да работим в командната конзола.

Нуждаем се и от a набор от данни или документи За да попълним нашата колекция, в предишни уроци предлагахме първоначален набор от данни, но за тези, които го нямат, могат да използват това:

 db.guiamongo.insert ({"name": "Maria", "age": "25", "gender": "Female", "country": "Colombia"}); db.guiamongo.insert ({"name ":" Pedro "," age ":" 32 "," gender ":" Male "," country ":" Ecuador "}); db.guiamongo.insert ({" name ":" Ramon "," age " : "18", "пол": "Мъж", "държава": "Хондурас"}); db.guiamongo.insert ({"име": "Джон", "възраст": "22", "пол": "Мъж", "държава": "Аржентина"}); db.guiamongo.insert ({"име": "Роза", "възраст": "45", "пол": "Жена", "държава": " Чили "," езици ": [" Esp "," Ing "," Fra "]});
С това ще имаме достатъчно за малък старт и по този начин ще получим резултати от упражненията, които ще представим по -долу.

1. Индексиране на MongoDB


Индексирането или работата с индекси е концепция, споделена в MongoDB с Бази данни релационни, тоест ако имаме представа за тази концепция, можем да разберем как работи тя MongoDB не след дълго просто трябва да се придържаме към конкретния синтаксис.

Работа с индексиАко сме непознати за концепцията, трябва да се отбележи, че работата с индекси не е нищо повече от посочване на База данни кои полета трябва да използвате в паметта, за да направите търсенето по -ефективно, например, ако търсим голяма колекция от документи за поле, наречено Име, идеалното би било да индексирате това поле, така че двигателят да знае, че трябва да се ръководи директно от това поле, като по този начин заявките, които използват това поле, започват да бъдат по -бързи.

За да създадете индекс на MongoDB това, което трябва да направим, е да използваме функцията secureIndex () и като параметър предайте документ JSON посочвайки полетата или свойствата на нашия документ, с които трябва да съответстваме на посочения индекс. Нека да разгледаме малък пример за това.

Да предположим, че имаме колекция, наречена гуамонго и ние търсим поле, наречено име, кодът ще бъде следният:

 db.guiamongo.find ({“name”: “Name”})
Това е нормална заявка, която няма нищо конкретно, единственият проблем е, че ако има милиони документи, това би било много бавно, така че за да създадем индекс, трябва само да го уточним, както следва:
 db.guiamongo.ensureIndex ({„име“: 1})
С това вече сме създали индекса за заявката, ако го изпълним отново ще бъде много по -бързо. Нека да видим как изглежда това на нашата конзола MongoDB:

Можем да забележим, че след като създадем индекса, MongoDB Той ни връща документ, където показва състоянието на нашата функция и колко индекса сме имали преди и след приложението, като ни показва допълнително полето добре на 1, което показва, че изпълнението е било успешно.

Предишната заявка е доста полезна за едно поле, но ако направим следното:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Осъзнаваме, че в този случай индекс Предишният вече не работи, това е така, защото заявката използва различна комбинация от полета за търсене, затова трябва да направим нов индекс, използвайки това, което научихме по -рано, нека видим как би било:
 db.guiamongo.ensureIndex ("име": 1, "възраст": 1);
Сега, ако проверим нашата база данни, както следва, ще видим, че имаме нов индекс в колекцията:

2. Недостатък при използването на индекси


Въпреки големите предимства, с които се използва и работи индексиТе не винаги са полезни, затова трябва да анализираме задълбочено, преди да внедрим тази функция в нашата база данни.

Най -големият недостатъкThe голям недостатък при използването на индекси е, че двигателят трябва да включва новите данни, които вмъкваме в таблицата или списъка с индекси, поради тази причина всеки път, когато се прави функция вмъкване () ще бъдат създадени редица съседни процеси, които могат да увеличат използването на диска и обработката.

Друг недостатък е, че имаме максимум 64 индекса на колекция, Ето защо трябва да работим с възможно най -малкото от тях в нашата база данни, като по този начин гарантираме, че се използва само това, което е строго необходимо.

3. Как да разберете кога да използвате индекс


Тъй като знаем ограниченията и недостатъците на използването на индекси, едно добро упражнение, за да разберем дали трябва да ги създадем или не, е да вземем тази поредица от въпроси, ако можем да им отговорим всички имаме необходимите характеристики за създаване на индекс, на от друга страна, ако не можем, ще трябва да анализираме ситуацията от друга гледна точка, нека разгледаме въпросите:

Какви запитвания правим?Трябва да извършим анализ на ситуацията и да видим какво се случва в нашата колекция, с това ще разберем дали имаме нужда от индекси, или ако не, може би трябва да премахнем някои.

Каква е правилната ориентация на индексите?Трябва да знаем как подреждаме данните в индексите, ако са по азбучен или цифров ред, възходящ или низходящ, това пряко влияе върху скоростта на индексиране.

Как ще се мащабира?Трябва да помислим за растежа на нашите данни, тъй като по този начин ще знаем дали това, което работи днес утре с 10 или 100 пъти повече данни, ще работи правилно.

Разбира се, това е само ръководство, има специални и много конкретни случаи на всеки администратор на приложения, в които трябва да приложите критериите си към този тип уроци, но това е добро ръководство, за да започнете в света на оптимизацията на данните.

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


Структурата на документите, с които можем да работим MongoDB поддава се на сложно съхранение на данни, не всички данни, от които се нуждаем, ще бъдат на едно и също ниво, поради което е необходимо да се създаде индекси на вградени документи. С тези индекси MongoDB Ще можете да индексирате данни, които имат по -сложни структури.

За да постигнем резултат, ще използваме това, което се нарича точкова нотация, което не е нищо повече от достъп до полетата на вградените документи, сякаш те са свойства на обект чрез точка. В следния пример ще създадем индекс на тези характеристики, нека първо да видим синтаксиса.

Първо ще вмъкнем запис с вграден документ в нашия тестов набор от данни:

 db.guiamongo.insert ({"име": "Хуан", "възраст": "40", "пол": "Мъж", "държава": "Бразилия", "квалификации": {"история": "85 "," литература ":" 90 "," курс ":" 3 "}});
След това ще направим проста заявка в този случай за свойството на курса:
 db.guiamongo.find ({“grade.course”: ”3”});
Сега, ако искаме да създадем индекс, просто трябва да направим следното:
 db.guiamongo.ensureIndex ({„оценки.курс“: 1});
С това вече създадохме индекс на документ, вграден в друг в колекция в MongoDB. Ако погледнем това, трябваше да получим в конзолата:

5. Използвайте обяснение ()


Тъй като знаем как да създаваме индекси и имаме представа кога и защо трябва да ги създаваме, все още не сме виждали инструмент, който е много важен, който ни позволява да знаем малко повече и да отидем по -далеч в нашите запитвания; визираме обясни () тази функция ни позволява да знаем часа и индексите, използвани в заявките.

Какво ни казва?Връщане на обясни () Това е документ, в който той ще посочи курсора, който използва за търсене, след това посочва границите на индекса, имаме и поле с името милис и той ще показва времето в милисекунди, което отнема една заявка за изпълнение, последното е много важно при разбирането на изпълнението на нашите База данни.

Нека да видим как можем да приложим тази функция към заявка, ще използваме тази, която направихме в предишния ни пример:

 db.guiamongo.find ({“оценки.курс”: ”3”}). обясни ();
След прилагането му той трябва да върне нещо подобно:

Отбелязваме как ни се предлагат данни, за да можем да анализираме заявката, в курсора виждаме, че сме използвали индекса, който създадохме в предишното упражнение, наречено оценки.курс_1, това ни помогна да стигнем до там 0 милисекунди време за изпълнение, което е оптималното време за нашите заявки, очевидно, тъй като това е тестова среда, няма да имаме нещо повече от това, но ако можем да направим това упражнение на сървъри с милиони записи, ще осъзнаем силата на индексите.

С това завършихме този урок, създадохме индекси в нашите колекции от документи и освен това проучихме някои инструменти, които ни помагат да получим ключова информация за подобряване и преди всичко за повишаване на производителността на нашите База данни.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave