Praca z indeksami w MongoDB

Powszechnie wiadomo, że zasoby są bardzo ograniczone w środowiskach produkcyjnych i prawdą jest, że obecnie istnieją serwery dziesięciokrotnie wydajniejsze niż te, które istniały 5 lat temu, jednak wraz ze wzrostem mocy tych komputerów rośnie również zapytanie o dane.

W zależności od ilości czasu potrzebnego na wykonanie zapytania, możemy powiedzieć, czy jest ono krytyczne, czy nie, jednak nawet jeśli nie jest krytyczne, zawsze jest mały margines na poprawę, dzięki temu zaoszczędzimy sekundy wykonania, które przy koniec dnia zamieniają się w minuty, co daje nam możliwość poprawy komfortu użytkowania.

WymaganiaDo przeprowadzenia tego samouczka potrzebna jest funkcjonalna instalacja MongoDB z wystarczającymi uprawnieniami, abyśmy mogli pracować w konsoli poleceń.

Potrzebujemy również zbiór danych lub dokumenty Aby uzupełnić naszą kolekcję, w poprzednich samouczkach oferowaliśmy początkowy zestaw danych, jednak dla tych, którzy go nie mają, mogą skorzystać z tego:

 db.guiamongo.insert ({"imię": "Maria", "wiek": "25", "płeć": "Kobieta", "kraj": "Kolumbia"}); db.guiamongo.insert ({"imię ":" Pedro "," wiek ":" 32 "," płeć ":" Męski "," kraj ":" Ekwador "}); db.guiamongo.insert ({" name ":" Ramon "," wiek " : "18", "płeć": "Mężczyzna", "kraj": "Honduras"}); db.guiamongo.insert ({"imię": "John", "wiek": "22", "płeć": "Mężczyzna", "kraj": "Argentyna"}); db.guiamongo.insert ({"imię": "Rosa", "wiek": "45", "płeć": "Kobieta", "kraj": " Chile "," języki ​​: [" Esp "," Ing "," Fra "]});
Dzięki temu będziemy mieli dość na mały start i dzięki temu uzyskamy wyniki z ćwiczeń, które przedstawimy poniżej.

1. Indeksowanie MongoDB


Indeksowanie lub praca z indeksami to pojęcie wspólne dla MongoDB z Bazy danych relacyjny, to znaczy, jeśli mamy pojęcie o tym pojęciu, możemy zrozumieć, jak to działa w MongoDB niedługo po prostu musimy trzymać się określonej składni.

Praca z indeksamiJeśli pojęcie jest nam obce, należy zauważyć, że praca z indeksy to nic innego jak określenie Baza danych jakich pól należy użyć w pamięci, aby wyszukiwanie było bardziej wydajne, na przykład, jeśli odpytujemy dużą kolekcję dokumentów o pole o nazwie Nazwa, idealnym rozwiązaniem byłoby zindeksowanie tego pola, aby silnik wiedział, że powinien być kierowany bezpośrednio przez to pole, dzięki czemu zapytania korzystające z tego pola zaczynają działać szybciej.

Aby utworzyć indeks na MongoDB co powinniśmy zrobić, to użyć funkcji zapewnićIndeks () a jako parametr przekazać dokument JSON wskazując pola lub właściwości naszego dokumentu, z którymi musimy dostosować się do wspomnianego indeksu. Spójrzmy na mały przykład tego.

Załóżmy, że mamy kolekcję o nazwie guamongo i szukamy pola o nazwie name, kod będzie następujący:

 db.guiamongo.find ({"imię": "Imię"})
Jest to normalne zapytanie, które nie ma nic szczególnego, jedynym problemem jest to, że jeśli są miliony dokumentów, będzie to bardzo powolne, więc aby utworzyć indeks, wystarczy określić go w następujący sposób:
 db.guiamongo.ensureIndex ({„imię”: 1})
Dzięki temu stworzyliśmy już indeks dla zapytania, jeśli wykonamy je ponownie, będzie to znacznie szybsze. Zobaczmy, jak to wygląda na naszej konsoli MongoDB:

Możemy zauważyć, że po utworzeniu indeksu MongoDB Zwraca nam dokument, w którym wskazuje stan naszej funkcji i ile indeksów mieliśmy przed i po aplikacji, dodatkowo pokazując nam pole w porządku na 1, co oznacza, że ​​wykonanie się powiodło.

Poprzednie zapytanie jest całkiem przydatne dla pojedynczego pola, ale jeśli wykonamy następujące czynności:

 db.guiamongo.find ({"imię": "Imię", "wiek": {"$ gt": "20"}}).sort ({"wiek": - 1});
Zdajemy sobie sprawę, że w tym przypadku indeks Poprzednia już nie działa, to dlatego, że zapytanie wykorzystuje inną kombinację pól do wyszukiwania, dlatego musimy zrobić nowy indeks korzystając z tego, czego nauczyliśmy się wcześniej, zobaczmy jak by to było:
 db.guiamongo.ensureIndex ("imię": 1, "wiek": 1);
Teraz, jeśli sprawdzimy naszą bazę danych w następujący sposób, zobaczymy, że mamy nowy indeks w kolekcji:

2. Wada w korzystaniu z indeksów


Pomimo wielkich zalet użytkowania i pracy indeksyNie zawsze są one korzystne, dlatego musimy dokładnie przeanalizować przed wdrożeniem tej funkcji w naszej Bazie Danych.

Największa wadaten wielka wada w stosowaniu indeksów jest to, że silnik musi uwzględniać nowe dane, które wstawiamy do tabeli lub listy indeksów, z tego powodu za każdym razem, gdy wykonywana jest funkcja wstawić () zostanie utworzonych szereg sąsiadujących procesów, które mogą zwiększyć użycie dysku i przetwarzania.

Kolejną wadą jest to, że mamy maksymalnie 64 indeksy na kolekcję, Dlatego musimy pracować z jak najmniejszą ich ilością w naszej Bazie Danych, zapewniając w ten sposób, że tylko to, co jest absolutnie konieczne, jest używane.

3. Skąd wiedzieć, kiedy używać indeksu?


Ponieważ znamy ograniczenia i wady korzystania z indeksów, dobrym ćwiczeniem, aby wiedzieć, czy powinniśmy je tworzyć, czy nie, jest zadawanie tej serii pytań, jeśli potrafimy odpowiedzieć na wszystkie, mamy niezbędne cechy do stworzenia indeksu, na z drugiej strony, jeśli nie możemy, będziemy musieli przeanalizować sytuację z innego punktu widzenia, spójrzmy na pytania:

Jakie zapytania wykonujemy?Musimy przeprowadzić analizę sytuacji i zobaczyć, co dzieje się w naszej kolekcji, dzięki temu dowiemy się, czy potrzebujemy indeksów, a jeśli nie, to może trzeba je wyeliminować.

Jaka jest prawidłowa orientacja indeksów?Musimy wiedzieć, jak porządkujemy dane w indeksach, czy są one alfabetycznie czy numerycznie, rosnąco czy malejąco, ma to bezpośredni wpływ na szybkość indeksowania.

Jak będzie się skalować?Musimy pomyśleć o wzroście naszych danych, bo w ten sposób będziemy wiedzieć, czy to, co działa dzisiaj, jutro z 10 lub 100 razy większą ilością danych, będzie działać poprawnie.

Oczywiście jest to tylko przewodnik, istnieją specjalne i bardzo specyficzne przypadki każdego administratora aplikacji, w których musisz zastosować swoje kryteria w tego typu samouczkach, jednak jest to dobry przewodnik, aby wprowadzić nas w świat optymalizacji danych.

4. Indeksy w osadzonych dokumentach


Struktura dokumentów, które możemy obsłużyć w MongoDB nadaje się do złożonego przechowywania danych, nie wszystkie potrzebne nam dane będą na tym samym poziomie, dlatego potrzeba tworzenia osadzone indeksy dokumentów. Z tymi indeksami MongoDB Będziesz mógł indeksować dane, które mają bardziej złożone struktury.

Aby osiągnąć wynik, użyjemy tak zwanej notacja kropkowa, co jest niczym innym jak dostępem do pól osadzonych dokumentów tak, jakby były one właściwościami obiektu przez punkt. W poniższym przykładzie utworzymy indeks tych cech, zobaczmy początkowo składnię.

Najpierw wstawimy rekord z osadzonym dokumentem w naszym testowym zbiorze danych:

 db.guiamongo.insert ({"imię": "Juan", "wiek": "40", "płeć": "Mężczyzna", "kraj": "Brazylia", "kwalifikacje": {"historia": "85 "," literatura ":" 90 "," kurs ":" 3 "}});
Następnie wykonamy proste zapytanie w tym przypadku dla właściwości kursu:
 db.guiamongo.find ({„oceny.kurs”: ”3”});
Teraz, jeśli chcemy utworzyć indeks, musimy po prostu wykonać następujące czynności:
 db.guiamongo.ensureIndex ({„oceny.kursu”: 1});
Dzięki temu stworzyliśmy już indeks dokumentu osadzonego w innym w kolekcji w MongoDB. Jeśli spojrzymy na to, co powinniśmy uzyskać w konsoli:

5. Użyj wyjaśnij ()


Ponieważ wiemy, jak tworzyć indeksy i mamy pomysł, kiedy i dlaczego powinniśmy je tworzyć, to jednak nie widzieliśmy jeszcze narzędzia bardzo ważnego, które pozwala nam dowiedzieć się trochę więcej i posunąć się dalej nasze zapytania; odnosimy się do wyjaśniać () ta funkcja pozwala nam poznać czas i indeksy użyte w zapytaniach.

Co nam to mówi?Powrót wyjaśniać () Jest to dokument, w którym wskaże kursor, którego używa do wyszukiwania, następnie wskazuje granice indeksu, mamy też pole, które ma nazwę milis i wskaże ilość czasu w milisekundach, jaką zajmuje wykonanie zapytania, ta ostatnia jest bardzo ważna przy zrozumieniu wydajności naszego Baza danych.

Zobaczmy, jak możemy zastosować tę funkcję do zapytania, użyjemy tej, którą zrobiliśmy w naszym poprzednim przykładzie:

 db.guiamongo.find ({„oceny.kurs”: ”3”}).wyjaśnij ();
Po zastosowaniu powinien zwrócić coś takiego:

Odnotowujemy, w jaki sposób są nam udostępniane dane, aby móc przeanalizować zapytanie, w kursor widzimy, że użyliśmy indeksu, który utworzyliśmy w poprzednim ćwiczeniu o nazwie stopnie.kurs_1, to pomogło nam się tam dostać 0 milisekund czas wykonania, który jest optymalnym czasem dla naszych zapytań, oczywiście jako że jest to środowisko testowe nie będziemy mieli nic poza tym, ale jeśli potrafimy wykonać to ćwiczenie na serwerach z milionami rekordów, zdamy sobie sprawę z potęgi indeksów.

Na tym zakończyliśmy ten samouczek, który stworzyliśmy indeksy w naszych zbiorach dokumentów, a dodatkowo zbadaliśmy kilka narzędzi, które pomagają nam uzyskać kluczowe informacje w celu poprawy, a przede wszystkim zwiększenia wydajności naszych Baza danych.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave