Database migration на собеседовании системного аналитика

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать на собесе

DB migration — частая task. На собесе SA: «как добавить колонку в huge таблицу», «zero-downtime».

Schema versioning

DB schema — code. Versioned в git.

Tools:

  • Flyway, Liquibase (Java).
  • Alembic (Python SQLAlchemy).
  • Migrate-go (Go).
  • dbmate.

Каждая migration — incremental file:

V001__create_users.sql
V002__add_email_index.sql
V003__add_phone_column.sql

Tool tracks applied migrations в schema_migrations таблице.

Expand-contract pattern

Для backwards-compatible schema changes без downtime.

Идея. Не direct change. Sequence:

  1. Expand. Add new structure (column / table). Old code продолжает работать.
  2. Migrate. Update code писать в new + old. Backfill old → new data.
  3. Contract. После всё migrated, remove old.

Example: rename column namefull_name.

Step 1: Add `full_name` column. Old code writes to `name`, new code writes к both.
Step 2: Backfill `full_name = name` существующих rows.
Step 3: Old code → new (read / write only `full_name`).
Step 4: Remove `name`.

Каждый step — independent deploy. Rollback safe.

Backwards-compatible changes

Safe (без downtime):

  • Add column (nullable).
  • Add table.
  • Add index (использовать CONCURRENTLY в Postgres).
  • Increase varchar length (sometimes).

Unsafe (требуют lock / downtime):

  • Drop column / table.
  • Rename column.
  • Make column NOT NULL без default.
  • Change column type (incompatible).
  • Add UNIQUE constraint без validation.

В Postgres — many DDL took ACCESS EXCLUSIVE lock — blocks readers / writers.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Zero-downtime

Read replicas. Apply migration на replica → switch traffic.

Online migrations.

  • pt-online-schema-change (MySQL) — copies table.
  • pg_repack (Postgres) — rewrites table.
  • gh-ost (GitHub Online Schema Migration).

Application-side. Feature flag controls reading new vs old structure.

Tools

Schema migration: Flyway, Liquibase, Alembic, dbmate.

Online migration: pg_repack, pt-online-schema-change.

ORM-integrated: Django migrations, Rails ActiveRecord migrations.

For DWH: dbt (snapshot tests, structure changes).

Связанные темы

FAQ

Это официальная информация?

Нет. Статья основана на индустриальных best practices schema management.


Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.