Colección de citas famosas - Colección de poesías - Generación de diccionario de código abierto

Generación de diccionario de código abierto

Recientemente, conocí un nuevo algoritmo de compresión, zstd. A diferencia de los populares algoritmos de compresión lz4, lzo, snappy y otros que se centran en el rendimiento de compresión y descompresión en los últimos años, zstd afirma que su relación de compresión es equivalente a Deflate (algoritmo zip/gzip), pero su rendimiento es muy bueno. Los siguientes son los datos enumerados en el sitio web oficial:

Sabemos que el efecto y el rendimiento del algoritmo de compresión tienen una gran relación con el tipo y modo de los datos comprimidos. No basta con mirar. datos de pruebas de otras personas y pruebas comparativas. Existe una necesidad estricta de desarrollo de funciones, así que probémoslo en función de nuestros escenarios de uso.

Sorprendentemente, las medidas fueron mejores que las proporcionadas por el gobierno y finalmente encontramos nuestra taza de té.

CPU Intel Core i5-4570, 3,20 GHz, memoria 8G

CentOS 7.0

Para varios algoritmos de compresión que admitan escritura de secuencias, utilice los comandos correspondientes Ejecutar herramientas para pruebas de compresión.

Con la excepción de Snappy, todos los tipos de algoritmos/herramientas de compresión admiten la configuración del nivel de compresión. Los niveles altos significan tiempos de compresión más largos a cambio de relaciones de compresión más altas.

654,38 Archivo de registro de aplicación de 0 millones de líneas, tamaño 977 MB.

Como se puede ver en lo anterior:

Zstd es superior en términos de tiempo de procesamiento y relación de compresión. Snappy, LZ4 y LZO tienen relaciones de compresión más bajas, pero todos son muy rápidos, zstd es incluso más rápido que estos algoritmos. La tasa de compresión de gzip es mucho mayor que la de lz4, mientras que la tasa de compresión de zstd es el doble que la de Gzip.

Si la comparación anterior no es particularmente intuitiva, introduzcamos una métrica creativa (que nunca se ha utilizado en comparación con otros algoritmos de compresión en Internet):

Unidades de representación ¿Cuánto redundante? los datos se pueden comprimir y eliminar dentro del tiempo de procesamiento. Entre ellos, el coeficiente de peso se utiliza para especificar qué relación de compresión o velocidad de compresión es más importante. Aquí, consideramos que ambos son igualmente importantes en nuestro escenario de uso con un coeficiente de 1.

Desde aquí podemos ver claramente zstd》lz4 gt; lzo gt refrescante gt gt otros.

Las pruebas de compresión en un archivo de 1000 líneas de aproximadamente 1 MB de tamaño mostraron que las relaciones de compresión de varios algoritmos eran casi las mismas que para un archivo grande de 1 GB.

Comparemos la relación de compresión para un tamaño de datos más pequeño: 10 líneas de datos de registro. Aunque no hay compresión de datos pequeños en nuestro caso de uso, todavía tenemos curiosidad sobre el efecto del modo de diccionario zstd.

El último conjunto de datos es zstd, que utiliza 10.000 líneas de registros para generar un archivo de diccionario y utiliza el archivo de diccionario para comprimir los datos de prueba.

Se puede ver que, a excepción del modo de diccionario zstd, las tasas de compresión de varios algoritmos de compresión se reducen considerablemente cuando se procesan datos más pequeños. Sin embargo, el modo de diccionario zstd es muy útil para la relación de compresión. En comparación con gzip, la relación de compresión aumenta de 1x para 1000 líneas a casi 3x para 10 líneas.

El próximo artículo comparará el rendimiento y la relación de compresión de estos algoritmos en la biblioteca de código abierto de golang. Manténganse al tanto.