Избиране на hash
над string
има много предимства и някои недостатъци в зависимост от случаите на употреба. Ако ще изберете хеш, по-добре е да проектирате своя json обект като хеш полета и стойности като;
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"
Ето предимствата на hash
над низове, когато правите правилно моделиране на данни.
- От страна на производителността повечето команди както за низове, така и за хеш имат еднаква сложност.
- По-лесен достъп/актуализиране/изтриване на отделни json полета в хешове, когато се сравняват с низовете. Не е нужно да получавате целия низ, да декодирате, да правите промени и да го задавате отново. Можете да използвате HDEL, HSET или HGET за тези операции, без да получавате целия обект.
- Ако размерът на вашия низ обект се увеличи, ще страдате от мрежа и честотна лента, докато прехвърляте (получавате/настройвате) целия обект. Както е посочено в документацията
Скоростта на RAM и честотната лента на паметта изглеждат по-малко критични за глобалната производителност, особено за малки обекти. За големи обекти (>10 KB) обаче може да стане забележимо.
- Хешовете са по-удобни за паметта от низовете, ако направите добър сравнителен тест за проектиране на размера на данните си. Както е посочено в документацията и примерен случай на използване от инстаграм инженеринг, може да получите огромна полза със специалното кодиране.
Хешове, списъци, набори, съставени само от цели числа, и сортирани набори, когато са по-малки от даден брой елементи и до максимален размер на елемента, се кодират по много ефективен от паметта начин, който използва до 10 пъти по-малко памет (с 5 време по-малко използвана памет е средното спестяване).
От друга страна, в зависимост от вашия случай(и);
ziplist
не се предлага безплатно, това е компромис между памет и процесор.- Не можете да изтекате частично хеш полета. Ако разделите на множество низове, можете да
EXPIRE
ги, но в хешове само ключът от най-високо ниво може да бъде изтекъл с всички стойности.