EMZETT.
Увійти

Міграції бази даних без простою

Коротко: Зміни схеми в працюючій системі проходять без простою, якщо розбити їх на невеликі зворотно сумісні кроки («expand and contract»).

Докладніше: Під час розгортання стара й нова версії програми ненадовго працюють поруч на тій самій базі даних. Схема має розуміти обидві.

Подробиці

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

Див. також: транзакції та ACID