Распределение данных в Yandex MPP Analytics for PostgreSQL
В Yandex MPP Analytics for PostgreSQL все таблицы в базе данных построчно распределены по хостам-сегментам кластера. Политика распределения данных — это правило, по которому строки таблицы распределяются по сегментам.
В Yandex MPP Analytics for PostgreSQL доступны следующие политики распределения:
- Хеш-распределение — строки распределяются по сегментам на основе хеш-функции, которая применяется к значениям одного или нескольких столбцов, определенных в качестве ключа распределения.
- Случайное распределение — строки распределяются по всем сегментам циклически (round-robin).
- Реплицированное распределение — копия таблицы хранится на каждом сегменте кластера.
Вы можете настроить политику распределения для новой таблицы, а также изменить политику и ключ распределения для существующей таблицы. Если при создании таблицы политика распределения не указана, используется хеш-распределение. В качестве ключа распределения используется первичный ключ (PRIMARY KEY). Если он не задан, выбирается первый подходящий столбец таблицы. Подробнее о выборе ключа распределения, если политика распределения не указана, в документации Greenplum®
Выбор политики распределения
В Yandex MPP Analytics for PostgreSQL производительность запросов зависит от того, как данные распределены между сегментами кластера. Если данные распределены неравномерно, сегменты обрабатывают разный объем данных. Это может привести к неравномерной нагрузке и нехватке памяти на отдельных сегментах. На производительность запросов также влияет то, как выполняются операции объединения (JOIN). Если таблицы распределены по одному и тому же ключу, строки с одинаковыми значениями ключа хранятся на одном сегменте. Это позволяет выполнять операции объединения локально, без передачи данных между сегментами.
Чтобы обеспечить равномерную нагрузку на сегменты, выбирайте политику распределения следующим образом:
-
Хеш-распределение — если для таблицы можно подобрать подходящий ключ распределения.
-
Случайное распределение — если для таблицы не удается подобрать подходящий ключ распределения.
При случайном распределении отдельные операции
INSERTиCOPYмогут привести к неравномерному распределению данных между сегментами. Кроме того, для таблиц со случайным распределением операции объединения не могут выполняться локально. -
Реплицированное распределение — для небольших таблиц, например для словарей.
Ключ распределения
Ключ распределения — это один или несколько столбцов таблицы, значения которых используются для определения сегмента, на котором хранится строка. От выбора ключа распределения зависит равномерность распределения данных между сегментами.
Выбор ключа распределения
В качестве ключа распределения выбирайте столбцы, которые часто используются в операциях объединения. Если в таблице есть первичный ключ, то он должен включать все столбцы ключа распределения. Также если в таблице есть уникальное ограничение, то оно должно включать все столбцы ключа распределения.
При выборе ключа распределения старайтесь избегать столбцов, которые могут привести к неравномерному распределению данных:
- столбцов с датой и временем;
- столбцов с большим количеством одинаковых значений;
- столбцов с большим количеством значений
NULL; - столбцов, которые используются в
WHERE.
Столбцы с геометрическими и пользовательскими типами данных не могут быть выбраны в качестве ключа распределения.
Если для равномерного распределения данных одного столбца недостаточно, используйте составной ключ из двух столбцов. Использование ключа из трех и более столбцов не повышает равномерность распределения данных, а только увеличивает время хеширования.
Подробнее о распределении данных в документации Greenplum®
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками Broadcom Inc в США и/или других странах.
Apache® и Apache Cloudberry™ являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и/или других странах.