1. Введение
В нашу эпоху непрерывной интеграции и автоматизированного рефакторинга разработки баз данных нам нужны методы эволюционного проектирования баз данных . Такие инструменты, как Liquibase и Flyway , следуют этим методам и обеспечивают итеративный подход к разработке. В этой статье мы изучим различия и сходства между Liquibase и Flyway.
Обратите внимание, что ни один инструмент не идеален для всех случаев использования. Каждый инструмент силен в своем месте.
2. Сходства между Liquibase и Flyway
Поскольку Liquibase и Flyway реализуют принципы разработки эволюционной базы данных , они предлагают множество схожих функций. Оба инструмента:
- В некоторой степени имеют открытый исходный код и помогают управлять, отслеживать и развертывать изменения схемы базы данных.
- Используйте версионный подход к миграции для изменения схемы базы данных.
- Основаны на Java и обеспечивают обширную поддержку сред Java, таких как Spring Boot и Vert.x.
- Поддержка интеграции с инструментами сборки, такими как Maven и Gradle.
- Может работать независимо из командной строки с помощью предоставленных скриптов.
- Поддержка большого количества баз данных.
Теперь мы обсудим различия между предложениями этих инструментов.
3. Различия между Liquibase и Flyway
3.1. Определение изменения
Flyway использует SQL для определения изменений. С другой стороны, Liquibase обеспечивает гибкость для указания изменений в различных форматах, включая SQL, например XML, YAML и JSON. С Liquibase мы можем работать с языками, не зависящими от базы данных, и легко применять изменения схемы к различным типам баз данных.
Flyway построен на основе линейной системы управления версиями базы данных, которая увеличивается при каждом изменении версии. Это иногда может создавать конфликты с параллельной разработкой. Имя файла скрипта Flyway определяет тип миграции . Например, миграция должна иметь такие префиксы, как V
(для версии), U (для отмены) и R (для повторяемости). За ним будет следовать номер версии и разделитель (два символа подчеркивания), за которыми следует описание и суффикс .sql
, например `V01Add_New_Column.sql` .
Миграция Liquibase не требует соблюдения каких-либо соглашений об именах файлов. В Liquibase изменения управляются одним реестром, известным как основной журнал изменений, который будет определен как включающий все миграции.
3.2. Сохранение изменения
Оба инструмента сохраняют развернутое изменение в таблице. Миграции Flyway хранятся в схеме базы данных с таблицей по умолчанию с именем flyway_schema_history
. Точно так же Liquibase хранит свои развернутые миграции в таблице с именем databasechangelog
. Оба инструмента поддерживают переопределение конфигурации по умолчанию для изменения имени таблицы.
3.3. Порядок выполнения изменений
Управление порядком изменений в Flyway сравнительно сложно. С Flyway порядок зависит от номера версии и типа миграции в имени файла. Напротив, Liquibase использует отдельный файл с именем master_changelog,
в котором изменения развертываются в том порядке, в котором они определены.
3.4. Откатить изменение
Теперь давайте обсудим один из основных аспектов миграции базы данных. Откат необходим всякий раз, когда плохое изменение вызвало катастрофическую проблему в приложении. Liquibase предоставляет возможность откатить все назад или отменить определенные миграции (доступно только в платных версиях).
У Flyway также есть функция отмены миграции, которую можно развернуть с именем файла, начинающимся с буквы U
, за которой следует версия, которую необходимо отменить. Но эта функция доступна только в платной версии.
Оба инструмента предлагают достойную функциональность отката, но, учитывая только бесплатную версию, Flyway предлагает удобное решение.
3.5. Выборочное развертывание изменения
Есть случаи использования, когда нам нужно развернуть изменение только в одной среде. Liquibase выигрывает здесь, когда нам приходится выборочно внедрять изменения. Flyway также может это сделать, но вам придется настроить отдельный файл конфигурации для каждой среды или базы данных. С Liquibase мы можем легко добавлять метки и контексты , чтобы обеспечить развертывание в определенных местах.
3.6. Миграция на основе Java
Хотя оба инструмента строго ориентированы на Java, только Flyway обеспечивает миграцию на основе Java . Flyway позволяет определить миграцию в файле Java. Это может быть выгодно в некоторых сценариях.
3.7. Снимки и сравнение баз данных
Liquibase позволяет пользователям делать снимок текущего состояния базы данных. Мы можем использовать это состояние, чтобы сравнить его с другой базой данных. Это было бы очень полезно в таких сценариях, как отработка отказа и репликация базы данных. С другой стороны, Flyway не поддерживает ни одну из функций моментальных снимков.
3.8. Условное развертывание
Liquibase предлагает дополнительную функцию, называемую предварительными условиями. Предварительные условия позволяют пользователям применять изменения на основе текущего состояния базы данных. Набор изменений будет выполнен только в том случае, если он пройдет эти предварительные условия.
С другой стороны, Flyway не поддерживает это. Но с помощью процедур мы можем применять условия в большинстве баз данных на основе SQL.
4. Вывод
В этой статье мы сравнили два наиболее часто используемых инструмента миграции баз данных Liquibase и Flyway. При выборе между инструментами всегда приходится идти на компромиссы. Нет никаких сильных недостатков или преимуществ любого из инструментов по сравнению друг с другом. Вы можете выбрать Liquibase или Flyway в зависимости от потребностей вашего приложения и установить большинство флажков.