Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Comparação de desempenho do uso de hashes Redis versus muitas chaves


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.