Перейти к содержанию

Аналитика и хранилища данных: OLTP против OLAP, схема "звезда"

Начало урока

Аналитика и хранилища данных: OLTP против OLAP, схема "звезда"

Почему база, которая обслуживает ваш магазин, имеет неподходящую форму для его анализа

Главная идея: Рабочая база приложения настроена на запись одного маленького изменения за раз — одного заказа, одного платежа. Хранилище данных настроено на обратное: на сканирование миллионов прошлых строк, чтобы ответить на вопрос "сколько, кто, когда, где". Эти две цели тянут схему в противоположные стороны. Классический ответ — схема "звезда": одна центральная таблица фактов с измерениями, окружённая таблицами измерений с контекстом.
К концу этой темы вы сможете:
  • отличать нагрузку OLTP от OLAP и объяснить, почему одна схема не может хорошо обслуживать обе;
  • определять таблицу фактов и таблицы измерений в проекте и формулировать гранулярность;
  • строить схему "звезда" и писать к ней агрегирующие запросы;
  • объяснять, почему хранилища намеренно денормализуют данные;
  • обрабатывать изменяющиеся описательные данные с помощью медленно меняющихся измерений (Тип 1 против Типа 2).

1. Две очень разные задачи: OLTP против OLAP

Вы уже умеете проектировать нормализованную схему, добавлять индексы и оборачивать изменения в транзакции. Эти навыки служат OLTP — оперативной обработке транзакций — где база данных обслуживает работающее приложение: оформление покупки, бронирование, банковский перевод. Нагрузка — это множество крошечных чтений и записей, каждая из которых затрагивает несколько строк и должна быть корректна прямо сейчас.

OLAP — оперативная аналитическая обработка — это сторона отчётности и аналитики: "выручка по категориям по кварталам", "десять городов с самым быстрым ростом продаж", "средний размер корзины по выходным". Один такой запрос может прочитать миллионы исторических строк, сгруппировать и агрегировать их, и ему не нужен самый свежий заказ этой секунды — данные несколькочасовой давности вполне подойдут.

АспектOLTP (база приложения)OLAP (хранилище)
Типичный запросчтение/вставка нескольких строк по ключусканирование и агрегация миллионов строк
Записипостоянные, мелкие, по одной строкепакетная загрузка по расписанию (ночью/ежечасно)
Цель схемынормализация, без избыточностиденормализация, удобство агрегации
Строк на запросот 1 до несколькихот тысяч до миллионов
Пользователиприложение, конечные клиентыаналитики, дашборды, отчёты
Свежестьдо миллисекундыприемлемы данные многочасовой давности

Обе нагрузки хотят противоположного, поэтому зрелые организации разделяют их: приложение пишет в свою OLTP-базу, а периодический процесс ETL (Extract, Transform, Load — извлечение, преобразование, загрузка) копирует и переформатирует эти данные в отдельное хранилище для OLAP. Запуск тяжёлой аналитики прямо на живой OLTP-базе конкурирует с реальными клиентами за блокировки и буферную память и может замедлить оформление покупок до предела.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя