Что будет? 1. Рассмотрим основные проблемы доставки БД 2. Изучим основные принципы и подходы управления схемой БД а также практики доставки БД 3. Продемонстрируем практический пример с использованием liquibase
Как и любая подобная история, эта история начинается с приложения…
Какие вызовы?
1/ Множество различных окружений, различающихся по конфигурации, требованиям и данным
2/ Много участников, одновременно модифицирующих приложение и нижележащие данные и структуры
3/ Наличие большого (или не очень) количества продуктовых БД
Что мешает?
1/ Данные в БД
2/ Интеграция на уровне БД
3/ Несогласованность различных окружений
4/ Конфликты при взаимных модификациях схемы БД
Что можно сделать?
Database as a code (схема, словари, тестовые данные)
Доставка изменений БД должна быть включена в процесс интеграционного тестирования
Каждому разработчику своя БД
Перманентно поддерживать согласованность модели приложения и схемы БД
Подходы к управлению доставкой изменений БД
На основе эталона (state-based)
На основе последовательного применения инкрементальных изменений (Migration-Based)
Практический пример
Легенда 1. Переписываем легаси приложение с БД 2. У нового приложения есть изменения в схеме БД 3. В новом приложении хотим реализовать database delivery на основе миграций
Шаг 1. Синхронизируем схему легаси БД и снепшота нового приложения
Шаг 2. Формируем начальную миграцию, полностью описывающую актуальную схему БД
./gradlew liquibaseGenerateChangelog
Шаг 3. Инициализируем схему нового снепшота и проверяем отсутствие расхождений с целевой БД
Шаг 4. Настраиваем интеграционные тесты
Шаг 5. Создаем миграции словарей
Шаг 6. Создаем миграции данных для тестовых и локальных сред