sql >> Databáze >  >> NoSQL >> Redis

Porovnání výkonu používání hashů Redis vs. mnoha klíčů

Výběr hash přes string má mnoho výhod a některé nevýhody v závislosti na případech použití. Pokud se chystáte zvolit hash, je lepší navrhnout objekt json jako hash pole a hodnoty jako;

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"

Zde jsou výhody hash přes řetězce, když uděláte správné datové modelování.

  • Pokud jde o výkon, většina příkazů pro řetězce i hash je stejně složitá.
  • Přístup/aktualizace/mazání jednotlivých polí json na hash je snazší, když je porovnáváme s řetězci. Nemusíte získat celý řetězec, dekódovat, provádět změny a znovu jej nastavovat. Pro tyto operace můžete použít HDEL, HSET nebo HGET, aniž byste získali celý objekt.
  • Pokud se zvětší velikost vašeho objektu typu string, budete trpět sítí a šířkou pásma při přenosu (získání/nastavení) celého objektu. Jak je uvedeno v dokumentaci

Rychlost paměti RAM a šířka pásma paměti se zdají být méně důležité pro globální výkon, zejména u malých objektů. U velkých objektů (>10 KB) to však může být patrné.

  • Haše jsou šetrnější k paměti než řetězec, pokud pro návrh velikosti dat uděláte dobrý benchmark. Jak je uvedeno v dokumentaci a příkladu použití instagramového inženýrství, můžete získat obrovskou výhodu se speciálním kódováním.

Hashe, seznamy, množiny složené pouze z celých čísel a tříděné množiny, pokud jsou menší než daný počet prvků a do maximální velikosti prvku, jsou kódovány velmi paměťově efektivním způsobem, který využívá až 10krát méně paměti (s 5 čas méně použité paměti je průměrná úspora).

Na druhou stranu, v závislosti na vašem případu použití;

  • ziplist nepřichází zdarma, je to kompromis mezi pamětí a procesorem.
  • Nemůžete částečně vypršet platnost polí hash. Pokud rozdělíte do více řetězců, můžete EXPIRE ale v hash může vypršet platnost pouze klíče nejvyšší úrovně se všemi hodnotami.



  1. MongoDb se vypne pomocí kódu 100

  2. WiredTiger a aktualizace na místě

  3. Odkazování na jiné schéma v Mongoose

  4. Celery beat + redis s heslem vyvolá výjimku No Auth