Battle der Datenbankmigrationstools Techn. Projektleiter Leidenschaft sind neue Software- Technologien Architekt und Methoden
ISTQB, ISAQB, IREB und ITIL JEE – SOA - Host zertifiziert
Speaker & Autor Java seit 2002 Einleitung Funktionsweise BATTLE 1.Runde: Funktionen 2.Runde: Einbindung in bestehende Projekte 3.Runde: Integrationsmöglichkeiten 4.Runde: Inbetriebnahme und Handhabung 5.Runde: Verfügbare Plug-Ins 6.Runde: Rahmenbedingungen
http://games.on.net/2013/08/saints-row-4-steam-release-date-changes-again-now-just-says-september/ http://www.ihatecellulite.com/images/quick-fix-for-cellulite.jpg
http://games.on.net/2013/08/saints-row-4-steam-release-date-changes-again-now-just-says-september/ http://www.ihatecellulite.com/images/quick-fix-for-cellulite.jpg
http://www.oio.de/m/konf/diverse/Continuous-database-design-JUGH2015.pdf http://games.on.net/2013/08/saints-row-4-steam-release-date-changes-again-now-just-says-september/ Continuous Delivery?
Kontrollierte DB-Änderungen
Keine Downtime Quellcode wird versioniert, DB-Änderungen sollten auch!
merken sich in einer von ihnen selbst verwalteten Metatabelle für jedes Schema den aktuellen Versionsstand der jeweiligen Datenbank
Integration in eigene Anwendung (Migration on startup)
Oder in den Build-Prozess (Command-Line, Ant, …) Kein Datenbank- Administrator mehr notwendig
Link
Funktionen Flyway zusätzlich: beide: LiquiBase zusätzlich:
SQL Azure Oracle Sybase_Enterprise
Google Cloud SQL SQL Server Sybase_Anywhere
HP Vertica DB2 Informix
AWS Redshift MySQL Firebird
DB2 on z/OS PostgreSQL
SolidDB H2
Sybase ASE * Hsql
SAP HANA * Derby
Apache Phoenix * SQLite
MariaDB Funktion Flyway LiquiBase Migration +++ +++ migrate update
Rollback - ++ rollback
Schema leeren + + clean dropAll
Dokumentation + ++ info DBDoc Funktion Flyway LiquiBase Vergleich zweier - ++ Datenbanken Diff
Validierung + - validate
Initialisierung + - baseline
Wartung + + repair clearChecksums Funktion Flyway LiquiBase Callbacks + -
Vorbedingungen - +
Kontexte - ++
Refactoring - ++ Flyway LiquiBase
Endergebnis 9 16
Außerhalb der Wertung: Die Funktion updateSQL von LiquiBase Ermöglicht, die anstehende Migration zunächst als SQL-Befehle auszugeben, z.B. zu Review- Zwecken. Ist bei Flyway nicht relevant, da Plain-SQL-Skripte verwendet werden
Einbindung in bestehende Projekte Herausforderung
Die aktuellen Datenbank-Stände nachträglich versionieren Flyway LiquiBase
● Manuellen Abzug (DDL) der ● Stand der Produktion per Produktion erzeugen als Version 1 generateChangelog als Version 1 Skript taggen
● Per clean alle anderen Datenbanken ● Per Diff mit anderen Umgebungen leeren und auf Version 1 migrieren vergleichen und changelogs erzeugen ● Oder manuell auf den Stand der
Produktion bringen und per ● changelogs als „bereits gelaufen“ baseline-Befehl den Stand als markieren bzw. für neue Läufe Version 1 setzen ausschließen Integration bei LiquiBase durch geschickte Kombination mächtiger Funktionen deutlich vielversprechender
Integrationsmöglichkeiten Flyway: LiquiBase:
Java-API Java-API
Command-Line Command-Line
Maven Maven
Ant Ant
Gradle Spring (als Bean)
SBT Servlet-Listener
CDI Environment Flyway LiquiBase Java-API Command-Line Ant Maven Gradle SBT Spring Servlet-Listener CDI-Environment
Inbetriebnahme & Handhabung Flyway LiquiBase
● Archiv entpacken ● Archiv entpacken
● DB-Treiber inklusive ● DB-Treiber besorgen
● Sehr einfach für neue Projekte ● Konfigurationsdatei selbst anlegen
● Konfigurationsvorlage ● SQL-Skripte anpassen bzw. changelog.xml erstellen ● SQL-Skripte 1:1 verwendbar
● Aufruf mit einer Zeile in der ● Aufruf mit einer Zeile in der Konsole Konsole Vorteile Nachteile
Flyway - Einfache Konfiguration, vieles - Im Fehlerfall ist kein automatisches wird direkt mitgeliefert Rollback möglich - Die Einbindung in Java ist sehr einfach - Generell leicht zu erlernen und einzusetzen
LiquiBase - Automatisches Rollback - Viele Parameter für die erleichtert die Handhabung im Kommando-Zeile notwendig Fehlerfall - Schwerer zu erlernen (z.B. Syntax für Changelog-Datei) - Einbindung in Java ist nicht beschrieben, nur JavaDoc steht online bereit
Verfügbare Plug-Ins Flyway:
Spring Boot & Roo, Grails, Play, DropWizard, ... http://flywaydb.org/documentation/pluginsThirdParty.html
LiquiBase:
Hauptsächlich DB-Extensions https://liquibase.jira.com/wiki/display/CONTRIB/Liquibase+Extensions+Portal
LiquiBase hat mehr, Flyway aber die interessanteren
Rahmenbedingungen ● Community
● Entwicklung
● Dokumentation
● Support 1. Community
LiquiBase ca. 3-4 mal so viele Contributor (189 zu 51) und Commits wie Flyway (4952 zu 1540) [Stand 08.03.16]
→ Vorteil LiquiBase 2. Entwicklung
LiquiBase deutlich mehr Tickets (auch offene) Aber auch deutlich weitere Verbreitung Releases bei beiden eher unregelmäßig
→ Unentschieden 3. Dokumentation Flyway: alles sehr gut beschrieben, kurz aber verständlich
LiquiBase: alles sehr gut beschrieben, mehr Umfang da mehr Features,
→ Unentschieden 4. professioneller Support
Flyway: ja, sogar auf deutsch LiquiBase: ja, Sprache Englisch, da Firmensitz Texas
→ Vorteil Flyway ● Community → LiquiBase
● Entwicklung → Unentschieden
● Dokumentation → Unentschieden
● Support → Flyway
→ insgesamt Unentschieden
Knapper Sieg für LiquiBase, aber … Entscheidung für Flyway oder LiquiBase hängt von anderen Faktoren ab:
● Wird im Projekt eine spezielle Datenbank verwendet, die nur ein Tool unterstützt?
● Will man seine bisherigen SQL-Skripte 1:1 weiterverwenden?
● Kann man auf Rollbacks verzichten? (z.B. durch geschickte Forward- Migrationen)
● Benötigt man deutschen Support?
● Will man seine Testdaten mit verwalten lassen?
● Will man diverse DBMS unterstützen?
● Wie groß ist das Entwicklerteam? Unterstützung von NoSQL-Datenbanken ist noch offen
Starten Sie mit einem kleinen neuen Projekt
Machen Sie behutsam auf die Vorteile aufmerksam
Es sind nicht nur technische Hürden zu überwinden Noch Fragen?
Artikel dazu in ObjektSpektrum 2/2015
Stephan Kaps | @kitenco1 | [email protected]
Vielen Dank an Rebecca Nöll für die Erstellung der Boxring-Grafiken ● ● Continuous Application ● Social- Delivery Lifecycle Collaboration Management
● Schulung ● JIRA ● Vorträge
● Coaching ● Jenkins ● Artikel
● Training ● Confluence ● PoCs