Умное выделение из огромного стола

У меня есть огромная таблица в хранилище данных (Vertica). Я обращаюсь к этой таблице по частям в целях оптимизации. То, как я решаю свои куски, довольно просто. У меня есть столбец первичного ключа, например A, и я беру MAX(A). У меня размер блока 20000, и я создал (A/20000)+1 блок. Я формирую запрос для каждого фрагмента и извлекаю данные.

Проблема с этим подходом заключается в следующем:

  • Количество моих фрагментов зависит от MAX(A), а MAX(A) растет очень быстро, и, таким образом, количество фрагментов также увеличивается вместе с ним.

Я выбрал число 20000, потому что это дает мне оптимальную производительность. Но распределение первичного ключа в кусках 20000 настолько разбросано. Например, 0-20000 может содержать только 3 элемента, а диапазон 20000-40000 может содержать 500 элементов, и ни один диапазон не приближается к 20000.

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

Любые указатели на решение приветствуются.


person Senthil    schedule 23.01.2015    source источник
comment
Возможно, все, что вам нужно, это предложения OFFSET и LIMIT SQL SELECT.   -  person j_random_hacker    schedule 23.01.2015
comment
Ты прав . Все, что мне было нужно, это предложение OFFSET.   -  person Senthil    schedule 24.01.2015


Ответы (1)


Я не уверен, что означает цели оптимизации, но я думаю, что лучшим подходом будет создание столбца меток времени или использование подходящего столбца меток времени для разделения. Затем вы можете разбить на более крупную систему отсчета, чтобы между разделами не было большого диапазона.

Если таблица разбита на разделы, она сможет воспользоваться преимуществами удаление разделов. Это означает, что Vertica может исключать контейнеры хранения во время выполнения запроса, которые не совпадают по предикату метки времени.

В противном случае вы можете посмотреть предложение сегментации и использовать максимальное/минимальное значение из контейнеров хранения. Это может быть немного сложнее.

person Kermit    schedule 23.01.2015