hash
kiezen over string
heeft veel voordelen en enkele nadelen, afhankelijk van de gebruikssituaties. Als u hash gaat kiezen, is het beter om uw json-object te ontwerpen als hash-velden en waarden zoals;
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"
Dit zijn de voordelen van hash
over strings als u een goede gegevensmodellering uitvoert.
- Aan de prestatiekant hebben de meeste commando's voor zowel strings als hash dezelfde complexiteit.
- Toegang/bijwerken/verwijderen van individuele json-velden op hashes is gemakkelijker in vergelijking met de strings. U hoeft niet de hele string op te halen, te decoderen, wijzigingen aan te brengen en opnieuw in te stellen. U kunt HDEL, HSET of HGET gebruiken voor die bewerkingen zonder het hele object te krijgen.
- Als de grootte van je string-object toeneemt, heb je last van netwerk en bandbreedte terwijl je het hele object overzet (haal/set). Zoals vermeld in de documentatie
Snelheid van RAM en geheugenbandbreedte lijken minder cruciaal voor wereldwijde prestaties, vooral voor kleine objecten. Voor grote objecten (>10 KB) kan het echter merkbaar worden.
- Hashes zijn geheugenvriendelijker dan strings als je een goede maatstaf maakt om je gegevensgrootte te ontwerpen. Zoals vermeld in de documentatie en een voorbeeld van een use-case door Instagram-engineering, kunt u een enorm voordeel behalen met de speciale codering.
Hashes, lijsten, sets die alleen uit gehele getallen bestaan, en gesorteerde sets, indien kleiner dan een bepaald aantal elementen, en tot een maximale elementgrootte, worden gecodeerd op een zeer geheugenefficiënte manier die tot 10 keer minder geheugen gebruikt (met 5 tijd minder gebruikt geheugen is de gemiddelde besparing).
Aan de andere kant, afhankelijk van uw use case(s);
ziplist
komt niet gratis, het is een afweging tussen geheugen en cpu.- Je kunt hash-velden niet gedeeltelijk laten verlopen. Als je het in meerdere strings deelt, mag je
EXPIRE
maar in hashes kan alleen de sleutel op het hoogste niveau met alle waarden verlopen.