Notícias
Uma melhoria fundamental na arquitetura do motor do Firebird 5.0 (introduzida nativamente no ODS 13.1) resolveu um antigo problema de desperdício de espaço em disco relacionado ao armazenamento de campos de texto longos e valores nulos subsequentes.
O Cenário Anterior
Nas versões anteriores, o Firebird utilizava um algoritmo clássico de compressão do tipo RLE (Run-Length Encoding) ao nível de registro. Esse algoritmo comprimia sequências de até 128 bytes idênticos em uma estrutura fixa de apenas 2 bytes. Embora eficiente para repetições pequenas, essa abordagem limitava a taxa máxima de compressão a apenas 64x.
O Impacto no Tamanho (Overhead Reportado)
Conforme apontado por Dmitry Yemanov na abertura da issue, sob o algoritmo antigo, qualquer campo declarado como
VARCHAR(32000) que estivesse completamente vazio ou com valor NULL acabava ocupando impressionantes 500 bytes em disco. Isso acontecia porque a longa cadeia de bytes zero gerada pelo preenchimento (padding) do registro não conseguia ser reduzida além do limite padrão de 64x, gerando um overhead de armazenamento massivo e desnecessário.
A Mudança Implementada
Para corrigir esse comportamento, a modificação proposta na issue implementou um algoritmo RLE avançado dotado de um contador de comprimento variável.
A partir de agora, strings que sejam significativamente menores do que o tamanho máximo declarado, bem como grandes sequências de campos NULL consecutivos, são codificadas de forma muito mais densa. Isso resulta em menos blocos de dados no disco e uma redução drástica no tamanho final dos arquivos de banco de dados populados com esse perfil de dados.
Um usuário reportou a diminuição considerável no tamanho de um banco de dados ao migrar do Firebird 3 para o 5, atribuída justamente a essa melhoria no RLE. A base de dados que originalmente ocupava 65GB passou a ocupar 52GB. Obviamente a redução de espaço depende diretamente do tamanho e da quantidade de registros com campos Varchar que estejam nulos ou que estejam ocupados com dados muito menores do que o tamanho definido para o campo.
Para mais detalhes técnicos e acompanhamento da implementação, consulte a discussão completa no GitHub do Firebird (Issue #4723).

