Escolhendo
hash
sobre string
tem muitos benefícios e algumas desvantagens, dependendo dos casos de uso. Se você for escolher hash, é melhor projetar seu objeto json como campos e valores de hash, como; 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"
Aqui estão os benefícios do
hash
sobre strings quando você faz uma modelagem de dados adequada. - No lado do desempenho, a maioria dos comandos para strings e hash tem a mesma complexidade.
- Acessar/atualizar/excluir campos json individuais em hashes mais fácil quando comparado com as strings. Você não precisa pegar a string inteira, decodificar, fazer alterações e configurá-la novamente. Você pode usar HDEL, HSET ou HGET para essas operações sem obter o objeto inteiro.
- Se o tamanho do seu objeto string aumentar, você sofrerá com a rede e a largura de banda ao transferir(get/set) todo o objeto. Como consta na documentação
A velocidade da RAM e a largura de banda da memória parecem menos críticas para o desempenho global, especialmente para objetos pequenos. Para objetos grandes (> 10 KB), isso pode se tornar perceptível.
- Os hashes são mais amigáveis à memória do que as strings se você fizer uma boa referência para projetar o tamanho dos dados. Como é declarado na documentação e em um exemplo de caso de uso da engenharia do instagram, você pode obter um grande benefício com a codificação especial.
Hashes, Listas, Conjuntos compostos apenas por inteiros e Conjuntos Ordenados, quando menores que um determinado número de elementos e até um tamanho máximo de elemento, são codificados de uma maneira muito eficiente de memória que usa até 10 vezes menos memória (com 5 tempo menos memória usada sendo a economia média).
Por outro lado, dependendo do(s) seu(s) caso(s) de uso;
ziplist
não vem de graça, é uma troca entre memória e CPU.- Você não pode expirar parcialmente os campos de hash. Se você dividir em várias strings, poderá
EXPIRE
mas em hashes apenas a chave de nível superior pode expirar com todos os valores.