Как организовать миграции базы данных в CI/CD так, чтобы не прерывать работу сервиса?

Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.

Короткий ответ

Что ответить на собеседовании

Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.

Подробный разбор

Ответ с пояснениями

Используйте expand–migrate–contract: сначала совместимое расширение схемы, затем перенос данных и переключение кода, в конце удаление старых структур. Старый и новый код должны переживать период совместной работы.

Новый nullable-столбец добавляют отдельно от пакетного backfill, который выполняют идемпотентно с ограничением нагрузки. Индексы и ограничения вводят с учётом блокировок конкретной СУБД. В pipeline нужен один исполнитель миграций, lock timeout, наблюдаемость и возможность остановить перенос. Удалять старый столбец одновременно с выкладкой его замены опасно: старые экземпляры ещё работают. Откат кода тоже должен оставаться совместимым; не каждая миграция данных имеет безопасный автоматический rollback.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее