Mach es in Etappen. Füg die Spalte nullable und ohne Default hinzu, sodass die Änderung reines Metadatum ist, deploy Code, der sie auf jedem Pfad schreibt und beim Lesen weiterhin Nulls verträgt, backfill in kleinen Batches mit Pausen, damit Locks und Replikation gesund bleiben, prüf, dass keine Nulls mehr übrig sind, setz dann das Not-Null-Constraint (wo unterstützt separat validiert) und entfern den Fallback-Code. Nie ein einzelnes blockierendes ALTER auf einer Tabelle dieser Größe.
Warum Interviewer das fragen
Das ist die Expand-and-Contract-Migration, und sie trennt Leute, die gegen große Tabellen ausgeliefert haben, von denen, die es nicht haben. Interviewer wollen die Sequenz über mehrere Deploys, das Bewusstsein, dass ein naives ALTER ein Lock nimmt und die Tabelle neu schreibt, Batching zum Schutz der Replicas und die Disziplin, vor dem Durchsetzen zu prüfen. Es testet außerdem, ob du an rollende Deploys denkst, bei denen alter und neuer Code gleichzeitig laufen.
So baust du deine Antwort auf
- Lehn die einzelne blockierende Migration ausdrücklich ab.
- Leg die Sequenz aus Expand, Backfill und Contract dar.
- Erklär Batching und warum es die Replicas schützt.
- Berücksichtige, dass alter und neuer Code parallel laufen.
Beispielantwort
Was ich nicht machen werde, ist ein einzelnes ALTER, das eine Not-Null-Spalte mit Default hinzufügt, denn auf einer älteren Engine schreibt das die ganze Tabelle unter einem exklusiven Lock neu, und der Service ist so lange unten, wie das dauert. Ich expandiere also zuerst: Spalte nullable hinzufügen, was auf modernem Postgres eine Metadatenänderung und praktisch sofort ist. Dann deploye ich Code, der die neue Spalte bei jedem Insert und Update schreibt, beim Lesen aber weiterhin Nulls verträgt, denn während eines rollenden Deploys sind alte und neue Pods gleichzeitig live und ich kann nichts anderes annehmen. Dann der Backfill, in Batches von vielleicht zehntausend Zeilen nach Primary Key, mit einer kurzen Pause dazwischen, während ich das Replikationslag beobachte und langsamer werde, wenn es klettert. Sobald die Null-Zahl bei null ist, setze ich das Constraint, und in Postgres würde ich es als not valid hinzufügen und dann separat validieren, um ein schwächeres Lock zu nehmen. Der letzte Deploy entfernt den Fallback. Jeder Schritt ist für sich zurückrollbar.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Wie würdest du zurückrollen, wenn der Backfill schon läuft?
- Was, wenn der Backfill Anwendungslogik pro Zeile braucht?
- Wie würde sich das auf MySQL unterscheiden?
Weitere Fragen für Softwareentwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen