МИГРАЦИЯ БАЗЫ ДАННЫХ

Научная статья
Выпуск: № 5 (36), 2015
Опубликована:
2015/06/15
PDF

Чернова Е.В.

Студент,

Оренбургский государственный университет

МИГРАЦИЯ БАЗЫ ДАННЫХ

Аннотация

В статье рассмотрены наиболее популярные системы миграции базы данных – 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, они кроссплатформенные и обладают широким функционалом.

Литература

  1. Flyway documentation [Электронный ресурс]. URL: http://flywaydb.org/ (дата обращения: 23.05.2015)
  2. Flyway: управление миграциями баз данных [Электронный ресурс]. URL: http://habrahabr.ru/post/141354/ (дата обращения: 23.05.2015)
  3. Flyway – Database Java Migration Open Source Framework [Электронный ресурс]. URL: http://www.methodsandtools.com/tools/flyway.php (дата обращения: 24.05.2015)
  4. Source control for your database [Электронный ресурс]. URL: http://www.liquibase.org/ (дата обращения: 24.05.2015)

References

  1. Flyway documentation [Jelektronnyj resurs]. URL: http://flywaydb.org/ (data obrashhenija: 23.05.2015)
  2. Flyway: upravlenie migracijami baz dannyh [Jelektronnyj resurs]. URL: http://habrahabr.ru/post/141354/ (data obrashhenija: 23.05.2015)
  3. Flyway – Database Java Migration Open Source Framework [Jelektronnyj resurs]. URL: http://www.methodsandtools.com/tools/flyway.php (data obrashhenija: 24.05.2015)
  4. Source control for your database [Jelektronnyj resurs]. URL: http://www.liquibase.org/ (data obrashhenija: 24.05.2015)