• База знань
  • /
  • Блог
  • /
  • 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