Міграції бази даних без простою
Коротко: Зміни схеми в працюючій системі проходять без простою, якщо розбити їх на невеликі зворотно сумісні кроки («expand and contract»).
Докладніше: Під час розгортання стара й нова версії програми ненадовго працюють поруч на тій самій базі даних. Схема має розуміти обидві.
Подробиці
- Expand: Додавати нові стовпці чи таблиці, нічого старого не прибираючи. Нові стовпці робити такими, що допускають NULL, або зі значенням за замовчуванням.
- Migrate: Нова версія програми пише в обидва місця (старе й нове). Наявні дані копіюються невеликими пачками у фоні.
- Contract: Лише коли все переключено й перевірено, видаляти старе в одному з наступних релізів.
- Приклад перейменування стовпця: Не
RENAME, а створити новий стовпець, писати в обидва, скопіювати, переключити читання, старий стовпець видалити пізніше. - Небезпечні команди: Залежно від бази даних
ADD COLUMNзі значенням за замовчуванням, побудова індексів (використовуйтеCREATE INDEX CONCURRENTLY) чи зміна типів блокують усю таблицю. - Шлях назад: Кожен крок має бути оборотним окремо. Версіонуйте міграції та виконуйте їх у конвеєрі.
- Інструменти: Flyway, Liquibase, Prisma Migrate,
gh-ost(MySQL).
Див. також: транзакції та ACID