Nunca como um único comando update. Adicione a coluna como nullable sem reescrita por default, depois preencha em lotes pequenos ordenados pela chave primária, comitando cada lote, com uma pausa curta entre eles e uma checagem do atraso de replicação. Torne o job retomável registrando o progresso, rode fora do pico, e faça a aplicação já gravar a nova coluna em linhas novas e atualizadas para que o backfill só precise alcançar o histórico.
Por que os entrevistadores perguntam isso
Esta é uma pergunta operacional vestida de tarefa de dados, e é muito fácil de errar. Um update gigante pode segurar locks, inchar o write ahead log, estourar o atraso de replicação e derrubar o site. O entrevistador quer lotes, throttling baseado num sinal ao vivo, retomada e a estratégia de escrita dupla que permite virar a chave com segurança. Também mostra se você planeja a etapa de verificação.
Como estruturar sua resposta
- Explique por que um update único é perigoso: locks, inchaço, atraso de replicação.
- Descreva o job em lotes e retomável e o sinal de throttling dele.
- Faça a aplicação gravar o novo valor daqui para frente.
- Defina a verificação e a virada para ler a nova coluna.
Exemplo de resposta
Um update tocando duzentos milhões de linhas segura locks, gera uma quantidade enorme de write ahead log e empurra as réplicas tão para trás que as leituras começam a servir dados velhos, então o site sofre mesmo sem nada ter caído. Em vez disso eu adiciono a coluna como nullable, o que é barato num Postgres moderno porque não reescreve a tabela, e faço o deploy primeiro da mudança da aplicação que preenche aquilo em todo insert e update. Isso significa que o backfill só precisa lidar com o histórico, e o histórico não se move. Depois o job percorre a chave primária em lotes de alguns milhares, comita cada lote, registra o último id concluído para conseguir retomar após um reinício, e pausa se o atraso de replicação ou a carga do banco cruzarem um limite. Eu rodo com limite de taxa, e não o mais rápido possível. Quando termina eu verifico com contagens e conferências por amostragem que nada ficou nulo, depois viro as leituras para a nova coluna atrás de uma flag, e só depois disso adiciono a constraint not null, validada separadamente para não segurar um lock longo.
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ê adicionaria uma constraint not null sem um lock longo?
- Em qual sinal você aplica o throttling, e com qual limite?
- Como você verifica que o backfill ficou correto, e não apenas completo?
Mais perguntas para Desenvolvedor Backend
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