• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Liquibase – контроль версий вашей базы данных

Вступ

Разветвленная разработка любого современного веб-приложения не обходится без использования баз данных, которые, как и код приложения, требуют контроля версий своей структуры и внесенных изменений. Для этой цели разрабатывается множество программных средств, принимающих на себя выполнение указанных функций. Одним из них является кроссплатформенное приложение Liquibase с открытым исходным кодом, созданным на языке Java. Он выделяется среди своих аналогов прежде всего более высоким уровнем универсальности, что позволяет использовать его для более широкого спектра баз данных. Рассмотрим основные концепции применения приложения и их возможности.

Миграции баз данных

Миграции являются средством контроля изменений в схеме базы данных (БД), позволяющим отслеживать изменения в ее структуре и согласовывать эти изменения с другими участниками команды разработчиков. Они позволяют синхронизировать БД, что необходимо, в частности, для бесконфликтной передачи изменений на стенды тестирования, разработки и другие, обычно используемые при организации процесса разработки веб-приложений.

Разработка большинства веб-проектов происходит с использованием концепции Agile, при которой невозможно определить конечную структуру базы данных на исходной позиции, то есть на начальной стадии разработки. Ее разрастание и видоизменения идут постепенно по мере создания кода проекта и его усовершенствования. И поэтому необходимо постоянно осуществлять автоматизированный рефакторинг баз. И помогают в этом миграции.

Миграции позволяют осуществлять предварительную проверку внесенных в структуру базы изменений перед их попаданием в релизную ветвь разработки, что значительно уменьшает вероятность попадания ошибок на более высокий уровень разработки.

Для реализации механизма миграций баз данных в Java-приложениях чаще всего используются программные средства Flyway или Liquibase, хорошо интегрирующиеся с maven и другими инструментами автоматизации сборки проектов.

Сущность их работы состоит в следующем. Вся «нулевая» структура схемы БД, а также все вносимые в дальнейшем изменения описываются с помощью отдельных файлов в формате, поддерживаемом программным средством миграции.

Сразу после запуска программы, она определяет какие из существующих сценариев уже выполнялись, а какие требуют выполнения, поскольку ведет учет изменений с помощью специальных таблиц, где фиксируются, в частности, такие данные, как идентификатор изменения, дата и другие. Преобразователь программы обрабатывает указанные файлы сценариев и формирует на их основе SQL-запросы. После этого происходит подключение к определенному серверу баз данных с помощью соответствующего драйвера и передача запросов на исполнение.

Обновление структуры и данных может происходить как в автоматическом режиме, так и с помощью специальной команды. После обновления базы в специальном отчете выдается перечень внесенных изменений.

Возможности Liquibase

В отличие от своих аналогов, программа Liquibase поддерживает наибольшее количество форматов текстовых файлов для описания внесенных изменений и поэтому является более универсальной. Это, в частности, следующие форматы – JSON, YAML, SQL и XML. Такой подход позволяет применять ее для сложных проектов, имеющих в своем составе разные типы баз данных, некоторые даже могут быть и не реляционными. Для этого достаточно выбрать один из декларативных форматов сценариев для описания вносимых изменений, например, XML и программа будет готова обеспечить работу со всеми подключенными базами. Декларативный формат XML обеспечивает более высокий уровень абстрагирования и поэтому становится возможным не учитывать типы баз данных.

Liquibase является отдельным программным средством и поэтому его использование не зависит от языка разработки веб-проекта, что значительно повышает уровень его универсальности.

Liquibase официально поддерживает работу с несколькими десятками типов баз данных, однако может работать даже с теми, которые не объявлены в документации. А для каждой из объявленных устанавливается определенный уровень интегрированности с программой Advanced, Foundational, Contributed и Research. Около трех десятков БД относятся к самым высоким уровням – Advanced и Foundational. Это, например, следующие СУБД:

  • PostgreSQL;
  • Microsoft SQL Server;
  • MariaDB;
  • EnterpriseDB;
  • MSSQL;
  • Oracle Database;
  • Snowflake;
  • Firebird;
  • H2;
  • SQLite.

Базовый состав программы предоставляет гораздо больше возможностей для работы по сравнению с аналогами. Это, например, следующие механизмы:

  • Отмена изменений – отмена последних Z изменений, отмена на определенную дату или время, отмена в тег;
  • Автоматическая генерация миграций;
  • Возможность просмотра SQL-запросов, которые будут выполнены (механизм dry-run);
  • Поддержка более 30-ти интегрированных рефакторингов структуры БД;
  • Автономный механизм IDE;
  • Формирование отчетов с фиксацией всех произошедших изменений;
  • Создание журналов изменений и документации к ним;
  • Управление через Apache Maven/Ant, Gradle, Docker, Spring Framework или терминал;
  • Возможность упростить управление проектом за счет разбиения журналов изменений на несколько отдельных файлов.

