МИГРАЦИЯ БАЗЫ ДАННЫХ
Чернова Е.В.
Студент,
Оренбургский государственный университет
МИГРАЦИЯ БАЗЫ ДАННЫХ
Аннотация
В статье рассмотрены наиболее популярные системы миграции базы данных – Flyway и Liquibase, а также необходимость использования миграций.
Ключевые слова: миграция, база данных, SQL, приложение.
Chernova E.V.
Student,
Orenburg State University
DATABASE MIGRATION
Abstract
The article describes the most popular systems of database migration - Flyway and LiquiBase, as well as the necessity for using migrations.
Keywords: migration, database, SQL, application.
При разработке программного продукта часто возникает ситуация, когда меняется не только программный код, но и база данных. Для того чтобы организованно изменять базы данных на всех окружениях разработки принято использовать механизм миграции. Наиболее популярными на данный момент фреймворками для миграций баз данных являются Flyway и Liquibase.
Flyway поддерживает наиболее распространенные базы данных, такие как: Oracle, SQL Server, DB2, MySQL, PostgreSQL, HSQLDB, H2 и Derby. Миграции могут быть написаны на простом SQL или на Java и могут выполняться с помощью API, плагина для Maven, задачи для Ant или с помощью вызова через командную строку.
Flyway базируется на 6 основных командах: Migrate, Clean, Info, Validate, Baseline и Repair. Рассмотрим каждую из них подробнее.
Migrate (миграция) является центральной частью рабочего процесса Flyway. Данная команда сканирует файловую систему или ваш путь к классам (classpath) для доступных миграций, а затем сравнивает их с миграциями, которые были применены к базе данных. Если какое-либо различие будет найдено, то чтобы закрыть этот пробел произойдет мигрирование данных. Хорошей практикой является выполнение миграции при запуске приложения, чтобы избежать каких-либо несовместимостей между базой данных и работающем с этой базой кодом.
Clean (очистка) удаляет все объекты из сконфигурированной схемы базы данных. Данная возможность часто помогает во время разработки и тестирования приложения, когда вместо поиска различий между экземплярами баз данных на разных окружениях проще очистить нужный экземпляр и установить на него свежую версию базы данных. Важно помнить, что данную команду не рекомендуется использовать на production (боевом) окружении.
Info (информация) выводит подробную информацию и статус обо всех миграциях, что позволяет узнать, в каком состоянии находится база данных на текущий момент. Взглянув на эту информацию можно понять, какие из существующих миграций уже были применены к данный базе, а каике находятся в режиме ожидания. Также можно узнать об успешности выполнения определенной миграции.
Validate (валидация) валидирует уже примененные миграции. Эта команда проверит, эквивалентна ли база данных с примененной миграцией, исходной базе данных. Это полезно для обнаружения случайных изменений, которые могут помешать дальнейшей корректной работой с базой данных.
Baseline используется в flyway для приведения базы данных к конкретной миграции в прошлом, т.е. исключает из базы данных все миграции, которые были применены после указанной. После этой команды новые миграции применяются к текущей версии, как обычно.
Repair (восстановление) помогает исправить проблемы с таблицами метаданных. Repair имеет два основных применения:
- Удаление неудачных записей миграции (только для баз данных, которые не поддерживают DDL транзакции)
- Пересчет контрольных сумм примененной миграции и исходной миграции.
Рассмотрим основные принципы работы системы для управления миграциями базы данных Liquibase. Liquibase представляет из себя независимую от базы данных библиотеку для отслеживания, управления и применения миграций, широко применяемую при использовании гибких (agail) методологий разработки программного обеспечения.
При использовании Liquibase изменения структуры базы данных хранятся в отдельных файлах (changelogs) и представляются в виде наборов изменений (changesets). Основным элементом файла changelog являются databaseChangeLog тэг, который может содержать в себе следующие суб-тэги: preConditions, property, changeSet, include. Когда происходит запуск миграции, Liquibase парсит databaseChangeLog тэг. Сначала проверяются предусловия, указанные в preConditions. Если каике-либо из предусловий не выпонены, Liquibase завершит работу, выведя сообщение о причинах своего завершения. Если все предусловия выполнены успешно Liquibase начинает выполнение инструкций, указанных в changeSet и include, в той последовательности, в которой они представлены внутри databaseChangeLog тега. Каждый changeSet содержит author и id тэги. Эти теги вместе с каталогом расположения classpath и именем файла создает уникальный идентефикатор changeSet-а. Файл набора изменений может быть представлен в следующих видах: XML, YAML, JSON, SQL.
Если сравнивать эти инструменты, то можно сделать вывод, что Flyway более низкоуровневый инструмент, где можно указать SQL скрипт, который будет исполнен во время выполнения миграции, в то время как Liquibase более высокоуровневый инструмент, и позволяет описать то, что и как мы хотим изменить во время миграции и он сам по этому описанию сгенерирует SQL скрипт.
Таким образом, были рассмотрены два инструмента для управления миграции базы данных – Flyway и Liquibase. Если над проектом работает целая команда, то очень сложно синхронизировать все изменения между разработчиками и окружениями разработки. Соответственно следует использовать подобные системы, как Flyway и Liquibase, они кроссплатформенные и обладают широким функционалом.
Литература
- Flyway documentation [Электронный ресурс]. URL: http://flywaydb.org/ (дата обращения: 23.05.2015)
- Flyway: управление миграциями баз данных [Электронный ресурс]. URL: http://habrahabr.ru/post/141354/ (дата обращения: 23.05.2015)
- Flyway – Database Java Migration Open Source Framework [Электронный ресурс]. URL: http://www.methodsandtools.com/tools/flyway.php (дата обращения: 24.05.2015)
- Source control for your database [Электронный ресурс]. URL: http://www.liquibase.org/ (дата обращения: 24.05.2015)
References
- Flyway documentation [Jelektronnyj resurs]. URL: http://flywaydb.org/ (data obrashhenija: 23.05.2015)
- Flyway: upravlenie migracijami baz dannyh [Jelektronnyj resurs]. URL: http://habrahabr.ru/post/141354/ (data obrashhenija: 23.05.2015)
- Flyway – Database Java Migration Open Source Framework [Jelektronnyj resurs]. URL: http://www.methodsandtools.com/tools/flyway.php (data obrashhenija: 24.05.2015)
- Source control for your database [Jelektronnyj resurs]. URL: http://www.liquibase.org/ (data obrashhenija: 24.05.2015)