Question d'entretien pour Ingénieur logiciel

Vous devez ajouter une colonne non nulle à une table de 500 millions de lignes. Comment livrez-vous ça sans interruption de service ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Faites-le par étapes. Ajoutez la colonne en nullable sans valeur par défaut pour que le changement ne touche que les métadonnées, déployez du code qui l'écrit sur tous les chemins tout en tolérant encore les nuls, remplissez par petits lots avec des pauses pour que verrous et réplication restent sains, vérifiez qu'il ne reste aucun nul, puis ajoutez la contrainte not null (validée séparément là où c'est possible) et retirez le code de repli. Jamais un seul ALTER bloquant sur une table de cette taille.

Pourquoi les recruteurs posent cette question

C'est la migration expand and contract, et elle sépare ceux qui ont livré sur de grosses tables de ceux qui ne l'ont pas fait. Le recruteur veut la séquence en plusieurs déploiements, la conscience qu'un ALTER naïf prend un verrou et réécrit la table, le découpage en lots pour protéger les réplicas, et la discipline de vérifier avant d'imposer. Ça sonde aussi si vous tenez compte des déploiements progressifs où ancien et nouveau code tournent en même temps.

Comment structurer votre réponse

  • Rejetez explicitement la migration bloquante en une fois.
  • Déroulez la séquence expand, remplissage, contract.
  • Expliquez le découpage en lots et pourquoi il protège les réplicas.
  • Tenez compte de l'ancien et du nouveau code qui tournent côte à côte.

Exemple de réponse

Exemple parlé, à la première personne

Ce que je ne ferai pas, c'est un seul ALTER qui ajoute une colonne not null avec une valeur par défaut, parce que sur un moteur plus ancien ça réécrit toute la table sous un verrou exclusif et le service est à terre pendant tout ce temps. Je fais donc l'expansion d'abord : je l'ajoute en nullable, ce qui sur un Postgres moderne est un changement de métadonnées et donc quasi instantané. Ensuite je déploie du code qui écrit la nouvelle colonne à chaque insertion et mise à jour tout en tolérant encore les nuls en lecture, parce que pendant un déploiement progressif les anciens et les nouveaux pods sont tous les deux en vie et je ne peux pas supposer autre chose. Puis le remplissage, par lots de peut-être dix mille lignes indexés par clé primaire avec une courte pause entre eux, en surveillant le retard de réplication pendant que ça tourne et en ralentissant s'il grimpe. Une fois le compte de nuls à zéro, j'ajoute la contrainte, et dans Postgres je l'ajouterais en not valid puis je la validerais séparément pour prendre un verrou plus faible. Le dernier déploiement retire le repli. Chaque étape est réversible individuellement.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Comment reviendriez-vous en arrière une fois le remplissage commencé ?
  • Et si le remplissage a besoin de logique applicative ligne par ligne ?
  • En quoi ça serait différent sur MySQL ?

Autres questions pour Ingénieur logiciel

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot