Открыть сервис

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 →