Use o padrão expandir e contrair. Primeiro expanda: adicione a coluna ou tabela nova de forma retrocompatível para que o código atualmente implantado continue funcionando. Depois implante um código que escreve no formato antigo e no novo, preencha as linhas existentes em lotes pequenos, mude as leituras para o formato novo, e só em um release posterior remova a coluna antiga. Mantenha toda migração compatível com a versão da aplicação que roda antes e depois dela.
Por que os entrevistadores perguntam isso
O entrevistador quer saber se você já entregou mudanças de schema com tráfego ao vivo ou só em desenvolvimento. Ele escuta expandir e contrair, preenchimento em lotes para evitar locks longos e atraso de replicação, e o desacoplamento entre migração e deploy. Mencionar riscos específicos de lock, como criação de índice, mostra experiência de produção genuína em vez de teoria.
Como estruturar sua resposta
- Cite o padrão e o invariante: todo passo é retrocompatível.
- Percorra as fases em ordem: expandir, escrita dupla, preencher, trocar, contrair.
- Cubra riscos de lock e de replicação e como você os evita.
- Diga como você verifica e como faz rollback em cada fase.
Exemplo de resposta
A regra que eu sigo é que qualquer schema implantado tem que funcionar com a versão anterior e com a próxima do código, porque durante um rolling deploy as duas estão rodando ao mesmo tempo. Então eu nunca renomeio uma coluna, eu expando e contraio. Digamos que a gente esteja dividindo um campo de nome. A primeira migração adiciona as colunas novas anuláveis, o que é barato e não toca em nenhuma linha existente. Depois um release em que a aplicação escreve no formato antigo e no novo mas ainda lê o antigo, então nada voltado ao usuário depende dos dados novos ainda. Depois um preenchimento rodando em lotes de alguns milhares com uma pausa entre eles, para eu não segurar uma transação longa nem estourar o atraso de replicação nas réplicas. Depois um release que lê as colunas novas, com as antigas ainda sendo escritas como saída de emergência. Só depois de aquilo ficar estável por um ou dois releases é que eu paro a escrita dupla e removo as colunas antigas. Eu também mantenho as migrações fora do caminho do deploy em si, e qualquer coisa que pegue um lock pesado, como construir um índice, roda de forma concorrente e fora do pico.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você verifica se o preenchimento está completo e correto?
- Qual é o seu plano de rollback se a troca de leitura der errado?
- Como você lidaria com isso quando a tabela tem meio bilhão de linhas?
Mais perguntas para Engenheiro DevOps
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas