GreenPlum — популярное решение для масштабных аналитических систем и в небольших стартапах, и в крупных корпорациях. Оно предлагает понятный пользователям синтаксис ANSI SQL, хорошо ложится на облачный ландшафт, позволяет обучать и применять модели машинного обучения, а ещё поддерживает реляционную СУБД PostgreSQL. В статье поговорим, как связаны GreenPlum и PostgreSQL, разберём их сходства и отличия. 

Что такое GreenPlum

GreenPlum — ведущая массивно-параллельная СУБД с открытым исходным кодом. Используется для сложной аналитики по большим объёмам данных. Быстро выполняет сложные аналитические запросы благодаря MPP-архитектуре и сочетает в себе: возможность масштабируемости на десятки терабайт, строгую консистентность данных, ANSI SQL и джойны.

Основное назначение:

  • анализ данных;

  • загрузка и хранение структурированных данных;

  • работа с Business Intelligence приложениями;

  • использование алгоритмов машинного обучения.

В основе архитектуры GreenPlum ядро PostgreSQL, но его главная задача — работа с аналитической нагрузкой. PostgreSQL — всё-таки классическая вертикально масштабируемая СУБД, заточенная под онлайн-транзакции. Это легко доказать, если посмотреть на её access-методы, которые находятся в исходниках. Большинство из них будут являться индексами, а индекс — показатель OLTP-нагрузки. 

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

Все аналитические СУБД устроены схожим образом. Их кластеризуют, потому что одна машина не может масштабироваться бесконечно вверх. Меняют движок хранения — в терминологии PostgreSQL это access-методы. А ещё они должны свободно вытаскивать и анализировать данные, даже если часть из них лежит в других системах. Всё это умеет GreenPlum. 

GreenPlum существует в двух версиях — GreenPlum 5 (стабильная сборка) на ядре PostgreSQL 8.2 и GreenPlum 6 на ядре PostgreSQL 9.4. Когда GreenPlum форкнули, его долго развивали куда-то «вбок»: ядро практически не менялось, но менялась обвязка. И когда начали думать, как его синхронизировать с мастер-веткой PostgreSQL, приняли решение затягивать изменения из PostgreSQL в GreenPlum. Наоборот было бы слишком сложно.  

Совместимость GreenPlum и PostgreSQL

Одна из особенностей GreenPlum — полная совместимость с PostgreSQL. Сервис поддерживает реляционную СУБД PostgreSQL, а также может быть единой точкой сбора разных реляционных систем для дальнейшей обработки и аналитики.

Сегменты и мастер GreenPlum — PostgreSQL-инстансы. Это обеспечивает интеграцию с любым ПО, поддерживающим PostgreSQL.

Для подключения вы можете использовать драйверы Postgres или драйверы самого GreenPlum, если надо воспользоваться специфичным функционалом. Это важное свойство, когда вы планируете переезжать с уже существующей БД Postgres в облако. 

Что общего у GreenPlum и PostgreSQL

У PostgreSQL нет ограничений на максимальный размер базы данных или количество индексов в таблице, за счёт чего технология часто применяется на проектах Big Data. Фокус на работу с большими данными лежит и в основе GreenPlum.

Также среди сходств GreenPlum и PostgreSQL выделяют:

  • открытый исходный код — продукты доступны для свободного скачивания, активно поддерживаются и развиваются профессиональным сообществом;

  • высокую производительность;

  • поддержку JSON;

  • высокую ёмкость таблиц и полей;

  • масштабируемость;

  • надёжность;

  • транзакционность. 

Хотя в основе архитектуры GreenPlum лежит ядро PostgreSQL, назвать его просто расширенным вариантом PostgreSQL нельзя. Системы имеют ряд отличий.

Отличия

PostgreSQL отлично подходит для OLTP-кейсов с небольшими базами данных, поскольку может подключиться к сотням тысяч систем обработки транзакций. Применение технологии в OLAP-сценариях допустимо, но не является лучшим вариантом. PostgreSQL не предоставляет функции сжатия данных, колоночного хранилища, автоматического партиционирования и распараллеливания запросов. 

Отличительная особенность GreenPlum — параллельная обработка. За счет неё сервис выполняет запросы по большим наборам данных на порядок быстрее, чем системы без MPP-архитектуры, в частности PostgreSQL. PostgreSQL при обработке запросов использует только один многоядерный сервер.

