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

Mongodb præstationsforskel mellem Hash og Stigende indekser (Enhver grund til ikke at bruge hash i et ikke-ordnet felt?)

Givet det felt key er indekseret i begge tilfælde, selve kompleksitetsindekssøgningen ville være meget ens. Som værdien af ​​a ville blive hashed , og gemt i indekstræet.

Hvis vi leder efter de overordnede ydeevneomkostninger, vil den hasherede version pådrage sig en ekstra (ubetydelig) omkostning ved at hashe værdien af ​​a før den matcher værdien i indekstræet. Se også mongo/db/index /hash_access_method.h

Også hashed indeks ville ikke være i stand til at bruge indekspræfikskomprimering ( WiredTiger) . Indekspræfikskomprimering er især effektiv for nogle datasæt, som dem med lav kardinalitet (f.eks. land), eller dem med gentagne værdier, som telefonnumre, socialsikringskoder og geo-koordinater. Det er især effektivt til sammensatte indekser , hvor det første felt gentages med alle de unikke værdier for andet felt.

Generelt er der ingen grund til at hash en ikke-områdeværdi. For at vælge en shard-nøgle skal du overveje kardinaliteten , frekvens , og ændringshastighed af værdien.

Hashed indeks bruges almindeligvis til et specifikt tilfælde af sharding . Når en shard nøgle værdien er en monotonisk stigende/faldende værdi, vil distributionen af ​​data sandsynligvis kun gå i ét skår. Det er her, en hashed shard-nøgle ville være i stand til at forbedre distributionen af ​​skrivninger. Det er en mindre afvejning at forbedre din skæringsklynge i høj grad. Se også Hashed vs Ranged Sharding .

Om det er det værd, afhænger af brugssagen. En tilpasset hash-værdi vil betyde, at enhver forespørgsel efter hash-værdien skal gå gennem en tilpasset hash-kode, dvs. applikation.

Fordelen ved at bruge den indbyggede hash-funktion er, at MongoDB automatisk beregner hasherne, når forespørgsler løses ved hjælp af hash-indekser. Derfor behøver applikationer ikke at beregne hash.



  1. Opslag og sorter den udenlandske samling

  2. Brug af Redis til at cache SQL-resultat

  3. Mongodb Mapreduce giver en fejl

  4. Hvordan laver man en forespørgsel i denne indlejrede dokumentstruktur (MongoDB)?