Eine Website umbenennen, ohne Daten zu verlieren

Ein Kunde bittet darum, eine Website von acme-staging in acme umzubenennen. Sie ändern den Namen in der App. Plötzlich verschwinden alle Datenbank-Backups, Screenshots und Thumbnails.

Die Dateien existieren noch auf der Festplatte. Das neue Verzeichnis ist einfach leer. Die Daten wurden bei der Namensänderung nicht mit übernommen.

Wir haben diesen Fehler in unserem ursprünglichen Design gemacht. Wir haben den Namen der Website verwendet, um zu entscheiden, wo Dateien gespeichert werden.

Wenn Sie Dateien in backups/acme-staging/ speichern und die Website dann in acme umbenennen, sucht die App nach backups/acme/. Sie findet einen leeren Ordner. Die alten Daten bleiben im alten Ordner, aber die App behandelt sie als veraltete Daten einer anderen Website.

Website-Namen ändern sich oft. Kunden korrigieren Tippfehler. Teams verschieben Staging-Sites in die Produktion. Unternehmen organisieren sich um.

Wir haben dies behoben, indem wir den Anzeigenamen von einer stabilen Kennung getrennt haben.

Jede Website hat nun eine eindeutige ID. Sie sieht etwa so aus: site_a1b2c3d4e5f6. Diese ID ändert sich nie.

Wir speichern Dateien nun anhand der ID statt des Namens. Der Verzeichnispfad sieht so aus: backups/site_a1b2c3d4e5f6/. Selbst wenn Sie die Website umbenennen, bleibt der Pfad gleich. Die Daten bleiben verknüpft.

Der schwierigste Teil war die Migration bestehender Nutzer auf dieses System. Wir haben eine idempotente Migration entwickelt. Das bedeutet, dass das System beim Start nach einer ID sucht. Wenn einer Website eine ID fehlt, weist das System eine zu. Wenn sie bereits eine hat, lässt das System sie unverändert.

Wir haben auch die physischen Dateien migriert. Wenn das System einen Ordner findet, der nach einer Website benannt ist, benennt es ihn in das neue ID-Format um.

Wir haben sogar die Logs korrigiert. Neue Logs verwenden die ID. Alte Logs verwenden den Website-Namen. Die Benutzeroberfläche kombiniert beides, sodass Ihr Verlauf lückenlos erscheint.

Wir haben eine harte Lektion über Validierung gelernt. Nach dem Update haben wir eine Regel hinzugefügt, um ID-Formate zu prüfen. Die Regel war zu streng. Sie lehnte einige ältere IDs aus unserer Migration ab. Plötzlich verschwanden Websites wieder.

Die Lektion ist einfach: Prüfen Sie Ihre Daten, bevor Sie neue Regeln hinzufügen.

Die Trennung dessen, was Menschen sehen, von dem, was das System verwendet, ist ein klassisches Muster. Dies erst nach dem Launch zu tun, ist teuer und riskant. Verwenden Sie vom ersten Tag an unveränderliche IDs, um diese Falle zu vermeiden.

Quelle: https://dev.to/susumun/renaming-a-site-without-losing-its-data-separating-display-name-from-a-stable-identifier-gpb