Я думаю, всем разработчикам так или иначе известно понятие “скрипт миграции”. Как правило, имеется ввиду sql-скрипт, созданный для поддержания актуальности БД. Путь создания и использования скриптов миграции весьма легок, поэтому вести этот процесс можно и вручную. Я же хочу рассказать об инструменте, который местами упрощает работу со скриптами миграции.
В состав интересной библиотеки хранения данных MyBatis(ранее известной как iBatis) входит инструмент управления скриптами миграции. Он работает из командной строки и реализован как для Linux, так и для Windows систем. Консольный скрипт(bat, sh), с которым мы будем работать, всего лишь передает наши команды соответствующему java-классу и выполняет его на java-машине.
Что может библиотека:
Процесс работы с утилитой выглядит так (все команды выполняются в контексте запуска самого инструмента в формате migrates <<команда>>):
Но не обошлось и без тонкостей. Так, у меня из под linux’а эта утилитка отказалась находить шаблон скриптов миграции по-умолчанию. Пришлось прописывать в конфигурационном файле(migration.properties) путь к своему файлу шаблона:
Выполнять команды утилиты нужно, находясь в проекте скритов миграции, который мы создали командой init. Так же можно находится где угодно, но приписывать к каждой команде параметр --path.
Более подробно о работе с MyBatis Schema Migrations можно узнать из официального tutorial’а и из официального видео, где показывается пример работы с инструментом.
Хотя утилита показалась мне интересной и некоторые проблемы она решает, но в текущей реализации мне видятся и минусы, которые появятся с внедрением этого инструмента. Проект написан на java и распространяется под лицензией Apache License 2, что натолкнуло меня на мысль о создании своего форка этого проекта, где я мог бы реализовать необходимые фичи. Скажу сразу, что я считаю проект myBatis migration tool вполне законченным и я понимаю видение его разработчиков о ведении скриптов миграции. Но у меня свое видение на этот счет и я считаю, что для использования на больших проектах этот инструмент не совсем подходит.
Что уже реализовано в моем проекте:
Проект-источник: myBatis
Видео: Пример использования myBatis Scheme Migration
MyBatis Schema Migrations
В состав интересной библиотеки хранения данных MyBatis(ранее известной как iBatis) входит инструмент управления скриптами миграции. Он работает из командной строки и реализован как для Linux, так и для Windows систем. Консольный скрипт(bat, sh), с которым мы будем работать, всего лишь передает наши команды соответствующему java-классу и выполняет его на java-машине.
Что может библиотека:
- Отображение списка скриптов миграции
- Определение статуса конкретного скрипта миграции(уже накатан или ещё нет)
- Отображение даты выполнения скрипта миграции
- Создание шаблона скрипта миграции
- Выполнение скриптов миграции
- Откат изменений
- Произвольное перемещение между версиями базы данных
- Экспорт скриптов миграции в отдельный файл. При этом можно указать с какой до какой версии скриптов миграции стоит выполнить экспорт.
Процесс работы с утилитой выглядит так (все команды выполняются в контексте запуска самого инструмента в формате migrates <<команда>>):
- Инициализируем репозиторий скриптов миграции командой init
- Создаем скрипт миграции, указывая имя скрипта командой new
- В созданной заготовке скрипта есть два блока. Заполняем их:
- Сам скрипт миграции
- Скрипт отката изменений текущей миграции
- Прогоняем скрипты миграции командой up
- Смотрим статус скриптов командой status
- Если есть скрипты(например, появились после обновления проекта через систему контроля версий), прогоняем их командой up
- Если нужно вернуться к определенному состоянию базы, то мы откатываем изменения командой down или version
- Экспортируем кучу наших скриптов миграции в отдельный файл, например, чтобы отдать заказчику командой scripts fromVersion toVersion, где fromVersion и toVersion определяют диапазон экспортируемых данных
- В случае появления невыполненных скриптов в середине списка, можно прогнать только их с помощью команды pending. Команда опасна тем, что от измененного скрипта могут зависеть другие скрипты.
Но не обошлось и без тонкостей. Так, у меня из под linux’а эта утилитка отказалась находить шаблон скриптов миграции по-умолчанию. Пришлось прописывать в конфигурационном файле(migration.properties) путь к своему файлу шаблона:
new_command.template=20110925094101_first_migration.sql
Выполнять команды утилиты нужно, находясь в проекте скритов миграции, который мы создали командой init. Так же можно находится где угодно, но приписывать к каждой команде параметр --path.
Более подробно о работе с MyBatis Schema Migrations можно узнать из официального tutorial’а и из официального видео, где показывается пример работы с инструментом.
MyBatis Schema Migrations Extended (Migro)
Хотя утилита показалась мне интересной и некоторые проблемы она решает, но в текущей реализации мне видятся и минусы, которые появятся с внедрением этого инструмента. Проект написан на java и распространяется под лицензией Apache License 2, что натолкнуло меня на мысль о создании своего форка этого проекта, где я мог бы реализовать необходимые фичи. Скажу сразу, что я считаю проект myBatis migration tool вполне законченным и я понимаю видение его разработчиков о ведении скриптов миграции. Но у меня свое видение на этот счет и я считаю, что для использования на больших проектах этот инструмент не совсем подходит.
О том что нужно для большого проекта
Что уже реализовано в моем проекте:
- Скрипты можно группировать по версиям билдов, что избавляет нас от необходимости хранить длинную вереницу скриптов миграции всего проекта в одной папке.
- Можно редактировать уже созданный и прогнанный скрипт миграции, вызвав для него команду edit.
- Измененные файлы отображаются в списке как updated. Их обновить можно с помощью команды pending. Не смотря на доработку, команда pending всё ещё является небезопасной.
- Управление группировкой по версиям билдов из командой строки
- Выполнение определенного скрипта миграции или произвольный диапазон
- Экспорт скриптов, конкретной версии билда
- Экспорт скриптов в шаблонный файл
- Интеграция с IDE
- Оптимизация и рефакторинг:)
Проект-источник: myBatis
Видео: Пример использования myBatis Scheme Migration