Divida em passos retrocompatíveis. Suba primeiro a mudança de schema numa forma que o código rodando tolera, como adicionar uma coluna nullable, depois suba código que escreve no antigo e no novo, faça o backfill em lotes, mude as leituras, e só derrube a coluna antiga num release posterior. Evite locks longos de tabela e sempre teste o caminho de rollback.
Por que os entrevistadores perguntam isso
Migrações são onde engenheiros cuidadosos se separam de quem só trabalhou em projetos pequenos o bastante para aceitar uma parada. O entrevistador quer o padrão expand and contract, o entendimento de que código antigo e novo rodam simultaneamente durante um deploy gradual, e consciência de quais operações travam uma tabela no Postgres tempo suficiente para derrubar o site.
Como estruturar sua resposta
- Cite o padrão expand and contract.
- Ordene os deploys para as duas versões do código funcionarem.
- Faça backfill em lotes, nunca num único comando.
- Aponte as operações de lock a serem evitadas.
Exemplo de resposta
A regra que eu sigo é que durante um deploy gradual duas versões do código estão falando com um banco só, então cada passo tem que ser seguro para as duas. Renomear uma coluna é a armadilha clássica. Em vez disso eu expando: adiciono a coluna nova nullable na própria migração, subo código que escreve nos dois campos e ainda lê o antigo, faço backfill das linhas existentes em lotes de alguns milhares com uma pausa entre eles para a replicação não ficar para trás, aí viro as leituras no release seguinte, e só num terceiro release derrubo a coluna antiga. Especificidades do Postgres também importam. Adicionar uma constraint NOT NULL numa tabela grande pega um lock pesado, então eu adiciono a coluna nullable, faço o backfill, e depois valido a constraint separadamente. O Django te dá separate_database_and_state e migrações não atômicas quando você precisa, e eu configuro um lock_timeout curto para uma migração bloqueada falhar rápido em vez de enfileirar toda query atrás dela. Toda migração também ganha um rollback testado.
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
- E se o backfill levar seis horas?
- Como você adiciona um índice sem bloquear escritas?
- Como você faz rollback de um deploy depois que o schema mudou?
Mais perguntas para Desenvolvedor Python
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