Backend, APIs e dados · Avançado

Migrações de esquema sem tempo de inatividade

Em uma linha: Mude o esquema em passos compatíveis retroativamente: adicione, preencha, mude, e só no final — remova.

O problema

Durante um lançamento, duas versões de código rodam juntas. Uma migração que muda uma coluna de uma vez quebra uma delas. Então cada mudança estrutural é decomposta em uma sequência de passos, cada um seguro por si só.

A sequência segura

Adicionar. Uma nova coluna, nullable, sem tocar na existente.

Escrita dupla. O código escreve nas duas colunas e prefere ler da antiga.

Preenchimento. Em lotes pequenos, fora do horário de pico, com possibilidade de parar.

Troca de leituras. Após verificar que os dados são idênticos.

Remoção. Em um lançamento separado, depois de confirmar que ninguém lê.

Regras de cautela

Uma migração em uma tabela grande pode travar. Verifique o comportamento de bloqueio no seu motor, e execute em uma cópia do tamanho da produção. Backup antes, e um script de rollback escrito com antecedência — não improvisado sob pressão.

Indo mais fundo

Gerencie migrações como código no controle de versões, com execução automática e controle de ordem. E não misture uma mudança de esquema com uma mudança de lógica no mesmo lançamento: quando algo quebrar, você quer saber qual dos dois tem culpa.