Database Delivery: The Big Problem

A presentation at Tver.io Database Delivery in March 2021 in Tver, Tver Oblast, Russia by Roman Gordeev

Slide 1

Slide 1

Database Delivery: The big problem Роман Гордеев

Slide 2

Slide 2

Что будет? 1. Рассмотрим основные проблемы доставки БД 2. Изучим основные принципы и подходы управления схемой БД а также практики доставки БД 3. Продемонстрируем практический пример с использованием liquibase

Slide 3

Slide 3

Как и любая подобная история, эта история начинается с приложения…

Slide 4

Slide 4

Slide 5

Slide 5

Какие вызовы?

Slide 6

Slide 6

1/ Множество различных окружений, различающихся по конфигурации, требованиям и данным

Slide 7

Slide 7

2/ Много участников, одновременно модифицирующих приложение и нижележащие данные и структуры

Slide 8

Slide 8

3/ Наличие большого (или не очень) количества продуктовых БД

Slide 9

Slide 9

Что мешает?

Slide 10

Slide 10

1/ Данные в БД

Slide 11

Slide 11

2/ Интеграция на уровне БД

Slide 12

Slide 12

Slide 13

Slide 13

Slide 14

Slide 14

3/ Несогласованность различных окружений

Slide 15

Slide 15

4/ Конфликты при взаимных модификациях схемы БД

Slide 16

Slide 16

Что можно сделать?

Slide 17

Slide 17

Database as a code (схема, словари, тестовые данные)

Slide 18

Slide 18

Доставка изменений БД должна быть включена в процесс интеграционного тестирования

Slide 19

Slide 19

Каждому разработчику своя БД

Slide 20

Slide 20

Slide 21

Slide 21

Slide 22

Slide 22

Перманентно поддерживать согласованность модели приложения и схемы БД

Slide 23

Slide 23

Подходы к управлению доставкой изменений БД

Slide 24

Slide 24

На основе эталона (state-based)

Slide 25

Slide 25

Slide 26

Slide 26

Slide 27

Slide 27

На основе последовательного применения инкрементальных изменений (Migration-Based)

Slide 28

Slide 28

Slide 29

Slide 29

Практический пример

Slide 30

Slide 30

Легенда 1. Переписываем легаси приложение с БД 2. У нового приложения есть изменения в схеме БД 3. В новом приложении хотим реализовать database delivery на основе миграций

Slide 31

Slide 31

Шаг 1. Синхронизируем схему легаси БД и снепшота нового приложения

Slide 32

Slide 32

Шаг 2. Формируем начальную миграцию, полностью описывающую актуальную схему БД

Slide 33

Slide 33

./gradlew liquibaseGenerateChangelog

Slide 34

Slide 34

Slide 35

Slide 35

Шаг 3. Инициализируем схему нового снепшота и проверяем отсутствие расхождений с целевой БД

Slide 36

Slide 36

Шаг 4. Настраиваем интеграционные тесты

Slide 37

Slide 37

Шаг 5. Создаем миграции словарей

Slide 38

Slide 38

Slide 39

Slide 39

Шаг 6. Создаем миграции данных для тестовых и локальных сред

Slide 40

Slide 40

Slide 41

Slide 41

Шаг 7. Рефакторинг

Slide 42

Slide 42

./gradlew liquibaseDiffChangeLog -PrunList=diffLog

Slide 43

Slide 43

References ● ● ● Vladimir Khorikov. Database versioning best practices https://enterprisecraftsmanship.com/posts/database-versio ning-best-practices/ Scott W. Ambler, Pramod J. Sadalage. Refactoring Databases: Evolutionary Database Design https://www.ozon.ru/product/refaktoring-baz-dannyh-evolyu tsionnoe-proektirovanie-162984061 https://docs.liquibase.com/home.html

Slide 44

Slide 44

That all folks! https://github.com/rtk-it/migrations