Cómo ajustar las codificaciones internas de Valkey para ahorrar memoria

Fuentes: The secret life of data in Valkey

Valkey, la base de datos en memoria, abstrae la representación real de los datos en RAM mediante codificaciones automáticas que elige según el tamaño y la cantidad de elementos. Cada tipo de dato (hashes, listas, conjuntos, conjuntos ordenados y streams) puede almacenarse con estructuras más o menos compactas, y la transición entre ellas depende de umbrales de configuración como hash-max-listpack-entries, hash-max-listpack-value, list-max-listpack-size, set-max-intset-entries, set-max-listpack-entries, set-max-listpack-value, zset-max-listpack-entries y zset-max-listpack-value.

Un valor de hash de 64 bytes se codifica como listpack y consume 120 bytes por clave, pero al pasar a 65 bytes el sistema salta a una tabla hash que eleva el consumo a 212 bytes, un 76,67% más. El comando OBJECT ENCODING permite inspeccionar la codificación activa y MEMORY USAGE mide el consumo real de cada clave. Los streams y los módulos de Valkey no dependen de estos umbrales configurables.

Revisar los valores por defecto merece la pena cuando se busca reducir coste o exprimir la infraestructura. Ajustar hash-max-listpack-value al tamaño real de los datos puede permitir mantener la codificación compacta en un porcentaje mucho mayor de claves. Los autores ilustran el potencial con dos escenarios: un caso extremo en el que el 95% de las claves superan el umbral permite pasar de un clúster de 100 GB repartido en 5 nodos primarios de 20 GB a uno de 58,8 GB en 3 primarios, eliminando dos nodos primarios y sus réplicas; en un escenario más realista con el 60% de las claves por encima del umbral, se mantendrían los 5 nodos pero cada uno bajaría de 20 GB a 14,8 GB, con la posibilidad de contratar máquinas de 16 GB de RAM. El ahorro final depende de los saltos de precio por especificaciones en cloud o en entornos on-premises.