A presentation at RTK IT Meetup in February 2021 in Tver, Tver Oblast, Russia by Roman Gordeev
Как и любая подобная история, эта история начинается с приложения…
Какие вызовы?
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. Создаем миграции данных для тестовых и локальных сред
Шаг 7. Рефакторинг
./gradlew liquibaseDiffChangeLog -PrunList=diffLog
Vladimir Khorikov. Database versioning best practices https://enterprisecraftsmanship.com/posts/database-versioning-best-practices/
Scott W. Ambler, Pramod J. Sadalage. Refactoring Databases: Evolutionary Database Design https://www.ozon.ru/product/refaktoring-baz-dannyh-evolyutsionnoe-proektirovanie-162984061
https://docs.liquibase.com/home.html
https://github.com/rtk-it/migrations
View Database Delivery: The Big Problem on Notist.
Dismiss
The following resources were mentioned during the presentation or are useful additional information.