Förutom skalära index (stigande, fallande), stöder MongoDB även "hashade" index. När du använder ett hashat index på ett fält, beräknar MongoDB en hash av fältvärdet och lagrar hashen i indexet. Hashade index stöder endast jämställdhetsjämförelse och stöder inte intervallfrågor, och används vanligtvis i fragmenteringsscenarier.
Skapa ett MongoDB Hashed Index
Du kan använda följande syntax för att skapa ett hashat index:
db.collection.ensureIndex({'field':'hashed'});
Du kan skapa både ett skalärt index och ett hashat index på samma fält.
MongoDB Sharding
Vanligtvis implementeras MongoDB-sharding med hjälp av "räckviddsbaserad" partitionering. I detta tillvägagångssätt tilldelas varje shard ett värdeintervall för shard-nyckeln. Om shard-nyckeln ökar monotont som tidsstämplar eller objectID, kan detta ibland resultera i en "het" shard eftersom de senaste värdena alltid hamnar i omdirigering till samma shard.
Sättet att komma runt detta är att använda "hash-baserad partitionering". En hash av shard-nyckeln beräknas och detta hashvärde används för att dirigera till en shard istället för det faktiska värdet. Detta hjälper till att fördela belastningen jämnt över alla skärvor istället för att skicka all den senaste data till samma skärva. Hash-baserad partitionering implementeras med hashade index på din shard-nyckel. För mer information, se sönderdelningsdokumentationen.
Hashat indexför- och nackdelar
-
Proffs
Hashade index tenderar att vara mindre än de skalära indexen eftersom endast en hash av nyckeln lagras istället för hela nyckeln. T.ex. I ett enkelt test med 100 000 dokument lade vi till hashade och skalära index på ett strängfält – ‘fieldName’. Som visas nedan tenderar det hashade indexet att vara betydligt mindre än de skalära indexen:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
Nackdelar
Stöder inte intervallfrågor. Om du kör en intervallfråga på ett hashat index kommer det att resultera i en indexskanning.
Hashade indexbegränsningar
- Hashade index stöder inte arrayer.
- Hashade index kan inte vara sammansatta index.
- Du kan inte lägga till unika begränsningar på hashade index.