Niemals als ein einziges Update-Statement. Füg die Spalte als nullable ohne Table Rewrite hinzu, backfill dann in kleinen Batches sortiert nach Primärschlüssel, commit jeden Batch, mit einer kurzen Pause dazwischen und einer Prüfung der Replikationsverzögerung. Mach den Job wiederaufnehmbar, indem du den Fortschritt festhältst, fahr ihn außerhalb der Spitzenzeiten, und lass die Anwendung die neue Spalte für neue und geänderte Zeilen schreiben, damit der Backfill nur die Historie einholen muss.
Warum Interviewer das fragen
Das ist eine Betriebsfrage im Gewand einer Datenaufgabe, und sie geht sehr leicht schief. Ein einziges riesiges Update kann Locks halten, das Write-Ahead-Log aufblähen, die Replikationsverzögerung sprengen und die Seite umlegen. Der Interviewer will Batching, Drosselung anhand eines Live-Signals, Wiederaufnahme und die Doppelschreib-Strategie, mit der du sicher umschaltest. Es zeigt außerdem, ob du den Verifikationsschritt einplanst.
So baust du deine Antwort auf
- Erklär, warum ein großes Update gefährlich ist: Locks, Bloat, Replikationsverzögerung.
- Beschreib den gebatchten, wiederaufnehmbaren Job und sein Drosselsignal.
- Lass die Anwendung den neuen Wert ab sofort mitschreiben.
- Definier Verifikation und den Umstieg auf das Lesen der neuen Spalte.
Beispielantwort
Ein Update über zweihundert Millionen Zeilen hält Locks, erzeugt enorm viel Write-Ahead-Log und schiebt Replicas so weit zurück, dass Lesezugriffe veraltete Daten liefern, die Seite leidet also, obwohl nichts abgestürzt ist. Stattdessen füge ich die Spalte als nullable hinzu, was auf einem modernen Postgres billig ist, weil es die Tabelle nicht neu schreibt, und ich deploye zuerst die Anwendungsänderung, die sie bei jedem Insert und Update befüllt. Damit muss der Backfill nur die Historie abarbeiten, und Historie bewegt sich nicht. Danach läuft der Job über den Primärschlüssel in Batches von ein paar tausend, committet jeden Batch, merkt sich die zuletzt erledigte id, damit er nach einem Neustart weitermachen kann, und pausiert, wenn Replikationsverzögerung oder Datenbanklast eine Schwelle überschreiten. Ich fahre ihn mit Rate Limit statt so schnell wie möglich. Wenn er durch ist, prüfe ich mit Counts und Stichproben, dass nichts null geblieben ist, schalte die Lesezugriffe hinter einem Flag auf die neue Spalte um und setze erst danach das Not-Null-Constraint, separat validiert, damit es kein langes Lock nimmt.
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 ein Not-Null-Constraint ohne langes Lock hinzufügen?
- Auf welches Signal drosselst du, und bei welcher Schwelle?
- Wie verifizierst du, dass der Backfill korrekt war und nicht nur vollständig?
Weitere Fragen für Backend-Entwickler
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