Alle Beiträge, jStage Platform, Technologien & Entwicklung
Schreibe einen Kommentar

Versionierung von Datenbanken mit Liquibase

Prozesse innerhalb eines Unternehmens verändern sich im Laufe der Zeit. Es kommen neue Abläufe hinzu, andere werden vereinfacht oder erweitert. Auch Informationen ändern sich. Neue Informationen kommen hinzu, werden umstrukturiert oder anders organisiert. Die Software, die diese Arbeitsprozesse und die Speicherung der Informationen unterstützt ist einem ständigen Wandel unterworfen.

Das trifft auch auf viele Projekte bei uns im jStage Team zu. Deshalb haben wir uns mit dem Thema Datenbankversionierung näher beschäftigt, mit dem Ziel unseren Entwicklungprozess dahingehend zu erweitern. Genau wie bei der Verwaltung von Source Code ist es auch auf Datenbankebene wichtig, die gemachten Änderungen zu erfassen und zu versionieren.

Diese Versionierung bietet für uns im Entwicklungsprozess folgende Vorteile:

Änderungen sind nachvollziehbar

Geht man mit Schemaänderungen wie mit Source Code Änderungen um, lässt sich jederzeit feststellen wer eine bestimmte Änderung am Datenmodell zu welcher Zeit vorgenommen hat. Verbindet man die Änderung noch mit der eigentlichen Aufgabe aus dem Issue Tracking System, hat man sogar den fachlichen Bezug. Außerdem kann man jederzeit das versionierte Modell mit der Produktion abgleichen bzw. Änderungen automatisiert einspielen.

Erleichtert das Aufsetzen von Testsystemen

Bevor Änderungen an der Produktion vorgenommen werden, werden diese in der Regel in einem Testsystem vom Kunden ausprobiert und abgenommen. Sind die jeweiligen Änderungen am Datenmodell entsprechend erfasst, lassen sie sich automatisch in eine Testumgebung einspielen bzw. wieder zurück nehmen. Dadurch verringert sich der manuelle Aufwand für die Pflege eines Testsystems. Es empfiehlt sich, den Vorgang soweit zu automatisieren, dass man jederzeit in der Lage ist, das komplette Anwendungssystem aus dem Nichts aufzubauen.

Ermöglicht lokale Entwicklung

Das versionierte Schema kann in Kombination mit Testdaten für den Aufbau einer lokalen Entwicklungsumgebung genutzt werden. Dadurch kommen sich die Entwickler bei größeren Datenbankänderungen nicht in die Quere und können besser parallel arbeiten. Zudem ist das lokale Arbeiten sehr viel schneller und komfortabler.

Erleichtert automatisierte Tests und testgetriebene Entwicklung

Die Entwicklung von automatischen Tests oder eine testgetriebene Entwicklung kann sehr viel leichter realisiert werden, da man durch die Versionierung die Möglichkeit erhält Testdaten gezielt aufzubauen und weiter zu entwickeln.

Einfachere Möglichkeit der Dokumentation

Zu den Schemaänderungen lässt sich auch die Dokumentation der Tabellen und Spalten versionieren. Damit erhält man ein zentrales Element für die Pflege der Datenbankdokumentation und kann diese Information in beliebig viele Datenbanksysteme einspielen und aktuell halten oder in Form von Dokumenten extrahieren.

Datenbankversionierung am Beispiel von Liquibase

Liquibase ist ein Open Source Projekt für die Versionierung von Datenbanken, das unter der Apache 2.0 License steht. Es bietet die folgenden Funktionen:

  • Unterstützung von Code Branches und Merging
  • Unterstützung mehrerer Entwickler
  • Unterstützung verschiedener Datenbanktypen
  • Ablage der Änderungen im XML, YAML, JSON und SQL Format
  • Unterstützung für Kontext abhängige Logik
  • Sichere Datenbankänderungen auch in einem Datenbank Cluster
  • Generierung einer Dokumentation von Datenbankänderungen
  • Generierung von Datenbankvergleichen
  • Möglichkeit der Ausführung über den Build Prozess, integriert in die Anwendung oder manuell
  • Automatische Generierung von SQL Skripten zum Review für einen Datenbankadministrator
  • Benötigt nicht zwingend die Verbindung zu einer echten Datenbank

Verwaltung von Änderungen

Jede Änderung am Datenmodell wird in Liquibase als sogenanntes “Change Set” abgelegt. Ein Change Set kann eine oder mehrere Schemaanpassungen oder Datenänderungen enthalten. Jedes Change Set bekommt eine eindeutige ID und wird einem Autor zugeordnet. Die Change Sets können in den oben genannten Formaten abgelegt und in Form einer oder mehrerer Dateien in einer beliebigen Ordnerstruktur verwaltet werden.

Hier ein Beispiel für eine Tabellendefinition im XML Format:

Einspielen von Änderungen

Die in Form von Change Sets abgelegten Änderungen können in eine beliebige Datenbank eingespielt werden. Hierbei stellt sich die grundsätzliche Frage, ob man die Verwaltung beim Einspielen Liquibase überlässt oder nur das SQL generiert, um es dann manuell in die Datenbank einzuspielen. Das hängt natürlich stark von den jeweiligen Gegebenheiten im Projekt ab.

Warum Liquibase im jStage Projekt?

Wir haben uns für Liquibase entschieden, weil es alle unsere Anforderungen abdeckt und zudem als Open Source Projekt am Besten in unser Portfolio passt. Mittlerweile ist das Werkzeug ein fester Bestandteil unseres Entwicklungsprozesses und wir profitieren von den oben genannten Vorteilen. Vor allem die Möglichkeit der lokalen Entwicklung und die Erleichterung im Aufbau von automatisierten Tests haben uns sehr weiter geholfen.

Hinterlassen Sie eine Antwort

Ihre E-Mail-Adresse wird nicht veröffentlicht.