Kromě skalárních indexů (vzestupně, sestupně) podporuje MongoDB také „hašované“ indexy. Když použijete hash index na pole, MongoDB vypočítá hash hodnoty pole a uloží hash do indexu. Hašované indexy podporují pouze porovnání rovnosti a nepodporují dotazy na rozsah a obvykle se používají ve scénářích shardingu.
Vytvoření MongoDB hašovaného indexu
K vytvoření hašovaného indexu můžete použít následující syntaxi:
db.collection.ensureIndex({'field':'hashed'});
Ve stejném poli můžete vytvořit skalární index i hašovaný index.
Sdílení MongoDB
Typicky je MongoDB sharding implementováno pomocí „rozsahového“ rozdělení. V tomto přístupu je každému datovému fragmentu přiřazen rozsah hodnot shard key. Pokud se klíč střípky monotónně zvětšuje jako časová razítka nebo ID objektu, může to někdy vést k „horkým“ útržkům, protože nejnovější hodnoty jsou vždy směrovány do stejného útržku.
Způsob, jak to obejít, je použít „rozdělování na základě hash“. Vypočítá se hash klíče shardu a tato hodnota hash se použije k nasměrování na fragment namísto skutečné hodnoty. To pomáhá rovnoměrně rozložit zatížení mezi všechny fragmenty namísto odesílání všech nejnovějších dat do stejného datového fragmentu. Rozdělování na základě hash je implementováno pomocí hashovaných indexů na vašem shard klíči. Další informace naleznete v dokumentaci ke sdílení.
Hašovaný index Klady a zápory
-
Výhody
Hašované indexy bývají menší než skalární indexy, protože místo úplného klíče je uložen pouze hash klíče. Např. V jednoduchém testu se 100 000 dokumenty jsme přidali hashované a skalární indexy do pole řetězce – ‚fieldName‘. Jak je ukázáno níže, hashovaný index má tendenci být podstatně menší než skalární indexy:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
Nevýhody
Nepodporuje dotazy na rozsah. Pokud spustíte dotaz na rozsah na hašovaném indexu, výsledkem bude prohledání indexu.
Omezení hashovaného indexu
- Hašované indexy nepodporují pole.
- Hašované indexy nemohou být složené indexy.
- K hašovaným indexům nelze přidat jedinečná omezení.