sql >> Base de Datos >  >> NoSQL >> Redis

Comparación de rendimiento del uso de hashes de Redis frente a muchas claves

Elegir hash sobre string tiene muchos beneficios y algunos inconvenientes dependiendo de los casos de uso. Si va a elegir hash, es mejor diseñar su objeto json como campos hash y valores 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"

Estos son los beneficios de hash sobre cadenas cuando realiza un modelado de datos adecuado.

  • Por el lado del rendimiento, la mayoría de los comandos para cadenas y hash tienen la misma complejidad.
  • Acceda/actualice/elimine campos json individuales en hashes más fácilmente en comparación con las cadenas. No tiene que obtener toda la cadena, decodificarla, hacer cambios y configurarla nuevamente. Puede usar HDEL, HSET o HGET para esas operaciones sin obtener el objeto completo.
  • Si el tamaño de su objeto de cadena aumenta, sufrirá de red y ancho de banda mientras transfiere (obtiene/establece) todo el objeto. Como se indica en la documentación

La velocidad de la RAM y el ancho de banda de la memoria parecen menos críticos para el rendimiento global, especialmente para objetos pequeños. Sin embargo, para objetos grandes (>10 KB), puede ser perceptible.

  • Los hashes son más amigables con la memoria que las cadenas si haces un buen punto de referencia para diseñar el tamaño de tus datos. Como se indica en la documentación y en un caso de uso de ejemplo de la ingeniería de Instagram, puede obtener un gran beneficio con la codificación especial.

Hashes, listas, conjuntos compuestos solo de números enteros y conjuntos ordenados, cuando son más pequeños que un número determinado de elementos y hasta un tamaño de elemento máximo, se codifican de una manera muy eficiente en memoria que utiliza hasta 10 veces menos memoria (con 5 tiempo menos memoria utilizada siendo el ahorro medio).

Por otro lado, dependiendo de su(s) caso(s) de uso;

  • ziplist no es gratis, es una compensación entre la memoria y la CPU.
  • No puede caducar parcialmente los campos hash. Si divide en múltiples cadenas, entonces puede EXPIRE pero en hashes solo la clave de nivel superior puede caducar con todos los valores.