|
||||
|
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. |
|
||
Главная | Контакты | Нашёл ошибку | Прислать материал | Добавить в избранное |
||||
|