sql >> Database teknologi >  >> NoSQL >> MongoDB

Sagen om MongoDB hashed-indekser

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.

MongoDB Hashed Indexes for Shards - Pro &ConsKlik for at tweete

Hashede indeksbegrænsninger

    1. Hashede indekser understøtter ikke arrays.
    2. Hashede indekser kan ikke være sammensatte indekser.
    3. Du kan ikke tilføje unikke begrænsninger på hashed-indekser.


  1. Brug flere DB'er med et Redis Lua-script?

  2. Sådan opretter du bruger og tilføjer rolle i MongoDB

  3. MongoDB:Hvordan får man en særskilt liste over underdokumentfeltværdier?

  4. MongoDB udtrækker værdier fra BasicDBObject (Java)