Datenbank-Refactoring-Toolkit: Flyway vs. Liquibase

In diesem Artikel werden wir über Flyway und Liquibase sprechen , die beiden beliebtesten Java-basierten Datenbank-Refactoring-Tools. Der Zweck des Artikels besteht darin, diese Tools zu vergleichen und herauszufinden, welches in welchen Fällen besser zu verwenden ist.


Db Omnibus


Flyway


Das Flyway-Konzept konzentriert sich auf sechs verschiedene Teams , um das automatisierte Refactoring und die Versionierung von Datenbanken zu unterstützen. Diese Befehle können über die Befehlszeile, während des Erstellungsprozesses (erstellt mit Maven oder Gradle) oder direkt aus Java-Code mithilfe von API-Aufrufen ausgeführt werden. Wenn Sie diese Befehle ausführen, müssen Sie die Parameter für die Verbindung mit der Datenbank (URL, Benutzername, Kennwort) angeben, die Sie umgestalten möchten.


Der Hauptbefehl heißt migrate und führt eine Funktion aus, die die gesamte Essenz des Datenbank-Refactorings enthält: Er durchsucht einen speziellen Ordner mit SQL-Skripten (von denen jedes eine Versionsnummer im Dateinamen hat) und überprüft, welche davon bereits auf die Zieldatenbank angewendet wurden. Anschließend werden diejenigen ausgeführt, die noch nicht auf diese Datenbank angewendet wurden. Im Falle eines Konflikts, wenn sich beispielsweise das bereits angewendete Skript seit seiner Verwendung geändert hat, unterbricht Flyway den Betrieb mit einer Fehlermeldung.


Ein einzigartiges Merkmal von Flyway ist, dass Migrationsskripte nicht nur im SQL-Format, sondern auch in Form von Java-Code vorliegen können. Mit der zweiten Option können Sie dynamische Migrationen mit komplexer Logik implementieren. Sie sollten den Java-Ansatz jedoch mit Vorsicht verwenden, da solche Migrationsskripte normalerweise schwer zu debuggen sind, wenn bei ihnen ein Fehler aufgetreten ist.


Zusätzlich zum Hauptbefehl zum migrate verfügt Flyway über zusätzliche Befehle, die den Prozess des Datenbank-Refactorings erleichtern.


Der Befehl info zeigt alle verfügbaren Migrationsskripte aus einem bestimmten Ordner an und notiert, welche davon bereits verwendet wurden und welche nur auf die Zieldatenbank angewendet werden.


Um zu überprüfen, ob sich die auf die Datenbank angewendeten Skripte geändert haben, wird der Befehl validate verwendet. Für uns ist es hilfreich zu wissen, ob das bereits angewendete Skript aus dem Ordner geändert wurde, seit es auf die Datenbank angewendet wurde, da dies bedeuten kann, dass das Skript auf verschiedene Datenbanken in verschiedenen Versionen angewendet wurde, was zu Problemen führen kann.


Wenn Sie der Meinung sind, dass die Skripte trotz des vom Befehl validate angezeigten Fehlers verwendet werden sollten, können Sie den Reparaturbefehl ausführen. Die von Flyway verwendete Datenbanktabelle wird zurückgesetzt, um aufzuzeichnen, welche Skripte bereits angewendet wurden (standardmäßig heißt diese Tabelle SCHEMA_VERSION).


Und der letzte, aber nicht weniger wichtige Befehl clean löscht das ausgewählte Schema vollständig (wie Sie wissen, sollte dieser Befehl nur für Testdatenbanken verwendet werden).


Liquibase


Liquibase verfolgt einen anderen Ansatz zur Implementierung des Datenbank-Refactorings. Im Gegensatz zu Flyway, das Migrationsskripte nur in den Formaten SQL und Java unterstützt, können Sie mit Liquibase von SQL abstrahieren und so das Datenbank-Refactoring aus seiner spezifischen Implementierung entfernen.


Anstelle von SQL-Skripten unterstützt Liquibase Migrationsskripten in den Formaten XML, YAML und JSON. In diesen Skripten definieren Sie Änderungen an der Datenbank auf Abstraktionsebene. Für jede Änderung verfügt Liquibase über ein entsprechendes Element in XML, YAML und JSON. Eine Änderung, mit der eine neue Datenbanktabelle im YAML-Format erstellt wird, sieht beispielsweise folgendermaßen aus:


 createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255) 

Änderungen wie add column , create index oder alter table und andere sehen ähnlich aus.
Während des Betriebs wendet Liquibase automatisch alle Skripte an, die noch nicht verwendet wurden, und speichert ihre Metadaten wie Flyway in einer speziellen Datenbanktabelle. Wie Flyway kann Liquibase über die Befehlszeile von Build-Tools oder direkt über die Java-API aufgerufen werden.


Wann soll man sie benutzen?


Sowohl Flyway als auch Liquibase unterstützen alle Funktionen, die für das professionelle Refactoring und die Versionierung von Datenbanken erforderlich sind, sodass Sie immer wissen, mit welcher Version des Datenbankschemas Sie es zu tun haben und ob sie mit der Version Ihrer Software übereinstimmt. Beide Tools sind in Maven und Gradle sowie in das Spring Boot-Ökosystem integriert, sodass das Datenbank-Refactoring vollständig automatisiert werden kann.


Flyway verwendet SQL, um Datenbankänderungen zu identifizieren, sodass Sie SQL-Skripts so konfigurieren können, dass sie effektiv mit bestimmten Datenbanktypen in Ihrem Projekt arbeiten, z. B. Oracle oder PostgreSQL. Andererseits führt Liquibase eine zusätzliche Abstraktionsebene ein, die XML, YAML oder JSON verwendet, um Datenbankänderungen zu erkennen. Daher eignet sich Liquibase besser für Software, die in verschiedenen Umgebungen mit verschiedenen Arten von Datenbankservern installiert werden muss. Wenn Sie jedoch die vollständige Kontrolle über Ihr SQL benötigen, ist Flyway Ihre Wahl, da Sie die Datenbank mit vollständig benutzerdefiniertem SQL oder sogar mit Java-Code ändern können.


Der Haken bei beiden Tools ist, dass sie von einer Person (vom Übersetzer: laut Autor) und nicht von einem großen Team unterstützt werden. Dies kann sich negativ auf die zukünftige Entwicklung beider Tools auswirken, ist jedoch nicht erforderlich. Zum Zeitpunkt dieses Schreibens ist die Aktivität im Flyway GitHub-Repository höher als im Liquibase-Repository .

Source: https://habr.com/ru/post/de440696/


All Articles