Привет, Хабр! На прошлой неделе прошла конференция Percona Live Data Performance Conference 2016. Как обычно, тонны новой информации, и я всё ещё разбираю свои заметки и пролистываю слайды докладов, на которые попасть не удалось. Сообщество MySQL открыто и дружественно относится к «параллельным» сообществам и проектам. Естественно, были доклады об Oracle MySQL, MariaDB и Percona Server, но были также доклады и о MongoDB, Redis, Tarantool, Hadoop, Cassandra, Scylla, Ignite, HBase, ActorDB, SQLite, ToroDB, Tempesta DB и даже доклад об оптимизации PostgreSQL, несколько обобщённый для MySQL и других СУБД.
Сотрудники Oracle делились планами о MySQL 8 неожиданно щедро как в докладах, так и в кулуарах. Мне эта информация показалась достаточно интересной, поэтому я решил составить краткую сводку из услышанного.
Да, со следующей версии MySQL изменяется схема нумерации релизов. Следующий основной релиз будет называться MySQL 8, и все последующие основные релизы будут нумероваться 9, 10 и т.д. Это сделано во-первых потому, что MySQL будет объединён с MySQL Cluster (который в данным момент имеет номер релиза 7.5), а во-вторых для упрощения нумерации, чтобы основные релизы (5.5, 5.6, 5.7) не выглядели как корректирующие.
Rapid plugins
По словам команды разработчиков MySQL пользователи хотят более гибкий цикл разработки, чтобы новую функциональность не нужно было ждать до следующего основного релиза. Многие пользователи готовы протестировать новую функциональность, даже если она сыровата, но чтобы при возникновении проблем её можно было бы отключить.
Предлагаемое решение этой задачи называется труднопереводимым термином rapid plugins. Суть в том, что в тех случаях, когда это возможно, новая функциональность будет выпускаться в виде подключаемых модулей. Версии модулей будут совпадать с версией сервера, и как я понял, никакой совместимости этих модулей между разными версиями сервера не обещают. То есть,. это сделано исключительно для того, чтобы изолировать новые функции от старых, и чтобы новые функции можно было подключать/отключать по желанию.
Собственно говоря, эта новая возможность уже обкатывается на текущем стабильном релизе 5.7. В MySQL 5.7.12 появился новый модуль со слегка мистическим названием X Plugin и очень странно, что на Хабре до сих пор не появилось статьи на эту тему, потому что предоставляемая им функциональность впечатляет: новый протокол общения с сервером с возможностью асинхронного выполнения запросов, новый NoSQL API с упором на CRUD, JSON и document store с биндингами для Python, JavaScript, Node.js, .Net и Java, а также новая командная утилита для интерактивной работы с сервером.
Однако всю эту функциональность следует рассматривать скорее как прототип для тестирования. Разработчики сообщают, что для первого релиза производительность и завершённость не были приоритетами и работа будет продолжена в будущих релизах.
X protocol/DevAPI/Shell
Для MySQL 8 у разработчиков обширные планы на новый протокол и API:
- производительность
- расширение API и привязок к другим языкам
- использование X протокола для репликации и шардинга (потоковый протокол + более строгая структурированность запросов сильно упрощают эти задачи)
- объединение всех административных утилит и фронтендов к серверу в MySQL Shell
Оптимизатор запросов
Оптимизатор запросов в MySQL 8 получит, пожалуй, самые значительные изменения на моей памяти:
- кэширование плана выполнения для prepared statements
- гистограммы
- оконные функции (window functions)
- common table expressions (в том числе рекурсивные)
Как я понял, этот список не окончательный, рассматриваются также другие «продвинутые» возможности SQL, а также улучшения в JSON функциональности и индексах.
Кстати, пользователи MariaDB могут пользоваться гистограммами начиная с версии 10.0, а оконные функции и CTE (правда пока нерекурсивные) запланированы на MariaDB 10.2, который, скорее всего, выйдет раньше MySQL 8.
Group replication
Аналог Galera Cluster в исполнении Oracle называется Group Replication. Предварительные релизы уже были доступны в виде плагина. Как я понял, стабильный релиз планируется к появлению MySQL 8. Каких-то подробностей о запланированных возможностях разработчики не сообщали, кроме того, что будет ещё быстрее, удобнее и устойчивее, чем предварительные релизы.
Пока, MyISAM!
Наконец-то все системные таблицы будут переведены на InnoDB. MyISAM, таким образом, становится абсолютно ненужной с точки зрения сервера, но будет доступна в качестве опции для тех, кто любит кактусы.
Словарь данных и атомарные DDL
Один из самых частоупоминаемых недостатков MySQL — это отсутствие транзакционного словаря данных. Как я уже писал у этого недостатка есть много достаточно неприятных последствий: отсутствие транзакционных DDL, дорогостоящие запросы к INFORMATION_SCHEMA
, проблемы с расширяемостью формата метаданных, проблемы с физическими бэкапами и блокировками таблиц.
В MySQL 8 по крайней мере часть этих проблем будет устранена. .frm
файлов больше не будет, метаданные таблиц будут храниться только в общем словаре данных (а не .frm
и отдельно в InnoDB, как это сейчас). То есть, проблемы с медленным доступом через INFORMATION_SCHEMA
и рассинхронизацией метаданных в случае сбоев уходят в прошлое. Движки хранения получат возможность хранить расширенные атрибуты для своих таблиц, что открывает возможности для некоторой интересной функциональности.
И что самое главное, DDL станут хоть и не транзакционными, но атомарными. То есть возможности завернуть DDL в транзакцию и откатить в MySQL 8 ещё не будет. Но частично выполненных DDL в случае падения сервера или проблем с репликацией мы больше не увидим.
И ещё...
Наверняка это неполный список планируемой функциональности, и к релизу он расширится. Помимо прочего планируется очередной пересмотр значений по умолчанию для конфигурационных параметров. В частности, UTF-8 станет кодировкой по умолчанию вместо latin1.
Разработчики также туманно намекают на улучшенную поддержку облачных платформ и новый движок хранения на основе Log Structured Merge деревьев. В любом случае, MySQL 8 уже выглядит интересным.
Комментарии (18)
r0ll
25.04.2016 09:55+4>>оконные функции (window functions)
Отличная новость! Не придется больше костылей городить для «эмуляции» таких запросов…
itcoder
25.04.2016 10:22А на какую дату намечен релиз 8 версии не подскажите?
kaamos
25.04.2016 10:27Нет, вот на эту тему ораклоиды точно говорить не любят. Но вангую, что к их собственной конференции MySQL Connect в сентябре у них наверняка запланирован какой-то важный milestone. Это может быть бета релиз, а может и финальный.
itsoft
25.04.2016 11:54+1А какие шансы на то, что она платной станет?
Lisio
25.04.2016 12:29+1При наличии MariaDB, Percona и других форков — маловероятно.
Pinsky
25.04.2016 14:20-1При бесплатном наличии PostgreSQL смонительна необходимость в использовании MySQL, хотя бы до тех пор, пока не займутся глубокой оптимизацией запросов в т.ч. LIMIT+JOIN.
baldr
25.04.2016 15:39+4И да начнется СР*Ч!
Зашел в этот пост отчасти чтобы посмотреть сколько сотен комментов на тему «PostgreSQL vs MySQL» за полдня уже написали.
Удивлен.
itsoft
25.04.2016 23:16+1А мне тут навязывают другое мнение, что Маша будет бесплатной, а MySQL типа улучшат и могут под этим соусом сделать платным.
Мы уже перенесли что-то на Машу. Вот и вопрос на что все же ориентироваться. Неопределенность пугает. В цене услуг хостинга сейчас для конкуренции каждые 100р важны. А если тысячи раз по 100р., а если не по 100р., а более, то совсем неприятно.kaamos
25.04.2016 23:49-1Этому мнению недавно исполнилось 7 лет. И я по-моему уже отвечал на него, но попробую ещё раз. Oracle хочет, чтобы MySQL оставалась лидирующей СУБД для Web. С платным продуктом добиться этой цели невозможно. Просто потому, что бесплатных проектов, желающих занять эту нишу хоть пруд пруди. MongoDB, MariaDB и PostgreSQL спят и видят, чтобы MySQL стал платным. Но нет.
miksoft
25.04.2016 12:00+1«В частности, UTF-8 станет кодировкой по умолчанию вместо latin1.»
Может быть даже юникодные REGEXP-ы сделают?
А то до сих пор «The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multibyte safe and may produce unexpected results with multibyte character sets.»
DeLuxis
Мода с версиями гугла уже и тут.
lybin
Надо же обогнать mariadb с версией 10 :)