MPP-архитектура позволяет GreenPlum реализовать концепцию без разделения ресурсов, разделяя только сетевую инфраструктуру. У сервиса есть: 

  • мастер-хост — на нём расположен инстанс Postgres, к которому обращаются пользователи;

  • сегментные хосты — на каждом из них располагаются инстансы Postgres, к которым может обращаться только мастер.

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

Из ключевых отличий между GreenPlum и PostgreSQL можно выделить:

  • Архитектуру. GreenPlum осуществляет массивно-параллельную обработку без разделения ресурсов, а PostgreSQL — классическую клиент-серверную.

  • Сценарии использования. GreenPlum подходит для обширной OLAP-аналитики больших данных, PostgreSQL — для баз данных небольшого размера с OLTP-кейсами.

Если вы решите перенести базы данных из PostgreSQL в GreenPlum

Если решите перенести код из PostgreSQL в GreenPlum, важно учитывать, что:

  • В GreenPlum есть два планировщика запросов. По умолчанию используется GPORCA, который оптимизирован под определённые операции, например, запросы к секционированным таблицам. Но для запросов с большим количеством соединений лучше использовать планировщик, унаследованный от PostgreSQL.

  • В GreenPlum есть опция, с помощью которой вы можете дифференцировать потребление серверных ресурсов. Она позволяет установить ограничения для пользователя, группы, сеанса, запроса. Или ограничить ресурсы — оперативную память, стоимость, дисковое пространство, параллелизм, ресурсы контейнера, жесткие ядра для пользователей и др.

  • В GreenPlum есть несколько методов сжатия. В версии 6x поддерживаются ZSTD, ZLIB и RLE. Для каждого метода вы также можете указать уровень сжатия от 1 до 9. 

Вместо выводов

PostgreSQL и GreenPlum — свободно распространяемые системы управления базами данных. Какую из них выбрать, зависит от характера решаемой задачи. GreenPlum оптимизирован под хранение и аналитику больших наборов данных, но в транзакционной среде работает не так хорошо. 

Скажем, серверная часть веб-приложений всегда будет создавать рабочую нагрузку OLTP. GreenPlum не обеспечит больше 500-600 TPS, потому что это распределённая система с большими расходами на обработку транзакций. Если вам нужен OLTP или БД до 10 ТБ, ваш вариант — PostgreSQL.

Однако PostgreSQL может предложить обработку только одного хоста без разбиения на разделы, сжатия и хранения столбцов. В то время как GreenPlum способен обрабатывать данные параллельно в кластере, поэтому его используют для масштабного анализа данных в OLAP-сценариях. 

Для тех, кто хочет разобраться в GreenPlum и стать опытным строителем DWH

19 сентября у нас стартует курс по GreenPlum от Ивана Чувашова, администратора баз данных в Southbridge и ведущего инженера компании Okko.

На курсе вы узнаете, что такое DWH, и научитесь администрировать GreenPlum: 

  • настраивать ресурсные группы;

  • обеспечивать отказоустойчивость сегментов и мастер-ноды;

  • делать балансировку данных между нодами;

  • выбирать оптимальные конфигурационные параметры.

Здесь можно ознакомиться с подробной программой и занять место: https://slurm.club/3dr5rHN

А промокод «READER» даст скидку 10% при покупке курса.

Комментарии (2)


  1. Loggus66
    13.08.2022 00:48
    +2

    Это обеспечивает интеграцию с любым ПО, поддерживающим PostgreSQL.

    Подумайте, как грустно будет выглядеть мониторинг запросов на 20 сегментах, которые ещё выполняются на каждом сегменте по-разному. В теории - должно работать, на практике всё обвязочное ПО для Postgres нужно тестировать и брать желательно заточенное под greenplum и его кластерную архитектуру. То же самое с бэкапами, репликацией, high availability.

    В общем, если есть мысль переехать, потому что "это же совсем как Postgres и админить мы его умеем" - не обманывайте себя. 40% Postgres 9.4, в остальном придётся доучиваться. Но её нужность не отрицаю, параллельные запросы и скорость их выполнения перевешивают неудобства.


  1. Ak-47
    14.08.2022 04:54

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

    Наоборот было бы невозможно. Даже если бы пытались (а пытаются небольшие коммиты), вероятно патчи были бы отклонены (ну и большинство кануло).