Verwalten der Migration von brechen Datenbank Änderungen an einer Datenbank von alten Version derselben Anwendung freigegeben

StackOverflow https://stackoverflow.com/questions/257045

Frage

Eines meiner Ziele ist es, eine neue Version einer Web-Anwendung zu implementieren, die nebeneinander läuft die alte Version. Der Haken ist, dass alles, was eine Datenbank teilt. Eine Datenbank, die in der neuen Version neigt signifikanten Refactoring auf Datenbanktabellen enthalten. Ich würde die neue Version der Anwendung für die Nutzer im Laufe der Zeit sein, wie Rollout und in der Lage sein, sie auf die alte Version zu wechseln, wenn es nötig ist.

Oren hatte ein gutes post die Frage der Einrichtung, aber es endete mit:

"Wir sind immer noch in etwas schlammigen Wasser in Bezug auf in Bezug auf Änderungen an der Produktion bereitstellen, die das gesamte System betrifft, nämlich Datenbankänderungen zu brechen. Ich, dass in der nächsten Folge diskutieren werde, dieser hätte gerade ein TAD aus der Hand, ich habe Angst. "

Die Follow-on-Post kam nie ;-). Wie würden Sie durch alte Version der gleichen Anwendung gehen über gemeinsame Datenbank zu Datenbankänderungen zu brechen, die Migration der Verwaltung. Wie würden Sie die Daten halten synchronisiert ist?

War es hilfreich?

Lösung

Wenn die alte Version beibehalten werden muss, können die Änderungen nicht einfach Bruch sein. Das hilft auch, wenn eine neue Version eines Web-App bereitstellen -., Wenn Sie wieder rollen müssen, ist es wirklich hilft, wenn Sie die Datenbank verlassen kann, wie es ist

Offensichtlich kommt dieses mit bedeutenden architektonischen Handicaps, und Sie werden mit ziemlicher Sicherheit mit einer Datenbank, die am Ende seine Linie zeigt sozusagen -. Aber die Bereitstellung Vorteile sind in der Regel der Kopfschmerzen wert, in meiner Erfahrung

Es hilft, wenn Sie eine solide Sammlung von Integrationstests für jede alte Version beteiligt haben. Sie sollten sie gegen die migrierten Testdatenbank für jede Version laufen können, die noch gehalten wird als „möglicherweise leben“ -, die „jede Version überhaupt“ in einigen Fällen kann gut sein. Wenn Sie in der Lage sind Stationierung zu steuern vernünftigerweise strikt können erhalten Sie nur mit einer Kompatibilität für drei oder vier Versionen entfernt - in diesem Fall können Sie Ausstieg aus veralteten Tabellen / Spalten usw. planen, wenn es ein echter Bedarf ist. Nur beachten Sie aufgelaufenen die Komplexität solcher Planung gegen die Vorteile.

Andere Tipps

Lesen Scott Ambler Buch " Refactoring Datenbanken "; nehmen mit einer Prise Salz, aber es gibt sehr viele gute Ideen drin.

Die Details der verfügbaren Lösungen sind abhängig von den DBMS Sie verwenden. Allerdings können Sie Dinge wie:

  • Erstellen Sie eine neue Tabelle (oder mehrere neue Tabellen) für das neue Design
  • eine Ansicht mit dem alten Tabellennamen erstellen, die Daten aus der neuen Tabelle sammelt (n)
  • erstellen ‚anstatt‘ auf der Ansicht, löst die neuen Tabellen anstelle der Ansicht zu aktualisieren

In einigen Fällen Sie keine neue Tabelle brauchen -. Sie nur Auslöser benötigen

nur zwei Versionen Ihrer Client Unter der Annahme, würde ich nur in den neuen Tabellen eine Kopie der Daten halten.

Sie können den Vertrag zwischen den alten und neuen Anwendungen hinter Blick auf die neuen Tabellen pflegen. Verwenden Sie vor / anstelle von Triggern schreibt in den „alten“ Ansichten zu behandeln, die tatsächlich in die neuen Tabellen schreiben.

Sie sind die Aufrechterhaltung 2 Versionen von Code und müssen noch Ihre alte App entwickeln, aber es ist nicht zu vermeiden.

Auf diese Weise gibt es keine Probleme bei der Synchronisierung, wirksam würden Sie mit Replikation Konflikten zwischen „alten“ und „neuen“ Schemata zu tun haben.

Mehr als 2 Versionen kompliziert werden wie erwähnt ...

Zuerst möchte ich sagen, dass dieses Problem sehr hart ist und Sie vielleicht keine vollständige Antwort finden.

In letzter Zeit ich habe bei der Aufrechterhaltung einer Legacy-Linie von Business-Anwendung beteiligt, die sich bald auf eine neue Version entwickeln könnten. Die Wartung umfasst Fehler, die Optimierung der alten Code und neuer Funktionen, die manchmal nicht passen kann leicht in der aktuellen Anwendungsarchitektur zu lösen. Das Hauptproblem bei unserer Anwendung ist, dass es schlecht dokumentiert wurde, gibt es keine Spur von Veränderungen, und wir sind im Grunde das fünfte Dreh Team an diesem Projekt arbeitet (wir sind ziemlich neu, um es).

Verlassen der äußeren Details auf der Seite (Code, Schichten, etc.), ich werde versuchen, ein wenig zu erklären, wie wir derzeit die Datenbankänderungen verwalten.

Wir haben in diesem Moment zwei Regeln, die wir zu folgen versuchen:

  1. Als erstes ist der alte Code (SQL, gespeicherte Prozeduren, Funktion, etc.) funktioniert wie und sollte wie angeboten gehalten werden, ohne zu viel zu modifizieren, es sei denn der Fall ist (Bug oder Feature ändern) ist, und von natürlich versuchen, es zu dokumentieren, so viel wie möglich (vor allem die Probleme wie: "WTF !, warum er das tun, statt das?").

  2. Zweite ist, dass jede neue Funktion, die in kommt sollte die besten Praktiken in diesem Moment bekannt verwenden, und ändern Sie die alte Datenbankstruktur so wenig wie möglich. Dies würde einige Datenbank Refactoring Optionen wie mit editierbaren Ansichten oben auf der alten Struktur einzuführen, für bereits bestehende neue Erweiterung Tabellen Einführung, um die Struktur zu normalisieren und die ältere Struktur durch Ansichten bieten, etc.

Auch versuchen wir, so viele Unit-Tests zu schreiben, wie wir die Business-Analysten Seite arbeiten sie vorgesehen und die Geschäftsregeln zu dokumentieren.

Datenbank Refactoring ist ein sehr komplexes Feld in einer kurzen Antwort beantwortet werden. Es gibt viele Bücher, die alle Ihre Probleme zu beantworten, ein http://databaserefactoring.com/ in einer spitz wird der Antworten .

Später Edit:. Hoffentlich wird die zweite Regel auch die Handhabung beantworten Änderungen brechen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top