Отчёт с Percona Live 2016: чего ждать от MySQL 8?


    Привет, Хабр! На прошлой неделе прошла конференция 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 уже выглядит интересным.

    Share post

    Comments 18

    • UFO just landed and posted this here
        0
        Надо же обогнать mariadb с версией 10 :)
        +4
        >>оконные функции (window functions)
        Отличная новость! Не придется больше костылей городить для «эмуляции» таких запросов…
          0
          А на какую дату намечен релиз 8 версии не подскажите?
            0
            Нет, вот на эту тему ораклоиды точно говорить не любят. Но вангую, что к их собственной конференции MySQL Connect в сентябре у них наверняка запланирован какой-то важный milestone. Это может быть бета релиз, а может и финальный.
            +1
            А какие шансы на то, что она платной станет?
              0
              Думаю, 0%. Но охотно принимаю ставки :)
                +1
                При наличии MariaDB, Percona и других форков — маловероятно.
                  –1
                  При бесплатном наличии PostgreSQL смонительна необходимость в использовании MySQL, хотя бы до тех пор, пока не займутся глубокой оптимизацией запросов в т.ч. LIMIT+JOIN.
                    +4
                    И да начнется СР*Ч!
                    Зашел в этот пост отчасти чтобы посмотреть сколько сотен комментов на тему «PostgreSQL vs MySQL» за полдня уже написали.
                    Удивлен.
                      +1
                      Я сам в шоке ;)
                        +3
                        Оконные функции в PostgreSQL уже давно есть!
                          0
                          Спасибо за информацию!
                      +1
                      А мне тут навязывают другое мнение, что Маша будет бесплатной, а MySQL типа улучшат и могут под этим соусом сделать платным.

                      Мы уже перенесли что-то на Машу. Вот и вопрос на что все же ориентироваться. Неопределенность пугает. В цене услуг хостинга сейчас для конкуренции каждые 100р важны. А если тысячи раз по 100р., а если не по 100р., а более, то совсем неприятно.
                        –1
                        Этому мнению недавно исполнилось 7 лет. И я по-моему уже отвечал на него, но попробую ещё раз. Oracle хочет, чтобы MySQL оставалась лидирующей СУБД для Web. С платным продуктом добиться этой цели невозможно. Просто потому, что бесплатных проектов, желающих занять эту нишу хоть пруд пруди. MongoDB, MariaDB и PostgreSQL спят и видят, чтобы MySQL стал платным. Но нет.
                          0
                          Логично. Спасибо.
                    +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.»
                      0
                      Кстати да, а то приходилось данные конвертить в однобайтную кодировку. :)

                    Only users with full accounts can post comments. Log in, please.