A Meta* lançou o OpenZL, um kit de ferramentas de compressão e descompressão de dados que oferece taxas de compressão e velocidade superiores às dos formatos Zstd e XZ. O OpenZL foi projetado para compressão eficiente de conjuntos de dados estruturados, como os usados em aprendizado de máquina, bem como de armazenamentos de dados contendo campos com vários tipos de informações repetidas. O OpenZL é escrito em C/C++ e é de código aberto sob a licença BSD.
Ao compactar um banco de dados contendo o catálogo de estrelas astronômicas SAO, o OpenZL reduziu o tamanho dos dados em 2.06 vezes, enquanto o algoritmo zstd comprimiu os dados em 1.31 vezes e o XZ em 1.64 vezes. Além disso, o OpenZL superou o zstd em velocidade de compactação em 2 vezes (203 MB/s versus 115 MB/s) e o XZ em 65 vezes (203 MB/s versus 3.1 MB/s). A descompactação no OpenZL foi ligeiramente mais lenta que no zstd (822 MB/s versus 890 MB/s) e 27 vezes mais rápida que no XZ.

O OpenZL não é um algoritmo de uso geral e só apresenta bons resultados para dados com estrutura conhecida. A operação do OpenZL consiste em gerar de forma adaptativa um compactador com base na descrição dos dados fornecida. Isso gera um código de compactação otimizado para um formato de dados específico. Um descompactador universal, compatível com todos os compactadores gerados, é usado para a descompactação.
A compactação e a descompactação são realizadas usando um único utilitário, "zli", ou a biblioteca libopenzl. A estrutura de dados é descrita na forma de perfis. Isso inclui um conjunto de perfis predefinidos que descrevem formatos de armazenamento típicos. Por exemplo, um perfil para o formato CSV ou dados armazenados como uma matriz de 64 bits. A compactação é tão simples quanto selecionar um perfil com o comando "zli list-profiles" e iniciar o processo de compactação com o comando "zli compress --profile profile_name". Para descompactar, basta executar "zli decompress".
Para formatos específicos, um perfil personalizado deve ser criado usando o comando "zli train", que identifica padrões nos dados e gera um perfil com um nível de compactação ideal. Usando a opção "--pareto-frontier", o perfil criado pode ser otimizado para acelerar a compactação ou descompactação, em detrimento da compactação. A Linguagem Simples de Descrição de Dados (SDDL) pode ser usada para descrever formatos complexos com estruturas aninhadas e definir o layout dos formatos de dados dentro das estruturas.
O método para criar empacotadores ótimos baseia-se em um conjunto de codificadores primitivos, cada um dos quais é mais eficaz para tipos de dados e sequências específicos. Para a compressão, forma-se um grafo de processamento de dados acíclico direcionado, com codecs como nós e variantes de dados no formato processado como arestas. Dependendo do tipo de dado de entrada, seleciona-se uma cadeia de codecs que comprime de forma otimizada o elemento de dados de entrada. Com esse arranjo, o cabeçalho do arquivo é comprimido usando um codec, o campo de dados inteiro usando um segundo codec, o campo de contador incremental usando um terceiro codec e o campo de dados de string usando um quarto codec.

Fonte: opennet.ru
