Wybór hash
nad string
ma wiele zalet i kilka wad w zależności od przypadków użycia. Jeśli masz zamiar wybrać hash, lepiej zaprojektuj swój obiekt json jako pola i wartości hasz, takie jak;
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"
Oto zalety hash
nad ciągami, gdy wykonasz właściwe modelowanie danych.
- Po stronie wydajności większość poleceń zarówno dla łańcuchów, jak i skrótu ma tę samą złożoność.
- Uzyskiwanie dostępu/aktualizowanie/usuwanie poszczególnych pól json w skrótach jest łatwiejsze, gdy są one porównywane z ciągami. Nie musisz pobierać całego ciągu, dekodować, wprowadzać zmian i ustawiać go od nowa. Możesz użyć HDEL, HSET lub HGET do tych operacji bez pobierania całego obiektu.
- Jeśli rozmiar obiektu tekstowego wzrośnie, będziesz cierpieć z powodu sieci i przepustowości podczas przesyłania (pobierania/ustawiania) całego obiektu. Jak podano w dokumentacji
Szybkość pamięci RAM i przepustowość pamięci wydają się mniej krytyczne dla globalnej wydajności, zwłaszcza w przypadku małych obiektów. W przypadku dużych obiektów (>10 KB) może to jednak stać się zauważalne.
- Skróty są bardziej przyjazne dla pamięci niż ciągi, jeśli tworzysz dobry punkt odniesienia do projektowania rozmiaru danych. Jak podano w dokumentacji i przykładowym przypadku użycia przez inżynierię na Instagramie, możesz uzyskać ogromne korzyści dzięki specjalnemu kodowaniu.
Hasze, listy, zestawy składające się tylko z liczb całkowitych i posortowane zestawy, gdy są mniejsze niż określona liczba elementów i do maksymalnego rozmiaru elementu, są zakodowane w bardzo wydajny sposób, który zużywa do 10 razy mniej pamięci (przy 5 czas mniej pamięci jest średnią oszczędnością).
Z drugiej strony, w zależności od przypadków użycia;
ziplist
nie jest za darmo, jest kompromisem między pamięcią a procesorem.- Nie można częściowo wygasać pól skrótu. Jeśli podzielisz na wiele ciągów, możesz
EXPIRE
je, ale w hashach tylko klucz najwyższego poziomu może wygasnąć ze wszystkimi wartościami.