Миграция данных, OLTP и OLAP

Миграция данных и различие OLTP и OLAP — темы, на которых видно, работал ли кандидат на реальном внедрении.

OLTP — системы для операций: много коротких транзакций, запись и чтение отдельных записей. OLAP — системы для анализа: тяжёлые запросы по большим объёмам, агрегаты и срезы.

Вопрос 1. Чем OLTP отличается от OLAP и зачем разделять?

Что проверяют. Понимаете ли вы, почему аналитические отчёты нельзя строить прямо по боевой базе, — и умеете ли объяснить это заказчику, который просит «просто добавить отчёт».

ПризнакOLTPOLAP
Типичный запроспрочитать/изменить одну-две записиагрегат по миллионам строк
Модель данныхнормализованнаязвезда или снежинка, денормализованная
Объём за запросбайты и килобайтыгигабайты
Свежесть данныхреальное времяобычно с задержкой: час, сутки
Пользователитысячи одновременнодесятки аналитиков
Метрика качествавремя отклика транзакциивремя построения отчёта
Хранениепострочноечаще колоночное

Ответ, который звучит зрело: «Отчёт по всей истории заказов на боевой базе — это долгая блокирующая нагрузка, которая замедлит оформление заказов реальным клиентам. Поэтому аналитику выносят в отдельное хранилище, куда данные приезжают регламентно, и заранее договариваются о допустимом лаге — например, отчёт по вчерашнему дню готов к 8 утра».

Схема «звезда» в двух словах

Аналитические витрины строят вокруг таблицы фактов (события: продажа, отгрузка) с измерениями (справочники: товар, клиент, дата, регион). Такая структура специально денормализована, чтобы отчёт собирался минимальным числом соединений.

        dim_date         dim_customer
             \                /
              \              /
            [ fact_sales ]  ← факты: сумма, количество, скидка
              /              \
             /                \
        dim_product        dim_region

Факт = измеримое событие с числовыми показателями.
Измерение = «в разрезе чего» смотрим: по дате, товару, региону.

Вопрос 2. Как вы планируете миграцию данных из старой системы?

Что проверяют. Это вопрос уровня middle+ и он про дисциплину. Ждут план по этапам и — обязательно — про сверку и откат.

  1. Инвентаризация и профилирование. Какие сущности переносим, сколько записей, какое качество данных: дубли, пустые обязательные поля, битые ссылки, разные форматы телефонов и дат. Профилирование делают до оценки сроков, иначе оценка будет неверной в разы.
  2. Правила преобразования (mapping). Таблица «поле-источник → поле-приёмник → правило преобразования → что делать с исключениями». Это главный документ аналитика на миграции.
  3. Правила очистки. Что считаем дублем и как схлопываем, чем заполняем пропуски, что делаем с записями, которые не проходят валидацию: отбрасываем, переносим в карантин или чиним вручную.
  4. Пробные прогоны на копии. Минимум два-три, с замером времени: сколько займёт миграция в окне простоя.
  5. Сверка. Контрольные суммы: число записей по каждой сущности, суммы по деньгам, контрольные выборки для ручной проверки. Критерии приёмки миграции формулируются заранее в цифрах.
  6. План отката. Что делаем, если после переключения выяснилось, что данные битые: как быстро вернуться на старую систему и до какого момента это возможно.
  7. Стратегия переключения. Разом в окно простоя или параллельная работа двух систем с последующей досинхронизацией.
Фрагмент карты преобразования (mapping)

Источник               Приёмник           Правило
────────────────────── ────────────────── ─────────────────────────────
CLIENT.FIO (одно поле) customer.last_name  разбор по пробелам:
                       customer.first_name первое слово → фамилия,
                       customer.middle_name второе → имя, третье → отчество
                                            если слов < 2 → карантин
CLIENT.PHONE           customer.phone      нормализация к +7XXXXXXXXXX,
                                            невалидные → NULL + флаг
CLIENT.BIRTH (текст)   customer.birth_date парсинг ДД.ММ.ГГГГ;
                                            «00.00.0000» → NULL
CLIENT.STATUS 'A'/'B'  customer.status     A → active, B → blocked,
                                            иное → карантин

Критерии приёмки:
• число клиентов в приёмнике = число в источнике минус карантин
• сумма задолженности совпадает до копейки
• 50 случайных карточек проверены вручную

Вопрос 3. Что такое ETL и чем он отличается от ELT?

Короткий ответ: ETL — извлекли, преобразовали на промежуточном слое, загрузили готовое в хранилище. ELT — загрузили сырое в хранилище и преобразуем уже внутри него, силами самого хранилища. ELT популярен с приходом мощных облачных хранилищ: сырые данные остаются, преобразования можно переигрывать, не выкачивая всё заново. Для аналитика практическое отличие в том, где живут правила преобразования и кто их сопровождает.

Типичные ошибки кандидатов

  • Считают миграцию технической задачей разработчика. Правила преобразования и очистки — зона аналитика.
  • Пропускают профилирование и обнаруживают качество данных в момент боевого прогона.
  • Не задают критериев приёмки в цифрах — «вроде всё перенеслось».
  • Забывают про план отката и про то, что данные, введённые после переключения, откатом потеряются.
  • Предлагают строить тяжёлые отчёты прямо на боевой базе.
  • Обещают отчётность в реальном времени, не спросив, какой лаг реально допустим бизнесу — сутки почти всегда дешевле секунд.

Как ответить кратко

OLTP — короткие транзакции по отдельным записям на нормализованной модели, OLAP — тяжёлые агрегаты по большим объёмам на денормализованной звезде, обычно с лагом в час или сутки. Разделяют, чтобы отчёты не мешали работе боевой системы; вместе с бизнесом заранее договариваюсь о допустимой свежести данных. Миграцию планирую по шагам: профилирование качества данных до оценки сроков, карта преобразования полей с правилами и карантином, правила очистки и дедупликации, два-три пробных прогона с замером времени, сверка по контрольным суммам и ручной выборке, план отката и стратегия переключения. Критерии приёмки формулирую в цифрах заранее.

Проверьте себя
1. Почему тяжёлые аналитические отчёты не строят прямо на боевой базе?
AВ боевой базе нет нужных таблиц
BДолгие запросы по большим объёмам создают нагрузку, которая замедляет операционную работу пользователей
CАналитикам запрещено выдавать доступ к продуктивной среде
DВ OLTP-базе нельзя выполнять GROUP BY
2. С чего начинается планирование миграции данных?
AС написания скриптов переноса
BС профилирования качества данных источника: дубли, пустые обязательные поля, битые ссылки, форматы
CС выбора инструмента ETL
DС согласования окна простоя
3. Что обязательно должно быть в плане миграции помимо переноса и сверки?
AДиаграмма классов новой системы
BПлан отката с указанием, до какого момента возврат на старую систему возможен
CСписок story points на каждую сущность
DСогласованный дизайн интерфейса приёмки