Warum und wann Liquibase?

98

Ich habe versucht, diese Frage beim Stapelüberlauf zu suchen, konnte jedoch keine Frage dafür finden.
Ich bin neu Liquibaseund will es wissen

  • Warum Liquibase?
  • Wann genau sollte man Liquibaseim Projekt verwenden?

Ich weiß, dass dies dazu dient , alle Datenbankänderungen an einem Ort zu speichern, aber das Gleiche kann erreicht werden, indem einfache SQLDateien in einem Repository-System erstellt und mit der Zeit aktualisiert werden.

Shakeel Shahzad
quelle

Antworten:

69

Das wichtigste Unterscheidungsmerkmal zwischen einem selbst verwalteten Schema erstellen Datei und Liquibase (oder einem anderen Schema Migration Tool) ist , dass letztere ein Schema Changelog liefert. Dies ist eine Aufzeichnung der Schemaänderungen im Laufe der Zeit. Es ermöglicht dem Datenbankdesigner, Änderungen im Schema anzugeben und das Programm bei Bedarf programmgesteuert zu aktualisieren oder herunterzustufen.

Es gibt andere Vorteile, wie zum Beispiel:

  • Unabhängigkeit des Datenbankanbieters (dies ist fraglich, aber sie versuchen es)
  • automatisierte Dokumentation
  • Datenbankschema unterscheidet sich

Ein alternatives Werkzeug ist Flyway .

Sie würden ein Schema-Migrationstool verwenden, wenn Sie Schema-Updates automatisch verwalten möchten oder müssen, ohne Daten zu verlieren. Das heißt, Sie erwarten, dass sich das Schema ändert, nachdem Ihr System in einer langlebigen Umgebung wie einem Kundenstandort oder einer stabilen Testumgebung bereitgestellt wurde.

Synesso
quelle
1
Aber nehmen wir an, wir erstellen eine Datei und schreiben unser erstes Skript darin und verpflichten es, sagen wir git. Mit der Zeit wird das Schema aktualisiert und wir können zu jedem Zeitintervall zurückkehren und auch das Schema zurück ändern, nicht wahr?
Shakeel Shahzad
1
Mit diesem Ansatz können Sie das Schema neu erstellen , aber kein Downgrade / Upgrade durchführen. Der Unterschied ist der Datenverlust.
Synesso
1
Aber der andere Teil, wann zu verwenden ist, fehlt?
Shakeel Shahzad
1
Synesso Ich sehe noch nicht, wie Sie eine Produktionsdatenbank automatisch herunterstufen können, nachdem sie eine Weile verwendet wurde und Entscheidungen über die Daten mithilfe von beispielsweise neu hinzugefügten Spalten getroffen wurden. Sie können sie jetzt nicht unbedingt fallen lassen. Ich verstehe auch nicht, warum dies besser ist als nur eine Reihe von versionierten SQL-Skripten, die in der Quellcodeverwaltung gespeichert sind und zu Beginn eine einfache Einfügung in eine Versionstabelle und am Ende eine Aktualisierung enthalten, um zu verfolgen, was angewendet wurde.
Khorkrak
18

Ich habe gesehen, dass Liquibase unter den Entwicklern Disziplin schafft, wenn es darum geht, das Schema zu ändern. Sie können die Änderungen anderer Entwickler einfach nicht überschreiben und ausführen. Stattdessen erstellen Sie Ihr eigenes Änderungsset und fügen es am Ende der Sequenz der auszuführenden Änderungen hinzu. Dies bringt auch Klarheit darüber, welche Änderung wann kam und wer sie gebracht hat.

Ein sehr "versionierter" Ansatz zur Schemaerhaltung.

Für den Anfang vermittelt es jedoch den Eindruck von "unnötiger Arbeit".

iCrus
quelle
4
Welches bin ich (es gibt mir den genauen Eindruck, den Sie erwähnt haben: P) +1 für diese entscheidende Bestimmung
Ismail Sahin
Sie haben Recht, wir können alle Änderungen verfolgen, die die letzten Änderungen vorgenommen haben und wann. Wenn wir zu einem bestimmten Punkt zurückkehren müssen, ist Liquibase hilfreich
Anoop PS
7

Wenn Sie mehrere Datenbankinstanzen in dev, qa, Production haben und ein Tool zum automatischen Verfolgen des Änderungsverlaufs und zum intelligenten Anwenden von Änderungen (Anwenden des Unterschieds zwischen aktuellem Schema und endgültigem Schema) benötigen, sind Tools wie Liquibase oder Flyway sehr nützlich .

Ted Xu
quelle
3

