sql >> Database teknologi >  >> NoSQL >> Redis

Ydeevnesammenligning af brug af Redis-hashes vs mange nøgler

Ved at vælge hash over string har mange fordele og nogle ulemper afhængigt af anvendelsestilfældene. Hvis du skal vælge hash, er det bedre at designe dit json-objekt som hash-felter og værdier såsom;

127.0.0.1:6379> hset user:1 ssn 10101010101 name john surname wick date 2020-02-02 location continental
(integer) 5
127.0.0.1:6379> hgetall user:1
 1) "ssn"
 2) "10101010101"
 3) "name"
 4) "john"
 5) "surname"
 6) "wick"
 7) "date"
 8) "2020-02-02"
 9) "location"
10) "continental"

Her er fordelene ved hash over strenge, når du laver en ordentlig datamodellering.

  • På ydeevnesiden har de fleste af kommandoerne for både strenge og hash samme kompleksitet.
  • Få lettere adgang til/opdater/slet individuelle json-felter på hashes, når det sammenlignes med strengene. Du behøver ikke at hente hele strengen, afkode, foretage ændringer og indstille den igen. Du kan bruge HDEL, HSET eller HGET til disse operationer uden at få hele objektet.
  • Hvis størrelsen af ​​dit strengobjekt øges, vil du lide af netværk og båndbredde, mens du overfører (hent/sæt) hele objektet. Som det står i dokumentationen

Hastighed på RAM og hukommelsesbåndbredde synes mindre kritisk for global ydeevne, især for små objekter. For store objekter (>10 KB) kan det dog blive mærkbart.

  • Hashes er mere hukommelsesvenlige end strenge, hvis du laver en god benchmark til at designe din datastørrelse. Som det står i dokumentationen og et eksempel på use case fra instagram engineering kan du få en kæmpe fordel med den specielle kodning.

Hashes, lister, sæt, der kun består af heltal, og sorterede sæt, når de er mindre end et givet antal elementer, og op til en maksimal elementstørrelse, er kodet på en meget hukommelseseffektiv måde, der bruger op til 10 gange mindre hukommelse (med 5 tid mindre brugt hukommelse er den gennemsnitlige besparelse).

På den anden side, afhængigt af din(e) use case(r);

  • ziplist kommer ikke gratis, det er en afvejning mellem hukommelse og cpu.
  • Du kan ikke delvist udløbe hash-felter. Hvis du deler i flere strenge, kan du EXPIRE dem, men i hashes kan kun topniveaunøglen udløbes med alle værdierne.



  1. Mongo unikke indeks ufølsomme

  2. Brug af kort/reducer til kortlægning af egenskaberne i en samling

  3. Redis pipelinet ordre for udførelse

  4. Hvordan undgår man transparent_hugepage/defrag advarsel fra mongodb?