Oprócz indeksów skalarnych (rosnąco, malejąco) MongoDB obsługuje również indeksy haszowane. Gdy używasz indeksu haszowanego w polu, MongoDB oblicza skrót wartości pola i przechowuje ten skrót w indeksie. Indeksy haszowane obsługują tylko porównywanie równości i nie obsługują zapytań dotyczących zakresu i są zwykle używane w scenariuszach fragmentowania.
Tworzenie indeksu haszowanego MongoDB
Aby utworzyć indeks haszowany, możesz użyć następującej składni:
db.collection.ensureIndex({'field':'hashed'});
Możesz utworzyć zarówno indeks skalarny, jak i indeks haszowany w tym samym polu.
Sharding MongoDB
Zazwyczaj sharding MongoDB jest implementowany przy użyciu partycjonowania „opartego na zakresach”. W tym podejściu każdemu fragmentowi jest przypisywany zakres wartości klucza fragmentu. Jeśli klucz fragmentu stale rośnie, jak sygnatury czasowe lub identyfikator obiektu, może to czasami skutkować „gorącym” fragmentem, ponieważ najnowsze wartości zawsze są kierowane do tego samego fragmentu.
Sposobem na obejście tego jest użycie „partycjonowania opartego na hashowaniu”. Obliczany jest skrót klucza fragmentu, a ta wartość skrótu jest używana do kierowania do fragmentu zamiast rzeczywistej wartości. Pomaga to równomiernie rozłożyć obciążenie na wszystkie fragmenty, zamiast wysyłać wszystkie najnowsze dane do tego samego fragmentu. Partycjonowanie oparte na mieszaniu jest realizowane przy użyciu indeksów mieszanych w kluczu fragmentu. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją shardingu.
Hashed Index Plusy i minusy
-
Zalety
Indeksy haszowane są zwykle mniejsze niż indeksy skalarne, ponieważ zamiast pełnego klucza jest przechowywany tylko skrót klucza. Np. W prostym teście z 100k dokumentów dodaliśmy indeksy haszowane i skalarne do pola tekstowego – „fieldName”. Jak pokazano poniżej, indeks haszowany jest zwykle znacznie mniejszy niż indeksy skalarne:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
Wady
Nie obsługuje zapytań o zakres. Jeśli uruchomisz zapytanie zakresowe dla zaszyfrowanego indeksu, spowoduje to skanowanie indeksu.
Zaszyfrowane ograniczenia indeksu
- Zaszyfrowane indeksy nie obsługują tablic.
- Indeksy haszowane nie mogą być indeksami złożonymi.
- Nie możesz dodać unikalnych ograniczeń dla zaszyfrowanych indeksów.