1. Природа аналитических данных: почему классические базы данных не справляются с Big Data
Природа аналитических данных: почему классические базы данных не справляются с Big Data
Представьте глобальный маркетплейс в разгар «Черной пятницы». Каждую секунду пользователи совершают десятки тысяч действий: добавляют товары в корзину, оплачивают заказы, меняют адреса доставки. Система работает безупречно, балансы списываются мгновенно, заказы формируются без задержек. Но стоит директору по маркетингу нажать кнопку «Сформировать отчет по среднему чеку в категории "Электроника" за последние 5 лет по всем регионам» — и база данных «зависает» на несколько часов, а пользователи начинают жаловаться на ошибки при оплате.
Почему система, способная обрабатывать тысячи покупок в секунду, ломается от одного-единственного аналитического вопроса? Ответ кроется в фундаментальном отличии природы транзакционных и аналитических данных.
Идеальный бухгалтер: транзакционные системы (OLTP)
Классические реляционные базы данных (такие как PostgreSQL, MySQL или Oracle) создавались для операционной работы. Их главная задача — быстро и надежно записать, обновить или удалить конкретную строку.
Этот тип нагрузки называется OLTP.
> OLTP (Online Transaction Processing) — класс систем, ориентированных на обработку огромного потока коротких транзакций в реальном времени. Главный приоритет здесь — целостность данных и скорость точечных изменений.
Когда вы покупаете книгу на маркетплейсе, база данных выполняет хирургически точную операцию:
Для OLTP-системы данные — это набор независимых карточек (строк), где каждая карточка описывает один объект целиком (пользователя, товар, заказ). База данных оптимизирована так, чтобы мгновенно достать одну карточку по ее идентификатору, изменить в ней пару букв и положить обратно.
Аналитическая стена: когда строк становится слишком много
Проблемы начинаются, когда мы перестаем смотреть на одиночные карточки и пытаемся увидеть общую картину.
Аналитический запрос (например, для построения графика продаж) выглядит в виде SQL-кода примерно так:
Чтобы выполнить этот запрос, классической базе данных нужно прочитать историю заказов. И здесь проявляется ее архитектурная слабость. Поскольку данные хранятся строками, система не может прочитать только колонки region и price. Ей приходится поднимать с жесткого диска всю строку целиком, включая длинные текстовые описания, адреса доставки, статусы и комментарии курьеров.
!Симуляция аналитического запроса в классической базе данных
Если в таблице миллиард записей, база данных вынуждена прочитать терабайты лишней информации только ради того, чтобы сложить два числа. Дисковая подсистема задыхается, оперативная память переполняется «мусорными» данными, а процессор тратит время на распаковку ненужных колонок. Именно поэтому операционная база данных зависает: тяжелый аналитический запрос монополизирует все ресурсы сервера.
Природа аналитических данных (OLAP)
Аналитические данные ведут себя совершенно иначе, чем операционные. Если внимательно посмотреть на логику работы с Big Data, можно выделить три ключевые особенности:
Для работы с такими данными был выделен отдельный класс систем.
> OLAP (Online Analytical Processing) — класс систем, спроектированных для быстрого выполнения сложных агрегирующих запросов (сумм, средних значений, группировок) над гигантскими массивами исторических данных.
Разделяй и властвуй
Осознав, что один инструмент не может быть одновременно идеальным скальпелем (OLTP) и мощным экскаватором (OLAP), инженеры пришли к архитектурному стандарту: разделению баз данных по их назначению.
!Архитектурное разделение операционных и аналитических баз данных
В современных IT-проектах операционная база (например, PostgreSQL) продолжает обслуживать текущие действия пользователей. Параллельно с этим, специальный процесс регулярно копирует новые данные и переносит их в специализированное аналитическое хранилище (Data Warehouse).
Именно в этом аналитическом хранилище живут системы нового поколения. Чтобы мгновенно отвечать на вопросы, затрагивающие миллиарды строк, им пришлось полностью отказаться от классического строкового хранения. Но о том, как именно они перестроили архитектуру данных, мы поговорим в следующей главе.