22 pontos por baeba 2025-05-02 | 2 comentários | Compartilhar no WhatsApp

Introdução

  • Ao copiar diretamente um banco de dados SQLite com rsync, o tamanho do arquivo pode crescer por causa de índices e outros fatores, tornando o processo lento e instável.
  • Por isso, é proposto usar .dump para comprimir e restaurar em formato de texto.

Desenvolvimento

  • O comando .dump exporta todo o banco como texto SQL, e os índices são substituídos por uma única linha de comando, reduzindo o tamanho do arquivo.

    sqlite3 my_database.db .dump > my_database.db.txt  
    
  • O arquivo de texto pode ser ainda mais reduzido com compressão gzip:

    sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz  
    
  • O processo passa a ser: gerar o arquivo compactado no servidor, copiar para a máquina local e então restaurar:

    ssh username@server "sqlite3 db.db .dump | gzip -c > db.txt.gz"  
    rsync --progress username@server:db.txt.gz .  
    gunzip db.txt.gz  
    cat db.txt | sqlite3 restored.db  
    
  • O arquivo original do banco tinha 3,4 GB → o dump em texto 1,3 GB → o arquivo compactado com gzip 240 MB, uma redução de cerca de 14 vezes.

  • No método tradicional com rsync, se o banco mudar durante a transferência, pode ocorrer o erro database disk image is malformed.

  • Com o dump em texto, não há risco de alteração no conteúdo após o início da cópia, permitindo um backup consistente.

Conclusão

  • O método .dump + compressão + restauração melhora tanto a velocidade quanto a estabilidade ao transferir grandes bancos SQLite.
  • É especialmente eficaz para bancos com muitos índices e pode reduzir a chance de falhas na transferência ou corrupção.
  • Se você lida com SQLite de grande porte com frequência, esta é uma otimização prática que vale a pena aplicar.

2 comentários

 
ng0301 2025-05-02

Fiquei curioso sobre o contexto de por que esse tipo de tarefa é necessário.

 
winterjung 2025-05-02

No texto original, dizem que é para backup & análise. Talvez a ideia fosse analisar localmente com algo como o duckdb.