Практическое использование Liquibase

Рассмотрим поэтапные действия, которые нужно выполнить для практического использования программы. Укажем их:

  • Установка;
  • Подключение к существующей базе данных.

Установка

Доступные варианты установки Liquibase для следующих операционных систем:

  • ОС Windows;
  • MacOS;
  • Linux (Debian / Ubuntu);
  • Unix.

Для каждой ОС можно выбрать установку как в автоматическом режиме, так и вручную. Для этого необходимо перейти по следующей ссылке.

Вибор версии Liquibase для установки

Как видим, в настоящее время доступна версия 4.23.1. Установка для Windows, как правило, не вызывает никаких сложностей. И поэтому рассмотрим вариант ручного развертывания программы для ОС Linux (Debian/Ubuntu).

Прежде всего, необходимо импортировать ключ Liquibase GPG и добавить в список источников менеджеру apt Liquibase-репозиторий. Для этого в командной строчке терминала необходимо ввести следующую команду:

wget -O- https://repo.liquibase.com/liquibase.asc | gpg --dearmor > liquibase-keyring.gpg && \
cat liquibase-keyring.gpg | sudo tee /usr/share/keyrings/liquibase-keyring.gpg > /dev/null && \
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/liquibase-keyring.gpg]
https://repo.liquibase.com stable main' | sudo tee /etc/apt/sources.list.d/liquibase.list

После этого необходимо обновить список доступных пакетов с помощью команды:

sudo apt-get update

Следующим шагом будет непосредственная установка программы Liquibase:

sudo apt-get install liquibase

Обновление продукта обычно не вызывает сложностей. Для этого достаточно сначала обновить список пакетов, а затем запустить процесс их обновления:

sudo apt-get update
sudo apt-get upgrade liquibase

Удаление программы, при необходимости, также производится очень просто:

sudo apt-get remove liquibase

Подключение к уже существующей базе данных

Подключение программы к уже существующей БД можно осуществить, например, с помощью плагина maven или с командной строчки. Воспользуемся вторым путем. Для этого на компьютере, где установлена ??Liquibase, необходимо создать файл свойства с именем liquibase.properties, в который необходимо внести следующую информацию:

  • Параметры доступа к БД;
  • Имя результирующего файла сценария выбранного формата;
  • Путь к драйверу БД;
  • Название директории по данным.

Например, для БД Snowflake содержимое файла liquibase.properties может быть следующим:

username=snowflake
password=new_pass
url=jdbc:snowflake://<account_ID>.snowflakecomputing.com/?<connection_params>
driver=net.snowflake.client.jdbc.SnowflakeDriver
classpath=snowflake-jdbc-.jar
changeLogFile=baza.xml
dataOutputDirectory=data

Файл драйвера с расширением jar необходимо поместить в ту же директорию, в которой находится liquibase.properties.

В этом случае результирующим файлом сценария будет файл baza.xml в формате XML.

Для запуска программы в командной строчке необходимо будет ввести следующую команду:

liquibase generateChangeLog

В результате мы получим в той же директории файл сценария baza.xml с описанием схемы базы данных, а в директории, определенной параметром dataOutputDirectory, данные в формате csv. В нашем случае это директория data. Конечно, мы могли бы получить скрипты не только в формате XML, но и в любом другом формате, например SQL или YAML. Для этого достаточно было бы указать соответствующий тип расширения для файла baza.

В случае использования в проекте популярной базы данных MySQL Server, формат названия файла драйвера будет следующим:

mysql-connector-java-.jar

Скачать драйвер для разных типов Linux-совместимых ОС можно по следующей ссылке:

MySQL Downloads

Формат записи JDBC URL для указанной базы данных будет следующим:

jdbc:mysql://<servername>:<port>/<dbname>

Следует отметить, что именно формат XML наиболее удобен для использования в качестве средства описания схемы БД, поскольку он более понятен для восприятия и позволяет в автоматическом режиме подставлять названия тегов и атрибутов в файле.

Ищете сервер для разработки, тестирования, размещения проекта? Дата-центр FREEhost.UA может предложить аренду сервера для решения любых задач. Настроенный сервер готов к работе уже через несколько часов после подтверждения заказа. Круглосуточная поддержка помогает в повседневном обслуживании и админировании серверов.

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.

Дата: 18.09.2023
Автор: Александр Ровник
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA