← Capa | Mercado

De 43 MB a 808 MB: o custo oculto de memória ao ler JSON em Python

2026-11-04 · Fonte:KDNuggets

De 43 MB a 808 MB: o custo oculto de memória ao ler JSON em Python

Uma etapa rotineira de carregamento de dados multiplicou a memória residente por quase dezenove; parsers de streaming como o ijson processam registros um por vez, mantendo a pegada estável independentemente do tamanho do arquivo.

808 MB. Essa é a pegada que um processo Python alcançou depois de ingerir um único arquivo JSON que pesava apenas 43 MB no disco — uma expansão de quase dezenove vezes, e o problema no coração de um walkthrough de engenharia recente do KDNuggets.

O salto não é um bug; é o comportamento padrão do parsing de arquivo inteiro. Quando o Python carrega um documento JSON da maneira convencional, ele materializa a hierarquia inteira de uma vez — cada objeto, array e string — como estruturas nativas do Python muito antes de qualquer análise começar. Como os objetos Python carregam uma sobrecarga substancial por item, um documento compacto como texto pode ocupar uma ordem de magnitude mais como memória viva. Para qualquer equipe que presumia que o tamanho do arquivo era um proxy confiável dos requisitos de RAM, a distância entre 43 MB e 808 MB é uma correção desagradável.

A resposta do walkthrough é o ijson, um parser de streaming. Em vez de ler o documento inteiro na memória, o ijson itera por ele de forma incremental, entregando um registro por vez, para que o código processe e descarte cada item antes do próximo chegar. O uso de memória passa a acompanhar o tamanho de um único registro, e não o tamanho do arquivo — que é o que o autor quer dizer ao afirmar que o streaming 'mudou tudo'.

A lição vai além de um formato de arquivo. Pipelines que esbarram em tetos de RAM frequentemente falham não porque os dados são realmente grandes demais, mas porque a estratégia de carregamento insiste em materializar tudo simultaneamente.

Para planejadores de infraestrutura de IA, o episódio é um ponto de dados discreto, mas prático. Folga de memória em nós de treinamento e pré-processamento é cara, e uma etapa que infla uma entrada de 43 MB em 808 MB de memória residente força instâncias maiores do que a carga de trabalho subjacente realmente exige. A ingestão por streaming figura entre as otimizações mais baratas disponíveis justamente porque não exige hardware novo — apenas um caminho de parsing diferente.

Tags: ijson · Python · JSON Streaming · Memory Management · Data Engineering


Leituras relacionadas


萬安算交所 AIXX · AIXX · Exchange verificado · Ir ao mercado