После года разработки и семи предварительных выпусков сформирован (https://mariadb.org/mariadb-10-3-7-now-available/) первый стабильный релиз новой ветки СУБД MariaDB 10.3 (https://mariadb.com/kb/en/library/mdb-1037-rn/), в рамках которой развивается ответвление от MySQL, сохраняющее обратную совместимость и отличающееся (https://mariadb.com/kb/en/library/system-variable-difference.../) интеграцией дополнительных движков хранения и расширенных возможностей. Развитие MariaDB курирует независимая организация MariaDB Foundation в соответствии с полностью открытым и прозрачным процессом разработки, не зависящим от отдельных вендоров. MariaDB поставляется вместо MySQL во многих дистрибутивах Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) и внедрён в таких крупных проектах, как Wikipedia (https://www.opennet.me/opennews/art.shtml?num=36759), Google Cloud SQL (https://www.opennet.me/opennews/art.shtml?num=37905) и Nimbuzz (https://www.opennet.me/opennews/art.shtml?num=36506).Ключевые улучшения (https://mariadb.com/kb/en/library/mdb-1037-rn/) MariaDB 10.3 (https://mariadb.com/kb/en/library/changes-improvements-in-ma.../):
- В разряд стабильных переведён движок хранения MyRocks (https://mariadb.com/kb/en/myrocks/), разработанный (https://www.opennet.me/opennews/art.shtml?num=45064) компанией Facebook на базе системы хранения RocksDB (https://www.opennet.me/opennews/art.shtml?num=38499), оптимизированной для Flash-накопителей. В хранилище MyRocks применяются страницы данных плавающего размера, позволяющие избежать выравнивания по фиксированной границе блока, и модель хранения данных в форме лога (Log Structured Merge Trees), допускающая только дополнение (чистка производится сборщиком мусора). В процессе выполнения запросов в несколько раз сокращается (https://code.facebook.com/posts/190251048047090/myrocks-a-sp.../) число операций случайного чтения/записи, что приводит к увеличению производительности по сравнению с InnoDB на 20-30% на SDD и до 6 раз на НЖМД при нагрузке с большим числом операций случайной записи. Кроме того, MyRocks позволяет на 50% сократить размер БД по сравнению со сжатым хранилищем InnoDB и в 3.5 раза по сравнению с InnoDB без применения сжатия. Из недостатков MyRocks можно отметить отсутствие поддержки внешних ключей и полнотекстовых индексов;
- В разряд стабильных переведён движок хранения Spider (https://mariadb.com/kb/en/library/spider/) с системой шардинга, позволяющей разносить большие таблицы на несколько серверов. С точки зрения формирования запросов такие таблицы не отличаются от обычных локальных таблиц, но фактически при использовании Spider разные порции данных, составляющих одну таблицу, хранятся на разных серверах. Для обеспечения высокой доступности таблиц, распределённых по серверам при помощи Spider, может применяться репликация. В разнесённых на несколько серверов таблицах допускается выполнение XA-транзакций (https://mariadb.com/kb/en/library/xa-transactions/). В новой версии добавлена поддержка прямых операций слияния (JOINS и GROUP BY), обновления, удаления и агрегирования. В базирующемся на Spider движке Partition появилась поддержка полнотекстового поиска, чтения по нескольким диапазонам (Multi-range) и обработчиков HANDLER;
- Добавлена поддержка версионированных таблиц (https://mariadb.com/kb/en/library/system-versioned-tables/), в которых не только хранится актуальный срез данных, но сохраняется информация и о всех ранее внесённых изменениях. Версионированные таблицы могут применяться для аудита изменений, разбора инцидентов, анализа различий содержимого в разное время или отката состояния на определённый момент в прошлом. Версионирование включается при помощи выражения
"CREATE TABLE ... WITH SYSTEM VERSIONING" или "ALTER TABLE ... ADD SYSTEM VERSIONING";
- Реализована (https://mariadb.com/kb/en/library/storage-engine-independent.../) независимая от движков хранения система сжатия содержимого столбцов. Для включения сжатия для столбца при его определении следует указать атрибут COMPRESSED. Для управления параметрами сжатия и оценки состояния предложены переменные column_compression_threshold, column_compression_zlib_level, column_compression_zlib_strategy, column_compression_zlib_wrap, column_compressions и column_decompressions;
- Поддержка конструкторов табличных значений (https://jira.mariadb.org/browse/MDEV-12172) (table value constructor) для формирования содержимого простых таблиц. Например, можно использовать конструкции вида "WITH t (a,c) AS (SELECT * FROM VALUES (1,'xx'), (5,'yyy'), (1,'zzz'))...";
- Реализована поддержка невидимых столбцов (https://mariadb.com/kb/en/library/invisible-columns/), которые не выводятся в
"SELECT *" и обрабатываются только в случае явного указания их имени. Определения невидимых столбцов осуществляется при помощи атрибута INVISIBLE (https://mariadb.com/kb/en/invisible-columns/) в "CREATE TABLE" или "ALTER TABLE";
- Возможность создания агрегатных хранимых функций (https://mariadb.com/kb/en/library/stored-aggregate-functions/). При помощи выражения "CREATE AGGREGATE FUNCTION" теперь можно создавать агрегатные функции, обрабатывающие набор строк по аналогии с SUM, AVG и т.п.
- В основной состав сервера включен плагин Semi-sync (https://mariadb.com/kb/en/library/semisynchronous-replication/) с реализацией псевдосинхронного механимзма репликации;
- Добавлена поддержка последовательностей (sequence) и связанных с ними выражений CREATE SEQUENCE (https://mariadb.com/kb/en/library/create-sequence/), SHOW CREATE SEQUENCE (https://mariadb.com/kb/en/show-create-sequence/), ALTER SEQUENCE (https://mariadb.com/kb/en/alter-sequence/), DROP SEQUENCE (/kb/en/drop-sequence/), NEXT VALUE FOR (https://mariadb.com/kb/en/next-value-for-sequence_name/), PREVIOUS VALUE FOR (https://mariadb.com/kb/en/previous-value-for-sequence_name/) и SETVAL() (https://mariadb.com/kb/en/library/setval/). Последовательности могут (https://mariadb.com/kb/en/library/sequence-overview/#using-s...) указываться в секции DEFAULT в качестве значения по умолчанию;
- Добавлена поддержка операций INTERSECT (https://mariadb.com/kb/en/library/intersect/) и EXCEPT (https://mariadb.com/kb/en/library/except/), дополняющих функциональность выражения UNION (предполагают применение операции DISTINCT);
- Добавлены опций WAIT и NOWAIT (https://mariadb.com/kb/en/library/wait-and-nowait/), которые можно использовать для управления поведением при наличии блокировок в момент выполнения операций (SELECT, ALTER, DROP и т.п.). При указании NOWAIT управление будет возвращено сразу с выводом ошибки, если выставлена блокировка, а через WAIT можно установить желаемое время таймаута;
- В InnoDB добавлен режим мгновенного добавления столбцов (https://mariadb.com/kb/en/library/instant-add-column-for-innodb/), не требующий полного перестроения таблицы (вместо перестроения в таблицу добавляется специальная скрытая запись и обновляется словарь).
). Новый режим демонстрирует уровень сложности O(log n) вместо O(n·m) и позволяет почти мгновенно выполнять операции "ALTER ... ADD COLUMN" на очень больших таблицах, добавление столбца в которых могло раньше занимать часы;
- Существенно улучшена совместимость с СУБД Oracle в режиме "sql_mode=ORACLE", в котором теперь поддерживается подмножество языка
PL/SQL вместо традиционного для MariaDB синтаксиса хранимых процедур.
В предоставляемом MariaDB диалекте языка хранимых процедур SQL/PL появилась поддержка пакетов в стиле Oracle. Реализованы выражения CREATE PACKAGE (https://mariadb.com/kb/en/create-package/),
CREATE PACKAGE BODY (https://mariadb.com/kb/en/create-package-body/),
DROP PACKAGE (https://mariadb.com/kb/en/drop-package/),
DROP PACKAGE BODY (https://mariadb.com/kb/en/drop-package-body/),
SHOW CREATE PACKAGE (https://mariadb.com/kb/en/show-create-package/...
URL: https://mariadb.org/mariadb-10-3-7-now-available/
Новость: https://www.opennet.me/opennews/art.shtml?num=48670