2012-07-23 5 views
10

Was sind relationale Datenbank- (und Schema-) Migrationsmuster bei der Produktion in kontinuierlicher Lieferung?Produktionsdatenmigrationsmuster in kontinuierlicher Zustellung

In vielen traditionellen Entwicklungen ordnet der DBA ein großes Migrations-Skript aus den vielen kleineren Skripten an, die im aktuellen Release-Zyklus erstellt wurden. Aber in CD möchte der Entwickler die Änderung jetzt zur Produktion bringen und nicht warten, sie mit anderen Skripten zu kompilieren.

Ich weiß auf Schienen-Migration, aber für mich sieht es vernünftiger, rohe SQL-Skripte zu verwenden.

Ich habe auch Tools wie flyway gesehen, um Migrationen zu verwalten, aber ich habe nicht von vielen Leuten gelesen, die sie in der Produktion verwenden. Deshalb frage ich mich, was hier üblich ist.

Antwort

9

Flyway funktioniert hervorragend für kontinuierliche Lieferung/Bereitstellung. Viele Kunden verwenden es in allen Umgebungen, einschließlich der Produktion.

Die wichtigste Sache für die DB-Migrationen über Umgebungen Kaskadierung ist einen 3-Schritt-Prozess hat:

Schritt 1

Alten Anwendungscode arbeitet mit alter DB.

Schritt 2

Neuer Anwendungscode erhält eingesetzt, und migriert DB beim Start. Diese Migration muss abwärtskompatibel sein, damit alter Anwendungscode weiterhin mit der neuen DB funktioniert. Dies ist wichtig, weil:

  • können Sie dann Upgrades tun rollen, ein Upgrade einen Knoten zu einer Zeit, bis alle Knoten den neuen Anwendungscode
  • Rollback sofort an den alten Anwendungscode, wenn die neuen gebrochen

Dieser Schritt kann Kompatibilitätsansichten und Trigger zur Ausführung der Aufgabe enthalten.

Schritt 3

Nachdem die Änderungen erwiesen haben, die nächste Version des Anwendungscodes zu arbeiten, erhält mit der notwendigen DB Migrationen eingesetzt zusammen zu verwerfen allen verbleibenden veraltet (aus Schritt 1) ​​und die Kompatibilität (von Schritt 2) Strukturen.

+0

Ich weiß, dies ist ein alter Beitrag, aber ich frage mich, ob Sie irgendwelche Ideen haben, wie dies verpackt werden sollte.Wie ich es sehe, werden Sie mit 4 verschiedenen Paketen enden: 1: Neuer Code, bereitgestellt, um mit neuen db (aber auch alt) zu arbeiten, 2: Db Migration, 3: Neuer Code, behoben, um nicht mehr alt zu unterstützen db Oft werden alle diese Änderungen vorgenommen und an die Quellcodeverwaltung übergeben, wodurch ein Build ausgelöst wird. Kennen Sie irgendwelche Tools, die bei der Aufteilung in richtige Pakete helfen können, um sie an die Bereitstellungspipeline zu senden? –

+0

"Neuer Anwendungscode wird bereitgestellt und migriert DB beim Start." Meines Erachtens ist es auch sinnvoll, dass die Migration als Teil des Bereitstellungsskripts ausgeführt wird. Sehen Sie Schwierigkeiten damit? –

1

Implementieren Sie Änderungen an Ihrer Datenbank als einzelne (rohe) SQL-Dateien, und verwenden Sie dann sqlpatch, um ein Migrationsskript zu erstellen.

Normalerweise habe ich ein einzelnes Git-Repository für die Datenbank und eine CD-Umgebung. Ich habe normalerweise eine Produktions- und eine Entwicklungsdatenbank, die automatisch migriert werden, wenn ich zu entsprechenden Zweigen dränge.

Dieses Setup macht es sehr einfach, eine andere Datenbank für einen Feature-Zweig einzurichten und damit zu experimentieren. Sqlpatch kümmert sich um alle Abhängigkeiten in den einzelnen SQL-Dateien, so dass ich einen Feature-Zweig in einem anderen Zweig einfach zusammenführen kann.

+1

BTW, ich bin der Schöpfer von sqlpatch – Elmer

Verwandte Themen