Что такое Arenadata DB (ADB)?

 

Arenadata DB (ADB) — кластерная реляционная СУБД, построенная на MPP-системе Greenplum, использующей в своей основе PostgreSQL. Она предназначена для хранения и обработки больших объемов информации. СУБД работает на нескольких (от двух до сотен) серверах, равномерно распределяя нагрузку и данные между ними. При этом не обязательно знать, сколько и каких серверов используется, можно работать с СУБД как с обычной, некластерной системой.
 

Какие задачи решает Arenadata DB?

 

ADB — аналитическая СУБД, которая хорошо справляется с небольшим (до 300) числом одновременных запросов, каждый их которых может быть достаточно сложным. Такие запросы часто возникают:
 * При использовании BI-систем
* У продвинутых ad-hoc SQL- и Python-аналитиков
* При решении задач с помощью Machine Learning-алгоритмов
* В других видах отчетности



В каких бизнес-сценариях чаще всего используется ADB?

 

Применение Arenadata DB не ограничивается конкретными сценариями — везде, где есть место аналитике больших данных, СУБД помогает достигать результатов. Но наиболее эффективные области применения ADB — это:
 * Любые типы отчетности (например, операционная, управленческая, обязательная регуляторная)
* Глубокий ad-hoc анализ
* Работа систем маркетинговых кампаний
* Различный скоринг
* Системы лояльности
* Предсказание спроса, прогнозирование остатков
* Анализ поведения пользователей
* «Золотая запись» о клиентах



Когда не следует использовать ADB?

 

Если к СУБД предполагается большое число параллельных запросов (более 300), возможно, более оптимальным будет использовать ADB совместно с другой СУБД — например, с ClickHouse.
 

Где я могу найти документацию?

 

Документация к СУБД Greenplum расположена по [ссылке](http://docs.greenplum.org).
 

Как шардируются данные по серверам?

 

По умолчанию все таблицы равномерно распределяются по серверам случайным образом. Поэтому в работе каждого запроса всегда используются все сегменты.

Дополнительно при создании таблицы можно указать ее ключ распределения по серверам (одно или несколько полей). В таком случае все соединения с указанной таблицей по этому полю (или полям) будут происходить быстрее. [Подробнее о распределении данных в СУБД](http://docs.greenplum.org/6-1/admin_guide/distribution.html).



Поддерживается ли колоночное хранение?

 

Да, поддерживается как строковое, так и колоночное хранение данных в таблицах. Для аналитической нагрузки предпочтительно колоночное хранение. Также можно создавать полиморфные таблицы, где часть данных (партиция) хранится строково, а часть — колоночно. [Подробнее в документации](http://docs.greenplum.org/6-1/ref_guide/sql_commands/CREATE_TABLE.html).



Поддерживается ли сжатие?

 

Поддерживаются следующие алгоритмы сжатия: ZSTD (предпочтительный), ZLIB, RLE. Сжатие применяется на таблицу, партицию или даже отдельный столбец. Arenadata рекомендует использовать ZSTD уровня 1.
 

Какие стандарты поддерживает СУБД?

 

ADB является ANSI SQL-совместимой системой: подробная информация доступна в [документации](http://docs.greenplum.org/6-1/ref_guide/feature_summary.html).



Совместим ли синтаксис и протокол с PostgreSQL?

 

Да, примерно на 95% совместим. Вы можете использовать стандартные PostgreSQL драйвера (JDBC, ODBC) для работы с ADB. Общее правило — все ПО, которое работает с PostgreSQL, работает и с ADB. [Подробнее о совместимости с PostgreSQL](http://docs.greenplum.org/6-1/ref_guide/feature_summary.html#topic8).



Есть ли транзакции?

 

Да, ADB — ACID-система. Уровень изоляции транзакций — Serializable.
 

Есть ли проекции и индексы?

 

Есть три типа индексов и материализованные представления.
 

Какие процедурные языки поддерживаются?

 

Поддерживаются функции на языках SQL (PLpg/SQL), Python, R, Java, Perl.
 

Как правильно загружать данные в СУБД?

 

Небольшие объемы можно загружать через стандартный PostgreSQL-интерфейс (например, JDBC или ODBC). Большие объемы эффективней грузить через специальный загрузчик (GPFDIST), который отправляет данные в СУБД параллельно. [Подробнее о параллельной загрузке](http://docs.greenplum.org/6-1/admin_guide/external/g-using-the-greenplum-parallel-file-server--gpfdist-.html).



Какой максимальный объем данных можно хранить в СУБД?

 

Объем данных в СУБД практически не ограничен.

Ограничения по объему данных в отдельных таблицах, строках и полях ниже:

| Параметр | Лимит |
| --- | --- |
| Максимальный размер базы данных | Нет ограничений |
| Максимальный размер таблицы | Нет ограничений, 128 ТБ на раздел (партицию)/сегмент |
| Максимальный размер строки | > 1 ГБ (приблизительно) |
| Максимальный размер поля | 1 ГБ |
| Максимальный размер BLOB | 1 ГБ (Используйте тип данных BYTEA, нет BLOB) |
| Максимальное количество строк в таблице | 2^48 |
| Максимальное количество столбцов в таблице | 1600 |
| Максимальное количество индексов в таблице | Без ограничений |
| Максимальное количество баз данных/пользователей | Без ограничений |
| Максимальное количество таблиц в базе данных | 4200 миллионов |
| Максимальное количество столбцов в представлении | 1664 |
| Максимальное количество столбцов в индексе | Без ограничений |
| Максимальное количество ограничений уровня таблицы на таблицу | Без ограничений |
| Максимум активных параллельных транзакций | Без ограничений |
| Максимальный размер дескриптора формата данных | 63 символа |
| Максимальный размер имени базы данных, пользователя, таблицы, представления, индекса, триггера, UDF, UDT, хранимой процедуры, ограничения и столбца | 63 символа |
| Максимальное количество сессий на parsing engine | Нет концепции parsing engine, кроме узла masterDB. Без фиксированного лимита, до нескольких сотен. |
| Максимальное количество столбцов на первичный и вторичный индекс | 32 |