Skip to content

ADR-009: CRC32 para Sincronização Incremental de Obras

Status: Implementado Data (estimada): commit 46526b80feat: auto update musics on application start Tipo: ADR Retroativo


Contexto

O catálogo de músicas é distribuído como bancos SQLite embarcados no app (asset) e como obras baixáveis. A API precisa saber quais músicas foram alteradas sem transferir o banco inteiro a cada verificação.

Decisão

Usar CRC32 como checksum de 32 bits para detectar alterações em músicas e obras. A API retorna o crc32 de cada entidade; o app compara com o armazenado localmente e baixa/atualiza apenas o que mudou.

O processo de update automático (BibliotecaService.atualizarMusicas) ocorre na inicialização do app.

Alternativas Consideradas

  • MD5 / SHA256 — descartado: mais pesados computacionalmente para verificação de milhar de registros
  • Timestamp de modificação — descartado: não detecta edições que revertem para conteúdo idêntico
  • Versionamento por número inteiro — insuficiente para detectar qual campo mudou
  • ETag HTTP — não disponível no contexto de bancos SQLite locais

Consequências

  • 🟢 Atualizações incrementais — usuário recebe correções de letras sem baixar o banco inteiro
  • 🟡 CRC32 não é criptograficamente seguro — mas o uso é apenas de integridade de conteúdo, não de segurança
  • 🟢 Performance: CRC32 é rápido o suficiente para comparar milhares de registros
  • 🟡 Colisões de CRC32 (1 em 2^32) — probabilidade negligenciável para conteúdo litúrgico