Шаблоны миграции производственных данных при непрерывной доставке

Каковы модели миграции реляционных баз данных (и схемы) при непрерывной доставке?

Во многих традиционных разработках DBA организует большую миграцию script из множества небольших скриптов, созданных в текущем цикле выпуска. Но на компакт-диске разработчик может захотеть подтолкнуть изменения к производству, а не ждать, чтобы скомпилировать их с другими скриптами.

Я знаю, что в rails-migration, но для меня более разумно использовать raw sql-скрипты.

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

Ответ 1

Flyway отлично подходит для непрерывной доставки/развертывания. Многие клиенты используют его во всех средах, включая производство.

Самая важная вещь для каскадных миграции БД в разных средах - это трехэтапный процесс:

Шаг 1

Старый код приложения работает вместе со старой БД.

Шаг 2

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

  • вы можете выполнить перетаскивание обновлений, обновив один node за один раз, пока все узлы не будут иметь новый код приложения
  • Откажитесь от старого кода приложения, если новый сломан.

Этот шаг может включать представления совместимости и триггеры для выполнения задания.

Шаг 3

После того как изменения, как было доказано, работают, следующая версия кода приложения получает развернуты вместе с необходимыми миграциями БД, чтобы отменить все оставшиеся устаревшие (начиная с шага 1) и совместимости (из шага 2) структуры.

Ответ 2

Внедрите изменения в свою базу данных в виде одиночных (сырых) sql файлов, затем используйте sqlpatch для создания миграции script.

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

Эта настройка очень проста в настройке другой базы данных для ветки функций и для ее экспериментирования. Sqlpatch заботится обо всех зависимостях в отдельных файлах sql, чтобы я мог легко объединить ветвь функции в другую ветку.