MySQL → Нововведения в MySQL 5.1
1. Разбиение таблиц (Partitioning)
Разбиение таблиц — это одна из важных функций, которых не хватало MySQL. Хотя в MySQL и реализован тип таблиц MERGE, однако, его функциональность довольно отличается от partitioning таблиц.
Разбиение таблиц позволит разделять большую таблицу на несколько и хранить их независимо друг от друга, при этом сохраняя логическую общность. Этим достигается увеличение скорости доступа к данным и простота управления дисками.
Все типы таблиц поддерживают такое разбиение.
В MySQL 5.1 реализованы следующие основные виды разбиения таблиц:
* Разбиение по диапазону. Такое разбиение подходит для таблиц со слабо связанными данными, например, таблица с логами.
CREATE TABLE logs (
value VARCHAR(30) NOT NULL,
create_date TIMESTAMP NOT NULL
)
PARTITION BY RANGE(YEAR(create_date)) (
PARTITION p0 VALUES LESS THAN (2005),
PARTITION p1 VALUES LESS THAN (2006),
PARTITION p2 VALUES LESS THAN (2007),
PARTITION P3 VALUES LESS THAN MAXVALUE
);
В этом примере данные будут разбиваться на таблицы по году создания записи.
* Разбиение по списку значений. Этот вид разбиения во многом похож на предыдущий. Главное отличие заключается в том, что разбиение по списку значений позволяет точно указать распределение данных для каждого значения.
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
departament TINYINT(2),
)
PARTITION BY LIST(departament) (
PARTITION management VALUES IN(1, 5, 6),
PARTITION sales VALUES IN(2, 3),
PARTITION technical VALUES IN(4, 7, 8)
);
* Разбиение по хеш-функции. В этом виде разбиения можно указать функцию, по которой будут разделяться данные:
CREATE TABLE logs (
value VARCHAR(30) NOT NULL,
create_date TIMESTAMP NOT NULL
)
PARTITION BY HASH( YEAR(create_date) )
PARTITIONS 4;
2. Построчная репликация (row-based replication)
При обычной репликации мастер-слейв при каждом изменении таблицы мастер посылает слейвам ту же команду на изменение данных. В MySQL 5.1 добавлена возможность создания репликации, при которой мастер не посылает слейвам команду на изменение данных, а записывает в лог-файл то, как и в каких строках были изменены данные. Такой вид репликации наиболее надежный и используется в большинстве коммерческих СУБД.
Включить построчную репликацию можно командой
SET GLOBAL binlog_format = 'ROW';
либо в конфигурационном файле.
3. События (events)
В новой версии добавлена возможность создания событий. Эта функциональность позволяет настроить выполнение периодических SQL запросов или процедур. Например, выполнять необходимый пересчет данных раз в день.
DELIMITER //
CREATE EVENT RECALC_SUMM
ON SCHEDULE EVERY 1 WEEK
STARTS '2008-08-13 1:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
UPDATE table1 SET sum = sum + today_amount
END
//
4. Удобство администрирования
Начиная с версии MySQL 5.1 появилась возможность сохранения логов сервера в таблицах. В предыдущих версиях логи можно было сохранять только в файловой системе, что добавляло трудностей с их обработкой. В таблицы можно записывать общий лог MySQL(general log)и лог медленных запросов (slow log). Настроить эту возможность можно параметром --log-output=TABLE. При выборе данной опции в базе данных mysql создадутся таблицы general_log и slow_log.
Кроме этого в MySQL 5.1 появилась таблица PROCESSLIST. В этой таблице сохраняются данные о том, какие процессы выполняет MySQL, идентично тому, как их выводит команда SHOW PROCESSLIST.
5. Поддержка XML XPath
В MySQL 5.1 добавлена поддержка XPath. Теперь XML документ, сохраненный в таблицу, доступен пользователю в виде дерева. Можно получить любое значение из дерева и обновить лишь нужный узел. Для этого были добавлены две функции: ExtractValue и UpdateXML. Например:
SELECT ExtractValue('test', '/a')
выдаст результат test.
SELECT UpdateXML('test', '/a', 'value')
выдаст результат value.
Кроме этого в MySQL 5.1 добавлены:
* Поддержка plug-in архитектуры, позволяющая подключать и изменять компоненты сервера без перезагрузки.
* Репликация кластер-кластер.
* Возможность хранить данные NDB кластера на диске.
* Программа mysqlslap, позволяющая эмулировать нагрузку на MySQL сервер.
Разбиение таблиц — это одна из важных функций, которых не хватало MySQL. Хотя в MySQL и реализован тип таблиц MERGE, однако, его функциональность довольно отличается от partitioning таблиц.
Разбиение таблиц позволит разделять большую таблицу на несколько и хранить их независимо друг от друга, при этом сохраняя логическую общность. Этим достигается увеличение скорости доступа к данным и простота управления дисками.
Все типы таблиц поддерживают такое разбиение.
В MySQL 5.1 реализованы следующие основные виды разбиения таблиц:
* Разбиение по диапазону. Такое разбиение подходит для таблиц со слабо связанными данными, например, таблица с логами.
CREATE TABLE logs (
value VARCHAR(30) NOT NULL,
create_date TIMESTAMP NOT NULL
)
PARTITION BY RANGE(YEAR(create_date)) (
PARTITION p0 VALUES LESS THAN (2005),
PARTITION p1 VALUES LESS THAN (2006),
PARTITION p2 VALUES LESS THAN (2007),
PARTITION P3 VALUES LESS THAN MAXVALUE
);
В этом примере данные будут разбиваться на таблицы по году создания записи.
* Разбиение по списку значений. Этот вид разбиения во многом похож на предыдущий. Главное отличие заключается в том, что разбиение по списку значений позволяет точно указать распределение данных для каждого значения.
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
departament TINYINT(2),
)
PARTITION BY LIST(departament) (
PARTITION management VALUES IN(1, 5, 6),
PARTITION sales VALUES IN(2, 3),
PARTITION technical VALUES IN(4, 7, 8)
);
* Разбиение по хеш-функции. В этом виде разбиения можно указать функцию, по которой будут разделяться данные:
CREATE TABLE logs (
value VARCHAR(30) NOT NULL,
create_date TIMESTAMP NOT NULL
)
PARTITION BY HASH( YEAR(create_date) )
PARTITIONS 4;
2. Построчная репликация (row-based replication)
При обычной репликации мастер-слейв при каждом изменении таблицы мастер посылает слейвам ту же команду на изменение данных. В MySQL 5.1 добавлена возможность создания репликации, при которой мастер не посылает слейвам команду на изменение данных, а записывает в лог-файл то, как и в каких строках были изменены данные. Такой вид репликации наиболее надежный и используется в большинстве коммерческих СУБД.
Включить построчную репликацию можно командой
SET GLOBAL binlog_format = 'ROW';
либо в конфигурационном файле.
3. События (events)
В новой версии добавлена возможность создания событий. Эта функциональность позволяет настроить выполнение периодических SQL запросов или процедур. Например, выполнять необходимый пересчет данных раз в день.
DELIMITER //
CREATE EVENT RECALC_SUMM
ON SCHEDULE EVERY 1 WEEK
STARTS '2008-08-13 1:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
UPDATE table1 SET sum = sum + today_amount
END
//
4. Удобство администрирования
Начиная с версии MySQL 5.1 появилась возможность сохранения логов сервера в таблицах. В предыдущих версиях логи можно было сохранять только в файловой системе, что добавляло трудностей с их обработкой. В таблицы можно записывать общий лог MySQL(general log)и лог медленных запросов (slow log). Настроить эту возможность можно параметром --log-output=TABLE. При выборе данной опции в базе данных mysql создадутся таблицы general_log и slow_log.
Кроме этого в MySQL 5.1 появилась таблица PROCESSLIST. В этой таблице сохраняются данные о том, какие процессы выполняет MySQL, идентично тому, как их выводит команда SHOW PROCESSLIST.
5. Поддержка XML XPath
В MySQL 5.1 добавлена поддержка XPath. Теперь XML документ, сохраненный в таблицу, доступен пользователю в виде дерева. Можно получить любое значение из дерева и обновить лишь нужный узел. Для этого были добавлены две функции: ExtractValue и UpdateXML. Например:
SELECT ExtractValue('test', '/a')
выдаст результат test.
SELECT UpdateXML('test', '/a', 'value')
выдаст результат value.
Кроме этого в MySQL 5.1 добавлены:
* Поддержка plug-in архитектуры, позволяющая подключать и изменять компоненты сервера без перезагрузки.
* Репликация кластер-кластер.
* Возможность хранить данные NDB кластера на диске.
* Программа mysqlslap, позволяющая эмулировать нагрузку на MySQL сервер.



