Interviewfrage für Python-Entwickler

Erklär mir, wie du eine Datenbankmigration ohne Downtime ausrollst.

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Teil sie in rückwärtskompatible Schritte. Deploy die Schemaänderung zuerst in einer Form, die der laufende Code toleriert, etwa eine nullable Spalte, dann deploy Code, der alt und neu schreibt, backfille in Batches, schalt die Lesezugriffe um und lösch die alte Spalte erst in einem späteren Release. Vermeide lange Table Locks und teste immer den Rollback-Pfad.

Warum Interviewer das fragen

Bei Migrationen trennen sich sorgfältige Engineers von Leuten, die nur an Projekten gearbeitet haben, die klein genug für einen Ausfall waren. Der Interviewer will das Expand-and-Contract-Muster, das Verständnis, dass während eines Rolling Deploys alter und neuer Code gleichzeitig laufen, und das Bewusstsein, welche Operationen in Postgres eine Tabelle lange genug sperren, um die Seite umzulegen.

So baust du deine Antwort auf

  • Nenn das Expand-and-Contract-Muster.
  • Ordne die Deploys so, dass beide Codeversionen funktionieren.
  • Backfille in Batches, nie in einem Statement.
  • Benenn die sperrenden Operationen, die du vermeidest.

Beispielantwort

Gesprochenes Beispiel, erste Person

Die Regel, an die ich mich halte, ist, dass während eines Rolling Deploys zwei Codeversionen mit einer Datenbank reden, jeder Schritt also für beide sicher sein muss. Eine Spalte umzubenennen ist die klassische Falle. Stattdessen expandiere ich: die neue nullable Spalte in einer eigenen Migration ergänzen, Code ausliefern, der beide Felder schreibt und weiterhin das alte liest, bestehende Zeilen in Batches von ein paar tausend mit Pause dazwischen backfillen, damit die Replikation nicht zurückfällt, dann im nächsten Release die Lesezugriffe umschalten, und erst in einem dritten Release die alte Spalte löschen. Postgres-Spezifika zählen auch. Ein NOT NULL Constraint auf einer großen Tabelle nimmt ein schweres Lock, also ergänze ich die Spalte nullable, backfille und validiere das Constraint separat. Django gibt dir separate_database_and_state und nicht-atomare Migrationen, wenn du sie brauchst, und ich setze ein kurzes lock_timeout, damit eine blockierte Migration schnell scheitert, statt jede Query dahinter aufzustauen. Jede Migration bekommt außerdem einen getesteten Rollback.

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 es

Nachfragen, mit denen du rechnen solltest

  • Was, wenn der Backfill sechs Stunden dauert?
  • Wie fügst du einen Index hinzu, ohne Writes zu blockieren?
  • Wie rollst du einen Deploy zurück, nachdem sich das Schema geändert hat?

Weitere Fragen für Python-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

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen