Tabellen ohne Ausfallzeit zusammenführen: Wenn aus zwei Datenmodellen eines wird
Eine Tabelle aufzuteilen ist eine Richtung der Schema-Evolution. Manchmal möchten wir nach Jahren den umgekehrten Weg gehen: mehrere Strukturen in einem gemeinsamen Modell zusammenführen.
Beispiel
Wir haben:
| |
Und möchten zu folgendem Modell wechseln:
| |
Das neue Modell
| |
Zuerst die Semantik zuordnen
Eine Zusammenführung ist nicht einfach nur ein UNION ALL.
Wir müssen klären:
- wie die Schlüssel zugeordnet werden,
- welche Spalten dieselbe Bedeutung haben,
- wie Kollisionen von Identifikatoren behandelt werden,
- wie Felder dargestellt werden, die nur in einem der bisherigen Modelle existieren.
Ein stabiler Schlüssel
Wenn in den alten Tabellen dieselbe CustomerId vorkommen kann, benötigen wir eine Zuordnungsschicht.
| |
Backfill und laufende Änderungen
Zuerst übernehmen wir den historischen Datenbestand. Anschließend synchronisieren wir die Änderungen, die während der Migration eintreffen.
Change Data Capture (CDC), eine Ereigniswarteschlange oder Dual Writes können diese Aufgabe übernehmen.
Schrittweise Umstellung der Datenkonsumenten
Nicht alle Anwendungen müssen gleichzeitig umgestellt werden.
Wir können zunächst folgende Komponenten umstellen:
- neue APIs,
- Berichte,
- ein ausgewähltes Anwendungsmodul,
- Batch-Prozesse.
Die größte Falle
Entfernen Sie die alten Tabellen nicht allein deshalb, weil die neue Tabelle erfolgreich befüllt wurde.
Weisen Sie zuerst nach, dass niemand mehr auf den alten Vertrag angewiesen ist.
Fazit
Bei der Zusammenführung von Tabellen migrieren wir Daten, Schlüssel und Semantik gleichzeitig.
Ohne Schlüsselzuordnung und Telemetrie entsteht leicht ein neues Modell, das sich nicht zuverlässig überprüfen lässt.
Weiterführender Artikel: Eine Tabelle ohne Big Bang aufteilen beschreibt die umgekehrte Migration.