2016-08-19 6 views
7

Ich habe mir sowohl Liquibase als auch Flyway einzeln angeschaut und im Einzelvergleich scheint Liquibase das bessere Werkzeug für unsere Bedürfnisse zu sein. Einige Quellen erwähnen die Verwendung von Liquibase und Flyway zusammen. Liquibase scheint alles zu haben, was Flyway hat und mehr Flexibilität bei Rollbacks. Der Hauptvorteil von nur Flyway scheint zu sein, nicht XML zu verwenden, aber Liquibase erlaubt Ihnen, eine SQL-Datei in ihrem XML anzugeben.Flyway und Liquibase zusammen?

Grundsätzlich bin ich immer noch nicht klar, was die Vorteile der Verwendung von Flyway & Liquibase zusammen über nur Liquibase wäre, wenn es welche gibt. Vielleicht gibt es einen Weg, dies zu tun. Ich sehe nicht, dass selbst wenn Liquibase gültige Flyway SQL-Dateien referenziert, beide Werkzeuge unabhängig voneinander ausgeführt werden müssten und trotzdem die gleichen Fallstricke hätten, obwohl Sie beide Tools technisch verwenden könnten.

Antwort

16

Eine kleine Korrektur, bevor ich Frage beantworte. Die Annahme

Liquibase scheint alles Flyway hat

ist nicht richtig zu haben. Flyway glänzt, wenn es um das Parsen von SQL geht. Sie können unmodifizierte SQL-Dateien verwenden, die von Ihren nativen Tools generiert wurden und alle Arten von Komplexität enthalten, wie PL/SQL-Pakete und Prozeduren, MySQL Delimiter-Änderungen, T-SQL, PostgreSQL-Prozeduren, ... Bei Liquibase müssten Sie diese in einzelne Anweisungen aufteilen. fügen Sie zusätzliche Kommentare zu den SQL-Dateien hinzu, ...

Die Schönheit der Fähigkeit, Ihre SQL-Dateien unverändert zu verwenden, ist, dass Sie Lock-in vermeiden. Sie können Ihre bestehenden SQL-Dateien nehmen, Flyway mit minimalen Investitionen verwenden und später wegziehen, wenn es nicht mehr Ihren Bedürfnissen entspricht. Nicht so mit Liquibase.

Auch die Frage der Downmigrationen (man denke an sie als kompensierende Transaktionen, nicht Rollbacks) ist wirklich etwas, das klingt in der Theorie großartig, aber das wird fast nie in der Praxis benötigt. Siehe jedoch, wenn es darum geht, eine oder beide zu verwenden, stimme ich mit SteveDonie (Liquibase-Teammitglied) überein, dass die Verwendung von nur einer der beiden zusammen fast immer die bessere Wahl ist.

Disclaimer: Ich bin Flyway Schöpfer

+0

Wow, ich hatte nicht erwartet, solche definitive Antworten auf diese direkt von den Machern zu haben! Vielen Dank. Sie sind auf Rollbacks sinnvoll, und selbst mit liquibase Rollbacks sind mehr oder weniger eine andere Migration. Ich fühle mich wie Übung ist, wo Dinge relativer werden. Dies sollte einen mehr oder weniger manuellen Prozess ersetzen, so dass wirklich jedes Werkzeug besser ist. Da der Anwendungsfall in einem Jenkins-Job ist, habe ich das Gefühl, dass es bestimmte Änderungen in der Produktion gibt, die unerwünscht wären, und Sie würden die umgekehrten Operationen benötigen. Rollback ist nur ein Name für einen Befehl aus meiner Sicht. – Slayer0248

+0

Ich meine, Sie könnten den Namen wahrscheinlich ändern, wenn Sie möchten. Rollback wurde gerade übernommen und wird derzeit verwendet. Niemand würde es etwas anderes nennen, wenn ich einen anderen Namen dafür verwende, da ich den Trend nicht festgestellt habe. Nur meine Gedanken. – Slayer0248

+2

hey hi, ich habe ernsthafte Zweifel an deinen Antworten, wenn ich auf der Hauptseite einen Vergleich zwischen einem Migrationstool und einem Mapper sehe, du kannst mybatis nicht mit flyway vergleichen, ist wie Äpfel mit Tesla-Engines zu vergleichen, sie sind wie .. machen dasselbe Ding .. sie existieren! und Hersteller Sperre in .. wirklich? nimm dein einfaches altes (universal, ich schätze) sql von postgres und wende es in oracle an, du wirst einfach alten mann bekommen bis du mit "a breeze" ans liquibase bekommst, ist nicht nur über xml einfach das öffnen docs .. oh my –

4

Einverstanden. Ich denke nicht, dass es eine gute Idee wäre, sie zusammen zu benutzen.

7

Ich würde nie empfehlen beiden Werkzeuge zur gleichen Zeit verwenden. Meiner Erfahrung nach verursacht sogar nur einer von ihnen Konflikte/Kollisionen von Zeit zu Zeit in großen verteilten Umgebungen (über 5 Teams mit Zugriff auf die gleiche DB).

Ich will euch auch ein paar Vor-und Nachteile, wenn es um Laufen diese Tools in Projekten mit großen, verteilten Teams kommt:

Zugweg:

Nachteile: Sehr streng, wenn es um Änderungen von Migrationsdateien geht. Wenn jemand seine Migrationsdatei eingecheckt hat, wird nicht empfohlen, sie zu ändern. Es ist so, als würde man in gemeinsamen Projekten force push in git einsetzen. Das Ändern einer Migration (entweder der Inhalt oder der Name der Datei) führt zu einem Migrationsfehler auf allen Computern, die die vorherige Version der Datei hatten. Das gesamte Migrationspaket muss von Grund auf neu gestartet werden. In manchen Fällen kann es sehr lange dauern.

Pros: Nun, was in Cons beschrieben wurde, wird zur gleichen Zeit ein Maß an Disziplin aufbauen. Es könnte eine vernünftige Einschränkung sein, wenn über die Einführung gleichzeitiger Änderungen durch mehrere Teams in eine produktiv laufende Anwendung gesprochen wird.

Liquibase:

Nachteile: Mit ein paar tweaks sollte Ihnen ermöglichen, die bestehenden (angewandte) Migrationen zu ändern. Es kann zwar als Vorteil gewertet werden, aber da viele Leute an derselben Codebasis arbeiten, ist besondere Vorsicht geboten. Flexibilität hat ihren Preis. Es ist einfacher, eine "Regression" oder Inkonsistenz einzuführen, wenn ein solcher "git force push" -Stil von Änderungen für verteilte Projekte erlaubt ist.

Pro: Mehr konfigurierbar und flexibler. Könnte in Zukunft Lösungen für NoSQL enthalten. Ein paar nützliche Plugins (zum Beispiel Hibernate-Integration).