Greenplum: архитектура и применение СУБД¶
Greenplum — это массово-параллельная реляционная система управления базами данных (СУБД), основанная на архитектуре shared-nothing и построенная на базе свободной СУБД PostgreSQL. Разработана компанией Greenplum (позже приобретена EMC, затем в составе Dell Technologies) и предназначена для хранения и аналитической обработки больших объёмов данных (Big Data). Система ориентирована на выполнение сложных аналитических запросов (OLAP) над терабайтными и петабайтными хранилищами данных и используется для создания корпоративных хранилищ данных (EDW) и платформ бизнес-аналитики.
¶История
Проект Greenplum был основан в 2003 году Скоттом Йарой и Люком Лонерганом. Изначально продукт назывался Bizgres и представлял собой набор улучшений для PostgreSQL, ориентированных на аналитические нагрузки. В 2005 году компания сменила название на Greenplum, а в 2006 году выпустила собственную массово-параллельную базу данных, которая использовала модифицированное ядро PostgreSQL.
В 2010 году компания Greenplum была приобретена корпорацией EMC за сумму около 300—400 миллионов долларов. В 2012 году EMC открыла исходный код ядра Greenplum Database под лицензией Apache 2.0, выпустив проект Greenplum Database с открытым исходным кодом. После слияния EMC с Dell Technologies в 2016 году разработка продолжилась под эгидой Dell EMC, а затем Pivotal Software (дочерняя компания Dell Technologies). В 2019 году Pivotal была поглощена VMware, которая продолжила развитие продукта. В 2021 году Broadcom приобрела VMware, и дальнейшая судьба коммерческой версии Greenplum оказалась под вопросом, однако открытая версия продолжает развиваться силами сообщества.
¶Архитектура
Greenplum использует архитектуру shared-nothing (без разделяемых ресурсов), при которой данные и обработка распределены между несколькими независимыми серверами (сегментами). Ключевые компоненты архитектуры:
- Мастер-узел (Master) — координатор запросов. Он не хранит пользовательские данные, а отвечает за приём SQL-запросов, построение плана выполнения, распределение задач по сегментам и сбор результатов. Мастер хранит системный каталог и метаданные.
- Сегменты (Segments) — независимые экземпляры PostgreSQL, каждый из которых хранит свою часть данных (горизонтальное секционирование). Сегменты выполняют параллельную обработку запросов.
- Интерконнект (Interconnect) — высокоскоростная сеть (обычно 10GbE или InfiniBand), соединяющая мастер и сегменты. Используется для передачи данных между узлами во время выполнения запросов.
Данные в Greenplum распределяются по сегментам с помощью дистрибуции — по хешу ключа распределения (hash distribution) или случайным образом (random distribution). При хеш-распределении строки с одинаковым значением ключа всегда попадают в один и тот же сегмент, что позволяет выполнять соединения таблиц без пересылки данных между узлами.
¶Особенности хранения данных
Greenplum поддерживает две модели хранения: построчное (row-oriented) и поколоночное (column-oriented) хранение. Поколоночное хранение (column store) эффективно для аналитических запросов, которые обращаются лишь к нескольким колонкам больших таблиц, так как позволяет читать только необходимые данные, снижая объём операций ввода-вывода.
Для повышения производительности и управляемости большими таблицами используется секционирование (партиционирование) по диапазонам значений (например, по датам) или по спискам значений. Секции могут быть как обычными таблицами, так и сжатыми, что позволяет хранить исторические данные в сжатом виде.
Поддерживается сжатие данных (быстрое zlib, быстрее zstd и др.), что существенно экономит дисковое пространство и ускоряет чтение данных за счёт уменьшения объёма ввода-вывода.
¶Выполнение запросов
Greenplum реализует технологию массово-параллельной обработки (MPP). При выполнении запроса мастер создаёт план, который разбивается на части, выполняемые параллельно на всех сегментах. Каждый сегмент обрабатывает только свою порцию данных. Для операций, требующих данных с разных сегментов (например, соединение таблиц по неключевым колонкам), используется перемещение данных через интерконнект (shuffle).
Оптимизатор запросов Greenplum основан на оптимизаторе PostgreSQL (Planner), а также включает расширенный оптимизатор ORCA (Open Source Cost-Based Optimizer), разработанный для сложных аналитических запросов. ORCA поддерживает расширенные возможности, такие как запросы к вложенным запросам, оконные функции и работу с большим количеством соединений, и часто выбирает более эффективные планы для сложных нагрузок.
¶Функциональные возможности
Будучи основанной на PostgreSQL, Greenplum поддерживает большинство возможностей этой СУБД: стандартный SQL, транзакции ACID, сложные типы данных, оконные функции, общие табличные выражения (CTE). Однако в силу распределённой природы существуют ограничения: не поддерживаются внешние ключи и ограничения уникальности (кроме первичного ключа при определённых условиях), а уровень изоляции транзакций ограничен.
Greenplum включает поддержку работы с данными в форматах Hadoop (через PXF), а также возможность выполнять запросы к внешним источникам данных. Для загрузки данных используется утилита gpfdist (параллельный загрузчик), а также команды COPY и внешние таблицы.
¶Применение
Greenplum применяется в качестве платформы для корпоративных хранилищ данных в организациях, работающих с большими объёмами информации. Типичные сценарии использования:
- Хранение и анализ исторических данных о продажах, клиентах, финансовых операциях.
- Построение витрин данных для бизнес-аналитики и отчётности.
- Анализ данных телеметрии, журналов событий, данных интернета вещей (IoT).
- Платформа для машинного обучения и исследовательского анализа данных (совместно с инструментами вроде Apache MADlib).
Система используется в банковском секторе, телекоммуникациях, розничной торговле, государственных учреждениях и других отраслях, где требуется обработка терабайтных массивов информации. В России Greenplum получил широкое распространение в государственном и корпоративном секторе, особенно в связи с политикой импортозамещения, как альтернатива проприетарным аналитическим СУБД (например, Oracle Exadata, Teradata).
¶Лицензирование и версии
Существует две основные версии Greenplum:
- Greenplum Database (Open Source) — свободно распространяемая версия под лицензией Apache 2.0. Развивается сообществом и компанией VMware (Broadcom).
- Greenplum (коммерческая редакция) — включала дополнительные инструменты, расширенную поддержку и интеграции, распространялась по коммерческой лицензии. В 2024 году Broadcom прекратила продажи коммерческой версии, сконцентрировавшись на развитии открытой редакции.
Открытая версия устанавливается на кластеры серверов под управлением Linux (RHEL, CentOS, Ubuntu, Rocky Linux и др.) и может быть развёрнута как на физическом оборудовании, так и в виртуальной среде.
¶Критика и ограничения
К недостаткам Greenplum относят высокие требования к аппаратным ресурсам и сложность администрирования кластера. Для эффективной работы требуется грамотное проектирование схемы данных (выбор ключей распределения, партиционирования). В отличие от некоторых современных облачных MPP-систем, Greenplum менее гибок в масштабировании (добавление сегментов требует перераспределения данных). Также отмечается, что производительность на небольших объёмах данных (до нескольких гигабайт) ниже, чем у обычного PostgreSQL, из-за накладных расходов на координацию.
¶Источники
- Официальная документация Greenplum Database (docs.greenplum.org).
- Greenplum Database: The Open Source Massively Parallel Data Platform (проект GitHub).
- Материалы конференций PGConf и HighLoad по тематике Greenplum.
- Статьи и обзоры на ресурсах Habr и OpenNET, посвящённые архитектуре и эксплуатации Greenplum.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →
