■ Линейное секционирование
При линейном секционировании (range partitioning) данные секционируются на неперекрывающиеся диапазоны значений При вставке строки в таблицу она
помещается в соответствующий раздел на основе значения в столбце ключа секционирования. Линейное секционирование особенно полезно, когда ключом секционирования является время. Это позволяет оптимизатору выполнять отсечение разделов для запросов, содержащих конкретное значение или диапазон значений ключа секционирования.
В схеме EASYDW покупки каждого месяца сохраняются в отдельном разделе. Таблица фактов «покупки» секционируется линейно, столбец time_key (ключ времени) служит ключом секционирования. Каждый раздел сохраняется в отдельном табличном пространстве, распределенном по нескольким дискам, •как это показано на рис. 3.2.
Код SQL, который создает такую таблицу с секционированием, показан ниже. Условие VALUES LESS THAN показывает верхнюю границу значений ключа секционирования в данном разделе. Нижняя граница (если есть) указана в условии VALUES LESS THAN предыдущего раздела. В нашем примере раздел purchases_feb2002 содержит данные со значениями ключа времени в диапазоне ?01-02-2002и <01-03-2002.
.
Хэш-секционирование
При линейном секционировании возможна ситуация, когда данные не распределяются равномерно по разделам. Некоторые разделы могут оказаться очень большими, а другие — маленькими. Если данные были секционированны по месяцам, а в некоторые месяцы объем продаж был выше, чем в прочие, это может привести к очень большим различиям в размерах разделов. Когда наблюдается такая неравномерность, формируется «горячая точка», в которой происходит конфликт за ресурсы.
Хэш-секционирование (hash partitioning) уменьшает подобного рода неравномерность путем применения к ключу секционирования хэш-функции. Получившееся значение определяет, в каком разделе нужно сохранить данную строку. Так что если вместо секционирования по месяцам мы разобьем таблицу покупок хэш-секционированием по идентификатору продукта (product_id), то строки, относящиеся к одному месяцу, окажутся разбросаны по разным разделам, как показано на рис. 3.3. Заметим, что все строки, относящиеся к одному продукту, попадут в один раздел. Однако нельзя указать, в каком разделе какой продукт будет содержаться.
Хэш-секционирование хорошо применять при поиске строк, соответствующих одному значению, но в данном случае оптимизатор не может выполнять отсечение разделов при обработке запросов на диапазон значений. Если у нас есть запрос по конкретному продукту, например: «Сколько палаток мы продаем ежемесячно?», — оптимизатор сможет определить, какой раздел проверять. Однако если у нас будет запрос: «Какие продукты мы продали в январе?», — нам придется проводить поиск во всех разделах.
При хэш-секционировании пользователь не знает и не может управлять тем, какие продукты в какой раздел попадут. Вы можете лишь указать, сколько разделов вы хотели бы иметь. Это осложняет операции обслуживания, требующие знания данных, например архивирование старых данных таблицы. Поэтому хэш-секционирование само по себе используется редко, однако применяется в связке с линейным секционированием.
Метки:10, 11, 12, 13, 14, 15, 4, 5, 6, 7, 8, 9
Статьи по теме:
No related posts