> For the complete documentation index, see [llms.txt](https://weekly-essay.mikey.wang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weekly-essay.mikey.wang/pt-br/2025/w46-database-migration-case-study.md).

# W46-Estudo de caso de migração de banco de dados

Li uma retrospectiva de migração de banco, [Como migramos 1 bilhão de registros de DB1 para DB2 sem interrupção](https://medium.com/@himanshusingour7/how-we-migrated-db-1-to-db-2-1-billion-records-without-downtime-c034ce85d889). É a análise de uma migração sem parada de um cluster de dados financeiros com 1 bilhão de registros.

Há muitos pontos em comum com nossa abordagem central de prevenção de riscos técnicos. Controle gradual de risco, com cada etapa verificável e reversível de forma independente. Observabilidade primeiro: dos logs WAL e taxas de acerto de cache dentro do banco ao volume de pedidos e fluxo de receita no negócio, o monitoramento contínuo permite detectar anomalias a tempo. Também descobri uma técnica engenhosa para migrar bancos ou serviços de backend: Shadow Reads.

Migrar dados é, em essência, um problema complexo de projeto de sistemas. O autor apresenta cinco decisões importantes.

Primeiro, migrar dados frios em lotes, usando particionamento, processamento paralelo e desativação de índices.

Segundo, adotar escrita dupla com uma fila de novas tentativas no Kafka, sincronizando o tráfego em tempo real entre os bancos antigo e novo e mantendo a idempotência.

Terceiro, validar em produção com Shadow Reads. As requisições do usuário continuam lendo do banco antigo, mas cada consulta também é executada discretamente no novo, em segundo plano, para comparar os resultados. O processo durou semanas e revelou problemas que o ambiente de testes nunca encontraria: diferenças de fuso horário, comportamento padrão de NULL e regras de ordenação de caracteres. Depois lembrei que a migração da arquitetura do backend do checkout, no ano passado, parece ter usado algo semelhante. No frontend, porém, é difícil reproduzir.

Quarto, fazer a troca com cuidado em períodos de pouco tráfego, usando aquecimento de cache, plano de rollback e monitoramento próximo para garantir uma transição suave.

Por fim, o autor enfatiza a importância de uma observabilidade forte durante toda a migração.

É difícil aplicar Shadow Reads ao frontend porque cada usuário acessa exclusivamente uma versão: ao entrar na nova, não usa a antiga. No banco, Shadow Reads faz uma comparação invisível de conjuntos de resultados. A correção do frontend é muito mais complexa que a consistência de dados. Inclui comportamento de interação, desempenho percebido, consistência de acessibilidade e compatibilidade entre dispositivos, sem meios baratos de verificar tudo isso. Liberação gradual de tráfego, análise de comportamento, monitoramento de métricas de negócio e inspeção manual continuam sendo os métodos mais eficazes.
