Ud over skalære indekser (stigende, faldende) understøtter MongoDB også 'hashed' indekser. Når du bruger et hash-indeks på et felt, beregner MongoDB en hash af feltværdien og gemmer hashen i indekset. Hashed-indekser understøtter kun lighedssammenligning og understøtter ikke intervalforespørgsler og bruges typisk i sharding-scenarier.
Oprettelse af et MongoDB Hashed Index
Du kan bruge følgende syntaks til at oprette et hashed indeks:
db.collection.ensureIndex({'field':'hashed'});
Du kan oprette både et skalært indeks og et hashedindeks på det samme felt.
MongoDB Sharding
Typisk implementeres MongoDB-sharding ved hjælp af "områdebaseret" partitionering. I denne tilgang tildeles hvert shard en række værdier af shard-nøglen. Hvis shard-nøglen er monotont stigende som tidsstempler eller objectID, kan dette nogle gange resultere i et "hot" shard, fordi de seneste værdier altid ender med at blive dirigeret til det samme shard.
Måden at omgå dette på er at bruge 'hash-baseret partitionering'. En hash af shard-nøglen beregnes, og denne hashværdi bruges til at rute til et shard i stedet for den faktiske værdi. Dette hjælper med at fordele belastningen jævnt på tværs af alle shards i stedet for at sende alle de nyeste data til den samme shard. Hash-baseret partitionering er implementeret ved hjælp af hash-indekser på din shard-nøgle. For mere information henvises til sønderdelingsdokumentationen.
Hashed Index fordele og ulemper
-
Fordele
Hashed-indekser har tendens til at være mindre end de skalære indekser, fordi kun en hash af nøglen gemmes i stedet for den fulde nøgle. For eksempel. I en simpel test med 100.000 dokumenter tilføjede vi hash- og skalarindekser på et strengfelt - 'fieldName'. Som vist nedenfor har det hash-indekserede indeks en tendens til at være betydeligt mindre end de skalære indekser:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
Idele
Understøtter ikke områdeforespørgsler. Hvis du kører en intervalforespørgsel på et hashed indeks, vil det resultere i en indeksscanning.
Hashede indeksbegrænsninger
- Hashede indekser understøtter ikke arrays.
- Hashede indekser kan ikke være sammensatte indekser.
- Du kan ikke tilføje unikke begrænsninger på hashed-indekser.