MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Indeks MongoDB/Mongoose przyspiesza czy spowalnia zapytanie?

Źle to czytasz

Błędnie odczytujesz intencje cytowanego tam bloku, co .ensureIndex() (teraz przestarzałe, ale nadal wywoływane przez kod mangusty) faktycznie działa tutaj w kontekście.

W manguście indeks definiuje się na poziomie schematu lub modelu, zgodnie z projektem. To, co mangusta „automatycznie” robi dla Ciebie, to podczas połączenia, które sprawdza każdy zarejestrowany model, a następnie wywołuje odpowiedni .ensureIndex() metody dla dostarczonych definicji indeksów.

Co to właściwie robi?

Cóż, w większości przypadków, będąc po tym, jak już wcześniej uruchomiłeś swoją aplikację i .ensureIndexes() uruchomiona metoda to Absolutnie nic . To trochę przesada, ale to mniej więcej brzmi prawdziwie.

Ponieważ definicja indeksu została już utworzona w kolekcji serwera, kolejne wywołanie nic nie robi. Oznacza to, że nie upuszcza indeksu i nie „odtwarza”. Tak więc rzeczywisty koszt jest w zasadzie niczym, po utworzeniu samego indeksu.

Tworzenie indeksów

Tak więc, ponieważ mangusta jest tylko warstwą nad standardowym API, createIndex() metoda zawiera wszystkie szczegóły tego, co się dzieje.

Należy wziąć pod uwagę kilka szczegółów, takich jak to, że budowanie indeksu może nastąpić w „tło”, i chociaż jest to mniej inwazyjne dla aplikacji, odbywa się to na własny koszt. Warto zauważyć, że rozmiar indeksu z generowania „w tle” będzie większy niż w przypadku zbudowania go na pierwszym planie, blokując inne operacje.

Również wszystkie indeksy mają swoją cenę, zwłaszcza pod względem wykorzystania dysku, a także dodatkowego kosztu zapisania dodatkowych informacji poza samymi danymi gromadzenia.

Zaletą indeksu jest to, że znacznie szybciej jest „wyszukiwać” wartości zawarte w indeksie niż przeszukiwać całą kolekcję i dopasowywać możliwe warunki.

Są to podstawowe „kompromisy” związane z indeksami.

Wzorzec wdrożenia

Powrót do bloku cytowanego z dokumentacji, za tą radą kryje się prawdziwy cel.

Typowe we wzorcach wdrażania, a zwłaszcza przy migracjach danych, jest wykonywanie czynności w następującej kolejności:

  1. Wypełnij dane w odpowiednich kolekcjach/tabelach
  2. Włącz indeksy danych kolekcji/tabeli odpowiednich do Twoich potrzeb

Dzieje się tak, ponieważ tworzenie indeksu wiąże się z kosztami, a jak wspomniano wcześniej, pożądane jest uzyskanie najbardziej optymalnego rozmiaru z budowy indeksu, a także uniknięcie sytuacji, w której każde wstawienie dokumentu wiąże się również z pisaniem wpisu indeksu, gdy jesteś robienie tego "ładowania" zbiorczo.

Więc po to są indeksy, to są koszty i korzyści oraz wyjaśnione jest przesłanie w dokumentacji dotyczącej mangusty.

Ogólnie jednak sugeruję przeczytanie Indeksy baz danych za to, czym są i co robią. Pomyśl o wejściu do biblioteki, aby znaleźć książkę. Tam przy wejściu znajduje się kartoteka. Czy chodzisz po bibliotece, aby znaleźć książkę, której szukasz? A może sprawdzasz to w indeksie kart, aby dowiedzieć się, gdzie to jest? Utworzenie i aktualizowanie tego indeksu zajęło komuś trochę czasu, ale pozwala zaoszczędzić czas na chodzenie po całej bibliotece, aby znaleźć swoją książkę.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB znajduje zagnieżdżone obiekty spełniające kryteria

  2. Mutex z MongoDB

  3. Zapytanie w funkcji redukcji mapy MongoDB

  4. Wsparcie geoprzestrzenne w MongoDB

  5. MongoDB, Flask, agregacja z zapytaniem $unwind