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

Dlaczego i kiedy konieczne jest przebudowanie indeksów w MongoDB?

Zgodnie z dokumentacją MongoDB, generalnie nie ma potrzeby rutynowego przebudowywania indeksów.

UWAGA :Wszelkie porady dotyczące przechowywania stają się bardziej interesujące dzięki MongoDB 3.0+, które wprowadziło wtykowy interfejs API silnika pamięci masowej . Moje komentarze poniżej odnoszą się w szczególności do domyślnego mechanizmu przechowywania MMAP w MongoDB 3.0 i wcześniejszych. WiredTiger i inne silniki pamięci masowej mają różne implementacje pamięci masowej dla danych i indeksów.

Odbudowanie indeksu za pomocą silnika pamięci masowej MMAP może przynieść pewne korzyści, jeśli:

  • Indeks zajmuje więcej miejsca niż oczekiwano w porównaniu z danymi. Uwaga:musisz monitorować dane historyczne i rozmiar indeksu, aby uzyskać punkt odniesienia do porównania.

  • Chcesz przeprowadzić migrację ze starszego formatu indeksu do nowszego. Jeśli wskazana jest reindeksacja, zostanie to wymienione w uwagach dotyczących aktualizacji. Na przykład MongoDB 2.0 wprowadził znaczące poprawę wydajności indeksowania dlatego informacje o wydaniu zawierają sugerowaną reindeksację do formatu v2.0 po aktualizacji. Podobnie MongoDB 2.6 wprowadził 2dsphere (v2.0) indeksy które mają inne zachowanie domyślne (domyślnie rzadki). Istniejące indeksy nie są odbudowywane po uaktualnieniu wersji indeksu; wybór czy/kiedy uaktualnić należy do administratora bazy danych.

  • Zmieniłeś _id format kolekcji do lub z monotonicznie rosnącego klucza (np. ObjectID) do wartości losowej. To trochę ezoteryczne, ale istnieje optymalizacja indeksu, która dzieli segmenty b-drzewa 90/10 (zamiast 50/50), jeśli wstawiasz _id s, które zawsze rosną (ref:SERVER-983 ). Jeśli charakter Twojego _id Jeśli zmieni się znacząco, możliwe jest zbudowanie wydajniejszego b-drzewa z ponownym indeksowaniem.

Aby uzyskać więcej informacji na temat ogólnego zachowania B-drzewa, zobacz:Wikipedia:B-drzewo

Wizualizacja wykorzystania indeksu

Jeśli naprawdę chcesz zagłębić się w wewnętrzne elementy indeksu, możesz wypróbować kilka eksperymentalnych poleceń/narzędzi. Spodziewam się, że są one ograniczone tylko do MongoDB 2.4 i 2.6:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak sortować dane w Mongo w niestandardowej kolejności

  2. MongoDB:unikalny klucz w osadzonym dokumencie

  3. Które API Pythona powinno być używane z Mongo DB i Django

  4. Jak poprawić wydajność update() i save() w MongoDB?

  5. Jak możemy zadać zapytanie o osadzone dokumenty za pomocą sterownika java?