Распределение данных Greenplum по сегментам - PullRequest
1 голос
/ 13 октября 2011

У меня есть база данных Greenplum, в которой у меня есть 10 сегментов, отражающих 10 жестких дисков. Моя таблица разделена на основной раздел по дате и дополнительный раздел по хеш-идентификатору. Таким образом, в течение месяца будет 30 основных разделов и каждый раздел содержит 100 подразделов. И данные в подразделе загружаются на основе хеш-кода. Теперь вопрос в том, как эти разделы распределены между сегментами.

Угадай 1:

seg1(equally distributed based on pri partition : 30datepartition/10=3 date partitions)
date1---0-99 sub partition of hashid
date2---0-99 sub partition of hashid
date3---0-99 sub partition of hashid

seg2(equally contains 30/10=3 date partitions)
date4---0-99 partition of hashid
date5---0-99 partition of hashid
date6---0-99 partition of hashid

...
..

seg10
date27---0-99 partition of hashid
date28---0-99 partition of hashid
date29---0-99 partition of hashid

OR

Угадай 2

seg1(distributed by 100hashid/10=10 hashid partitions)
date1---0-9 partition of hashid
date2---0-9 partition of hashid
...
date30---0-9 partition of hashid

seg2(equally contains 100hashid/10=10 hashid partitions)
date1---10-19 partition of hashid
date2---10-19 partition of hashid
...
date30---10-19 partition of hashid

Как это работает? Угадайте 1 или 2, если оба они не верны, проследите за тем, как они распределяются на уровне сегментов.

Это хороший дизайн, чтобы подразделить его на основе хеш-идентификатора. Поскольку я имею дело с 6 миллионами записей каждый день, и мне нужно хранить дату в течение года, я хотел, чтобы поиск затрагивал очень меньшую часть данных. Другими словами, основываясь на ключевом запросе, я определю диапазон хешей и буду искать в этих конкретных разделах.

Спасибо Ganesh.R

Ответы [ 3 ]

2 голосов
/ 28 октября 2011

В Greenplum ключ распределения определяет, как данные разбросаны по всем сегментам в кластере.Разделение разбивает данные внутри каждого сегмента на более мелкие фрагменты, как и разбиение в любой другой СУБД.

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

0 голосов
/ 04 декабря 2014

Когда вы создаете таблицу, а ключом распределения является любой ключ, скажем, event_id, а распространение выполняется на основе любого столбца даты, например, event_date, Наилучшим способом является разделение по столбцам, которое должно быть частью ключа распределения для правильного распределения данных / для асимметрии,

Спасибо

0 голосов
/ 13 октября 2011

Я не уверен на 100%, но я думаю, что разделение разделено на узел. Итак, в вашем примере каждый узел будет иметь 30 разделов.

Если вы хотите указать, какой ключ использовать, используйте DISTRIBUTE BY.

...