Онлайн библиотека PLAM.RU


3.2.3.1. LINEAR HASH Partitioning

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

Синтаксически единственное различие между выделением разделов линейного хэширования и регулярным хэшированием: добавление ключевого слова LINEAR в предложение PARTITION BY, как показано здесь:


CREATE TABLE employees (id INT NOT NULL, fname VARCHAR(30),

lname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT, store_id INT)

PARTITION BY LINEAR HASH(YEAR(hired)) PARTITIONS 4;


Данный выражением expr раздел, в котором запись сохранена, когда линейное хэширование используется, представляет собой номер раздела N из числа разделов num, где N получен согласно следующему алгоритму:


Находят следующую степень 2 большую, чем num. Назовем это значение V, это может быть вычислено как:V=POWER(2, CEILING(LOG(2, num)))


Например, предположите, что num=13.

Тогда LOG(2,13)=3.7004397181411.

CEILING(3.7004397181411) 4, а V = POWER(2,4) = 3.

Берется N = F(column_list) (V – 1).

Пока N >= num:

Берется V=CEIL(V/2)

Берется N = N (V – 1)


Например, предположите, что таблица t1 применяет линейное выделение разделов, имеет 6 разделов и создана, используя эту инструкцию:


CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)

PARTITION BY LINEAR HASH(YEAR(col3)) PARTITIONS 6;


Теперь примите, что Вы хотите вставлять две записи в t1: у одной значение столбца col3 равно '2003-04-14', а у другой составляет '1998-10-19'. Номер раздела для первой из них определен следующим образом:

V = POWER(2, CEILING( LOG(2,7) )) = 8

N = YEAR('2003-04-14') (8-1) = 2003 7 = 3

(3 >= 6 FALSE: запись сохранена в разделе #3

)


Номер раздела, где сохранена вторая запись, вычислен как показано здесь:

V = 8

N = YEAR('1998-10-19') (8-1) = 1998 7 = 6

(6 >= 6 TRUE: нужен дополнительный шаг

)

N = 6 CEILING(5 / 2) = 6 3 = 2

(2 >= 6 FALSE: запись сохранена в разделе #2

)


Преимущество в выделении разделов линейным хэшем в том, что добавление, удаление, объединение и разбиение разделов сделано намного быстрее, что может быть полезно, когда имеешь дело с таблицами, содержащими чрезвычайно большие количества данных. Недостаток в том, что менее вероятно, что данные будут равномерно распределены между разделами по сравнению с распределением, полученным используя регулярное выделение разделов hash partitioning.









Главная | Контакты | Нашёл ошибку | Прислать материал | Добавить в избранное

Все материалы представлены для ознакомления и принадлежат их авторам.