mysql

Comprimir y descomprimir datos en MySQL con compress y uncompress

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.

Disponibilidad de compress y uncompress

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.

1 – Probar disponibilidad de compress en MySQL

Definición de tabla para guardar un dato comprimido

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:

2 – Comprobar diferencia entre valor original y comprimido

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

3 – Descomprimir datos en MySQL usando uncompress

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.