Ich glaube, Liquibase ist großartig, wenn Ihre Philosophie ist, dass die Datenbank ein nachträglicher Gedanke ist. Diese Philosophie hat die meisten schlechten Datenbanken in der Produktion verursacht - und die meisten von ihnen sind schlecht. Eine Datenbank sollte mit einer vollständigen Ansicht des gesamten Geschäftssystems entworfen werden und nicht von Anwendungsentwicklern zusammengestellt werden, die jeweils in ihren eigenen Silos arbeiten. Die letztere Methode führt zu Problemumgehungen, denormalisierten Daten, schlechten Beziehungen zwischen Tabellen, doppelten Geschäftsbereichen und einem insgesamt chaotischen System mit hohen Wartungskosten, das der Client kurz nach der Bereitstellung aufgrund der dadurch verursachten Probleme hassen wird. Wenn eine Datenbank so konzipiert ist, dass sie Geschäftsbeziehungen GENAU widerspiegelt, ist ihre Lebensdauer fünfmal so lang und erfüllt ihren Zweck fünfmal besser als eine Datenbank, die leider stückweise entworfen wurde, wie es leider die meisten sind.

Liquibase ist an sich kein Problem, ermöglicht jedoch die Praxis, dass Anwendungsentwickler die Datenbank entwerfen. Das ist das Problem.

Bob Barry
quelle
19
Die technischen Daten ändern sich, neue Funktionen werden hinzugefügt, Fehler werden behoben. Selbst wenn "eine Datenbank so konzipiert ist, dass sie Geschäftsbeziehungen GENAU widerspiegelt", ist es normal und zu erwarten, dass Sie im Laufe der Zeit Änderungen an der Datenbank vornehmen müssen, da sich Unternehmen und Geschäftsbeziehungen im Laufe der Zeit ändern. Liquibase hilft Ihnen nur bei der Verwaltung dieser Änderungen. Das ist es.
Steven Byks
Nach meiner Erfahrung verwenden nur sehr wenige Datenbankadministratoren und eine ganze Reihe von Entwicklern Liquibase - ich denke, @ bob-barry ist mit den meisten Endergebnissen genau richtig. DBAs, die Tools wie Liquibase verwenden (oder einfach nur altes Git für den Verlauf von Änderungen), werden es jedoch nützlich finden.
PhillipHolmes
Evolutionäre DB-Praktiken und Agilität im Allgemeinen fördern und ermöglichen Peer Reviews. Für eine Datenbank mit Leistungsanforderungen arbeiten DBAs weiterhin mit den App-Teams für DB-Änderungen zusammen. Tools wie Liquibase ermöglichen ein einfacheres Refactoring, was Ihrem Denormalisierungsargument widerspricht. Vor 10 Jahren arbeitete ich für ein Produkt, das auf über 20 Clients installiert war und jeweils eigene Patch- und Upgrade-Zyklen aufwies. Nach 2 Jahren Albtraum und dem Versuch, ein solches Werkzeug von Hand zu schreiben, sprangen wir zu Liquibase, sobald wir davon erfuhren. Und wir hatten Tische mit 200 Millionen Datensätzen, die auch für diese Zeit nicht riesig waren, aber etwas, das DBAs benötigte.
user6317694
3
Ich hoffe, Sie eines Tages dort im Himmel zu treffen. Klar hört sich gut an.
Bijan
3

Ich denke, warum Liquibase beantwortet werden kann, wenn Sie den folgenden Artikel http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html durchgehen

Wenn Sie es sorgfältig lesen, ist die Möglichkeit, mithilfe einfacher MVN- oder CLI-Befehle von einer höheren Version auf eine niedrigere Version herunterzustufen, sehr nützlich, die Sie nicht erhalten, wenn Sie den Ansatz durchlaufen, Ihre SQL-Datei in GIT festzuschreiben, weil Sie es dann tun Sie müssen diese Skripte manuell ausführen, und Sie haben die Änderung nicht wie folgt festgelegt: - Wer hat die Änderungen vorgenommen?

Shikhar Chaudhary
quelle
0

Als DevOps-Person meines Teams würde ich es vorziehen, alle meine SQL-Dateien an einem Ort zu haben, dh in meinem SCM (Source Code Management).

Auch während der CI / CD-Phase spart das DB-Schema viel Zeit und Ressourcen, wenn es zusammen mit ihm erstellt wird. Sie müssten keine andere Person haben, die Ihre Datenbank für diesen Client verwaltet.

ORM wie Flyway, Liquibase, EF usw. helfen dabei.

Sloka Roy
quelle