Interviewfrage für Backend-Entwickler

Eine einzelne Tabelle ist auf mehrere Milliarden Zeilen gewachsen, und die Writes werden langsamer. Welche Optionen hast du?

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

Kurzantwort

Schöpf erst die billigeren Optionen aus: bessere Indizes, kalte Zeilen archivieren, große Spalten auslagern und Read Replicas für die Leselast. Dann partitionier die Tabelle, meistens nach Zeit oder Mandant, damit jede Partition klein bleibt und alte Partitionen sofort verworfen werden können. Sharding über getrennte Datenbanken kommt zuletzt, weil es dich Cross-Shard-Queries, verteilte Transaktionen und Rebalancing kostet, und die Wahl des Shard Keys ist später sehr schwer zu ändern.

Warum Interviewer das fragen

Der Interviewer will sehen, dass du in der Reihenfolge der Kosten skalierst statt zur komplexesten Lösung zu springen. Er achtet auf die Unterscheidung zwischen Partitionierung innerhalb einer Datenbank und Sharding über viele, auf eine sinnvolle Diskussion des Shard Keys inklusive Hot Spots, und auf die operative Realität, eine Live-Tabelle zu migrieren. Direkt zum Sharding zu greifen ist meistens ein Warnsignal.

So baust du deine Antwort auf

  • Diagnostizier zuerst: sind es die Writes, die Indexpflege oder Lock Contention.
  • Sortier die Optionen von der billigsten zur invasivsten.
  • Erklär Partitionierung und die Vorteile bei Pruning und Aufbewahrung.
  • Geh auf die Wahl des Shard Keys ein und was du durch Sharding verlierst.

Beispielantwort

Gesprochenes Beispiel, erste Person

Zuerst würde ich herausfinden, was tatsächlich langsam ist, denn eine große Tabelle ist nicht automatisch ein Problem. Meistens ist es Indexpflege bei jedem Insert, oder ein paar ungenutzte Indizes, oder Autovacuum, das hinterherhinkt. Ich starte also mit den billigen Gewinnen: Indizes löschen, die niemand nutzt, eine große Text- oder JSON-Spalte in eine Nebentabelle verschieben, damit die Hauptzeilen kompakt bleiben, und alles archivieren, was älter als die Aufbewahrungsfrist ist. Ist sie dann wirklich noch zu groß, partitioniere ich, normalerweise nach Zeit bei ereignisartigen Daten, was jede Partition klein hält, dem Planner erlaubt, auf den relevanten Bereich zu prunen, und aus dem Löschen der Vorjahresdaten ein Drop einer Partition macht statt eines Deletes, das einen Tag läuft. Sharding ist die letzte Option, weil es das Programmiermodell ändert: Cross-Shard-Joins fallen weg, Transaktionen werden verteilt, und Rebalancing ist ein Projekt. Wenn ich sharde, wird der Key gründlich überlegt, denn eine Events-Tabelle nach Kunden-id zu sharden gibt dir einen Hot Shard, sobald ein Kunde zehnmal größer ist als der Rest.

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

  • Wie würdest du einen Shard Key wählen, der Hot Spots vermeidet?
  • Wie migrierst du eine Live-Tabelle ohne Downtime auf eine partitionierte?
  • Welche Queries werden teuer, sobald die Daten geshardet sind?

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

Ü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