Compressão no divã, digo, DivANS

A equipe do Dropbox publicou recentemente em seu blog esse post sobre um novo algoritmo de compressão em que vêm trabalhando. O post é bem interessante, e compara o DivANS com várias das tecnologias já existentes. Em algumas simulações, há bons ganhos na compressão. E para uma empresa que lida com quantidades absurdas de informação, 1% de ganho é muito significativo. Talvez ainda seja necessário melhorar a velocidade (não adianta melhorar o espaço, mas demorar o dobro do tempo para conseguir ler/escrever o arquivo…), mas sabemos que é assim que várias iniciativas de sucesso começam.

E como acelerar a melhoria do algoritmo? Disponibilizando para a galera em Open Source, claro. Eis que fizeram isso mesmo, e a ferramenta está disponível em https://github.com/dropbox/divans para quem quiser testar, estudar, melhorar.

O algoritmo se baseia numa compressão em (pelo menos) 3 fases. Ao invés de uma geração direta para o arquivo final, o algoritmo gera uma “IR” (representação intermediária), numa segunda fase a IR serve de entrada para ser otimizada, e por fim a IR é convertida para um formato que possa ser eficientemente escrita para o arquivo final através das técnicas de compressão.

O mais interessante é que, na prática, cada fase é ‘meio independente’ e pode ser mesmo melhorada de forma separada das outras – contanto que a IR seja criada de forma padronizada.

Nos testes demonstrados pelo Dropbox, usaram algoritmos padrões já conhecidos. O LZ foi usado para gerar a IR. A otimização da IR foi feita com o método ANS (Asymmetrical Numeral Systems) – que tem boa performance de compactação, e é bem rápida (bom, isso explica o nome DivANS: “dividedANS”)

Por fim, uma coisa bem interessante: a equipe criou o sistema usando a linguagem Rust – linguagem de boa velocidade, como o C,  que não precisa de “garbage collector” e programas em Rust podem ser embutidos em outros que utilizem a interface de função do C – ou seja, fica muito fácil o reuso de rotinas e programas. Fica fácil embutir o codec em páginas com WASM!

Sim, WEBASSEMBLY!

(Ainda não tivemos tempo de comentar sobre o WebAssembly por aqui, mas o que tenho lido tem me animado. Acho que está na hora de estudar um pouco mais do assunto e postar novidades por aqui. Alguém aí interessado?)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *