Fico feliz em recebê-lo. Quase um ano se passou desde que o último artigo foi publicado e estamos prontos para contar o que aconteceu com o próprio algoritmo e como a codificação delta está envolvida.

Entrada
Após o lançamento do artigo sobre melhorias no algoritmo Broo, enfrentamos um obstáculo na melhoria do nível de compactação e desempenho, ou seja, era impossível melhorar o nível de compactação sem afetar a velocidade de descompressão e vice-versa. Farei uma reserva imediatamente, as melhorias foram feitas sem prejuízo de outras características do algoritmo, mas essas alterações são insignificantes; escreveremos sobre essas alterações posteriormente. Então, depois, pensamos sobre onde podemos aplicar nossa experiência e conhecimento acumulados em uma direção semelhante. E a escolha caiu codificação delta .
O que é codificação delta?
Codificação delta ( codificação delta da Eng. Delta) - uma maneira de representar dados na forma da diferença ( delta ) entre os dados seriais em vez dos próprios dados.
Na prática, se os algoritmos de compactação permitirem reduzir o tamanho do arquivo e armazená-lo ou encaminhá-lo sem nenhuma dependência de outros arquivos, os algoritmos de codificação delta permitem criar um patch (diferença) de tamanho menor com base em dois arquivos (conjunto de dados) e aplicar o patch ao arquivo ( conjunto de dados) 1 - obtenha um arquivo (conjunto de dados) 2 .
O aplicativo mais comum para codificação delta é atualizar aplicativos em seus telefones e PCs. Em vez de baixar o aplicativo completamente e substituir os arquivos, um patch muito menor é criado (dependendo do número de alterações), que permite baixar a atualização muito mais rapidamente, e a velocidade de aplicar o patch afeta diretamente a velocidade de atualização do próprio aplicativo.
Se você souber onde mais a codificação delta é usada, escreva nos comentários.
Sobre mudanças no algoritmo Broo
Como dissemos, existem alguns deles:
- Adicionado suporte para arquivos de tamanho 2 ^ 64 para x64 e 2 ^ 32 para x32.
- Taxa de compressão aprimorada.
Essas mudanças ainda estão no estágio de experimentação e depuração. O principal problema - depois de adicionar suporte para arquivos grandes, a velocidade de descompressão caiu 20%, o que é inaceitável para nós. Por isso, ainda estamos procurando uma solução.
Abaixo, fornecemos apenas uma tabela de comparações da versão antiga do algoritmo, a experimental e alguns níveis de zstd. O arquivo xml do artigo anterior .
Processador: Intel i7-7700HQ
Memória: DDR4-2400
Nome do algoritmo | Velocidade de embalagem | Velocidade de descompressão | Tamanho do arquivo compactado, bytes | % do original |
---|
memcpy | 17460 MB / s | 17194 MB / s | 5345280 | 100,00 |
zstd 1.3.1 -6 | 141 MB / s | 1311 MB / s | 585810 | 10,96 |
broo 1.2 | 11 MB / s | 1905 MB / s | 606838 | 11,35 |
zstd 1.3.1 -5 | 196 MB / s | 1207 MB / s | 619510 | 11,59 |
zstd 1.3.1 -4 | 357 MB / s | 1214 MB / s | 637587 | 11,93 |
zstd 1.3.1 -3 | 366 MB / s | 1220 MB / s | 639073 | 11,96 |
broo 1.1 | 14 MB / s | 2005 MB / s | 643084 | 12,03 |
zstd 1.3.1 -2 | 394 MB / s | 1108 MB / s | 690508 | 12,92 |
zstd 1.3.1 -1 | 479 MB / s | 1213 MB / s | 703093 | 13,15 |
Como muitos algoritmos, a velocidade depende do processador, como podemos ver na tabela, a velocidade de descompressão é 1,5 vezes mais rápida que a do primeiro nível zstd, no processador Intel i7-7700HQ. Enquanto no antigo Intel i3-550, a velocidade de descompressão era aproximadamente igual à velocidade de descompressão zstd, você pode ver as tabelas de comparação aqui .
Isso sugere que você pode realizar uma integração mais rígida com processadores individuais. Depende das especificidades da tarefa.
Codificação Delta e Broo
Como você deve ter adivinhado, desenvolvemos nosso próprio algoritmo de codificação delta e denominamos DBroo (Delta Broo).
Principais características e características:
- Suporte para tamanhos de arquivo 2 ^ 64 para x64 e 2 ^ 32 para x32.
- Trabalhe com dados binários.
- É permitida a modificação parcial do arquivo de referência ao qual o patch será aplicado.
Existem soluções prontas, como diff, bsdiff, xdelta e outras. O objetivo era encontrar o melhor (além de acessível) nessa direção e competir com ele. O Xdelta3 acabou por ser o principal concorrente de uma maneira puramente experimental. Proporciona boa compactação e uma velocidade de aplicação de patches bastante rápida. O Xdelta3 também é usado para atualizações do CyanogenMod (agora LineageOS ).
Agora, vejamos a tabela de comparação do DBroo e do Xdelta3. Como arquivo de referência, "xml" é usado e, como um novo arquivo, o mesmo, mas modificado aleatoriamente.
Nome do algoritmo | Velocidade de criação do patch | Velocidade do aplicativo de patches | Tamanho do patch, bytes | % do original |
---|
memcpy | 18052 MB / s | 18665 MB / s | 5326823 | 100,00 |
Xdelta3 -9 + lzma | 5,40 MB / s | 306 MB / s | 106542 | 2,00 |
Xdelta3 -6 + lzma | 20 MB / s | 310 MB / s | 121916 | 2,28 |
DBroo 1.0 | 7,40 MB / s | 1600,00 MB / s | 123052 | 2,31 |
Xdelta3 -9 | 7,00 MB / s | 688,24 MB / s | 179732 | 3,37 |
Xdelta3 -6 | 36,71 MB / s | 694,09 MB / s | 201681 | 3,78 |
Xdelta3 -3 | 59,22 MB / s | 637,43 MB / s | 237218 | 4,45 |
Xdelta3 -2 | 72,73 MB / s | 582,75 MB / s | 279223 | 5.24 |
Xdelta3 -1 | 81,43 MB / s | 540,53 MB / s | 478824 | 8,9 |
PS
O desenvolvimento é dado apenas aos produtos que têm demanda no mercado. Portanto, agradecemos seus comentários. Também criamos um canal de telegrama .
Obrigada