MySQL ofrece una función llamada compress (y lo inverso, uncompress) que sirve para almacenar datos comprimidos, ahorrando espacio.
En este post voy a explicar cómo comprimir y descomprimir datos en MySQL con ejemplos.
El manual indica que para que estas funciones estén disponibles, el software debió ser compilado con una librería de compresión, por ejemplo, zlib.
Para comprobar que puedes comprimir y descomprimir datos ejecuta una simple consulta:
select compress("hola");
Si no hay problemas (como que la función no existe, o si devuelve null) entonces puedes continuar.
Se recomienda definir el tipo de dato como BLOB o VARBINARY. Como ejemplo tenemos la siguiente tabla:
create table probar_compresion(
id bigint unsigned not null auto_increment,
original text not null,
comprimido blob not null,
primary key(id)
);
Para mostrar qué tanto espacio ahorramos guardamos ambos datos: el texto original y el comprimido.
Ahora es momento de insertar datos. Para insertar un valor comprimido hay que almacenar lo que devuelve la llamada de compress
:
insert into probar_compresion(original, comprimido)
values
(
"Para vivir, el hombre ha de considerar tres cosas como los valores supremos gobernantes de su vida: Razón, Propósito, Estima propia. La Razón como su única herramienta de conocimiento, el Propósito como su elección de la felicidad que con aquella herramienta ha de poder conseguir; la Estima propia como inviolable certidumbre de que su mente es competente para pensar y su persona digna de la felicidad, lo que significa digna de vivir.",
compress("Para vivir, el hombre ha de considerar tres cosas como los valores supremos gobernantes de su vida: Razón, Propósito, Estima propia. La Razón como su única herramienta de conocimiento, el Propósito como su elección de la felicidad que con aquella herramienta ha de poder conseguir; la Estima propia como inviolable certidumbre de que su mente es competente para pensar y su persona digna de la felicidad, lo que significa digna de vivir.")
),
(
"Keep your 'lectric eye on me babe
Put your ray gun to my head
Press your space face close to mine, love
Freak out in a moonage daydream oh yeah",
compress("Keep your 'lectric eye on me babe
Put your ray gun to my head
Press your space face close to mine, love
Freak out in a moonage daydream oh yeah")
);
Son algunos ejemplos de prueba. La inserción es correcta, ahora utilizaré la función LENGTH para medir la longitud de los datos…
select length(original), length(comprimido) from probar_compresion;
Con el siguiente resultado:
En el primer caso, el original mide 437 y el comprimido 253; en el segundo caso el original es de 140 y el comprimido de 116.
La razón de compresión no siempre será la misma, pues depende de varios factores y del algoritmo de compresión.
Lo importante es que los datos realmente se están comprimiendo. Para recuperar los datos originales se invoca a uncompress
.
select uncompress(comprimido) from probar_compresion\G
Así se puede recuperar el valor original.
Podemos hacer updates, llamar a otras funciones y todas las cosas permitidas, pues al final compress
y uncompress
son funciones de MySQL.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.