GOOGLE ADS

miércoles, 4 de mayo de 2022

¿Cómo puedo estimar la compresibilidad de un archivo sin comprimirlo?

Estoy usando un servidor basado en bucle de eventos en python retorcido que almacena archivos, y me gustaría poder clasificar los archivos según su compresibilidad.

Si la probabilidad de que se beneficien de la compresión es alta, irán a un directorio con la compresión btrfs activada; de lo contrario, irán a otro lugar.

No necesito estar seguro: una precisión del 80% sería suficiente y ahorraría mucho espacio en disco. Pero dado que también existe el problema de rendimiento de la CPU y fs, no puedo simplemente guardar todo comprimido.

Los archivos están en los megabytes bajos. No puedo probarlos y comprimirlos sin usar una gran cantidad de CPU y retrasar indebidamente el ciclo de eventos o refactorizar un algoritmo de compresión para que encaje en el ciclo de eventos.

¿Hay alguna mejor práctica para dar una estimación rápida de la compresibilidad? Lo que se me ocurrió fue tomar una pequeña porción (unos pocos kB) de datos desde el principio del archivo, probarlo y comprimirlo (con un retraso presumiblemente tolerable) y basar mi decisión en eso.

¿Alguna sugerencia? ¿Sugerencias? ¿Defectos en mi razonamiento y/o problema?


Solución del problema

Solo 10K desde la mitad del archivo hará el truco. No desea el principio ni el final, ya que pueden contener información de encabezado o avance que no es representativa del resto del archivo. 10K es suficiente para obtener cierta cantidad de compresión con cualquier algoritmo típico. Eso predecirá una cantidad relativa de compresión para todo el archivo, en la medida en que ese medio 10K sea representativo. La proporción absoluta que obtenga no será la misma que para todo el archivo, pero la cantidad que difiere de la no compresión le permitirá establecer un umbral. Simplemente experimente con muchos archivos para ver dónde establecer el umbral.

Como se indicó, puede ahorrar tiempo al no hacer nada con los archivos que obviamente ya están comprimidos, por ejemplo,.png..jpg.,.mov,.pdf,.zip, etc.

Medir la entropía no es necesariamente un buen indicador, ya que solo proporciona una estimación de la compresibilidad de orden cero. Si la entropía indica que es lo suficientemente comprimible, entonces es correcto. Si la entropía indica que no es lo suficientemente comprimible, entonces puede ser correcta o no. Su compresor real es un estimador mucho mejor de la compresibilidad. Ejecutarlo en 10K no llevará mucho tiempo.

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...