Mariadb последняя версия. MariaDB замена MySQL сравнение. Важная вещь - совместимость

Что будет теперь, когда ненавистная и даже глубоко противная истинным сторонникам открытого софта компания Oracle купила многострадальную Sun, а заодно и наш с тобой любимый MySQL? Конец легендарного продукта? Может быть. Но уже сейчас есть куда более функциональные и полностью совместимые разработки!

MySQL, он же просто "мускул". Бьюсь об заклад, что это единственная СУБД, которая по умолчанию доступна на твоем хостинге. Любимые движки для форума и блога работают на ней. Это фактически стандарт де-факто для любого веб-продукта. Да и в своих проектах ты, вероятнее всего, используешь именно ее. В Сети миллионы сайтов осуществляют запросы и сохраняют данные в БД с помощью MySQL. И все было просто и понятно до тех пор, пока компанию Sun вместе с ее любимым мускулом неожиданно не купила корпорация Oracle. Учитывая, что основным продуктом последней является мощнейшая СУБД с одноименным названием, сообщество сильно тревожилось о дальнейшей судьбе MySQL. И не напрасно. Компания Oracle, конечно же, выступила с заявлением, что все в порядке: проект по-прежнему будет развиваться. Но многим верится в это с трудом. Ведь даже быстрый выпуск версии 5.5, которую многие так ждали, не дал положительных результатов: старые баги как были, так и остались. Разве ж это дело? Но параллельно с оригинальным MySQL уже давно развиваются альтернативные проекты, которые совместимы с оригинальной СУБД, но во многом даже превосходят ее. И об этом мы сейчас и поговорим.

Движок БД - что это такое?

Если немного упростить понятия, то база данных - это обертка вокруг движка хранения данных. Она занимается приемом запросов и управлением ими, кэшированием и прочими обслуживающими функциями, обеспечивая работу с низкоуровневым API движка. Последний, в свою очередь, собственно и хранит данные (на диске или в памяти), работает с операционной системой и обеспечивает выдачу нужных выборок по запросу от сервера. Если раньше СУБД (связка "сервер + движок") была монолитная, то теперь во всех системах используется структура с плагинами. Движок в такой организации является просто модулем, а сам сервер не зависит от системы хранения данных. В последних редакциях классического MySQL также используется плагинная архитектура. Поэтому встроенный движок InnoDB (правда, обычно устаревшей версии) можно легко заменить на модуль другого проекта, который часто будет лучше. В альтернативных мускулу разработках, в том числе MariaDB или Drizzle, все движки изначально выполнены как плагины. Попробую кратко пробежаться по современным движкам хранения данных в MySQL-совместимых СУБД.

  • InnoDB - основной движок для мускула, который с версии 5.5 наконец-то сделали дефолтным. Поддерживает транзакции, репликацию, построчную блокировку. Достаточно устойчив к сбоям.
  • MyISAM - очень проблемный движок, плохо переносящий крах сервера. Не поддерживает транзакции, но зато может похвастаться полнотекстовыми индексами и быстротой работы. Долгое время был стандартным для всех версий MySQL, а потому до сих пор является самым популярным.
  • Aria - замена для MyISAM с поддержкой транзакций и улучшенной работой с памятью. Движок гарантирует целостность данных и при этом не уступает в скорости MyISAM.
  • CVS - специализированный движок на случай, когда требуется хранить и обрабатывать большие массивы строковых данных, разделяемых запятой.
  • Federated/FederatedX - этот движок специализируется на прозрачном разнесении данных по нескольким серверам (физическим) на уровне таблицы.
  • PBXT - призванный заменить InnoDB новый движок, в котором реализованы полная поддержка транзакций, многоверсионность, автоматическая обработка дедлоков. Движок оптимизирован для большого количества одновременных транзакций.
  • Blackhole - служебный движок, представляющий собой, по сути, /dev/null для СУБД и фактически не производящий никаких записей на диск. Используется для репликации.
  • Archive - движок, который максимально быстро работает на запись. Используется в тех случаях, когда необходимо хостить большие массивы данных. Для эффективности хранения используется сжатие, что приводит к медлительности во время выборок. Движок хорошо подходит для долговременного хранения логов и другой служебной информации.
  • XtraDB - расширенная и исправленная в некоторых проблемных местах InnoDB от компании Percona.
  • MERGE - схожий с Federated движок для разнесения данных в одной таблице на несколько разных.
  • MEMORY - движок, использующийся для хранения данных не на диске, а в памяти. Информация из базы доступна только во время работы сервера, но это дает колоссальный прирост в производительности.
  • BlitzDB - еще одна замена для MyISAM с хорошей производительностью за счет встроенного построчного кэширования и автоматического восстановления после сбоев. Движок не поддерживает транзакции.
  • NDB - движок для кластера, обладающий, впрочем, кучей проблем и удручающе плохой производительностью.
  • Falcon - легендарный движок от компании MySQL AB, разрабатываемый еще со времен Sun, когда было принято решение заменить оракловский InnoDB.
  • SphinxSE - полнотекстовый движок от создателя поискового сервера Sphinx. Лучший вариант для полнотекстового поиска и индексации по правилам русского языка. Легко оперирует терабайтами данных, обеспечивая при этом все возможности современной БД.

Важная вещь - совместимость

Итак, мы взялись за непростую задачу - найти замену для MySQL. Но если менять, то на что? Только не беги с криками "Да отстой ваш мускул - бери слона, то есть PostgreSQL". Не выйдет! Сейчас столько кода написано с поддержкой MySQL, что переписать или искать замену - себе дороже. Причем в прямом смысле - часто уложиться в рамки разумных финансовых затрат просто невозможно. Хорошо, если речь идет о простецком форуме или блоге (обычно в них реализована поддержка сразу нескольких систем). Но что если это что-то самописное или заточенное под возможности именно MySQL? Тут все ох как непросто. Так что наша задача - сохранить мускулы (то есть полную совместимость с MySQL), но прокачать их так, чтобы не зависеть от старшего тренера и его стероидов.

Разработчики и идеологи самого MySQL далеко не дураки и сами предвидели ситуацию, что после поглощения сложно будет всем. Некоторые из них решили даже покинуть компанию и основать свои проекты, прихватив тогда еще свободные коды мускула. Благодаря этому сейчас есть несколько интересных продуктов, основанных на коде оригинального сервера, но с большими доработками и изменениями во всем, куда только удалось дотянуться разработчикам. Первым делом энтузиасты освободились от бремени движка InnoDB, правами на который уже давно обладает все тот же самый Oracle. На замену ему выкатили несколько движков, которые стали доступными в MariaDB.

Архитектура MySQL - теперь уже как пособие по устройству некогда великой СУБД

MariaDB

История этого сервера уходит в далекий 2008 год, когда один из главных разработчиков MySQL, осознавая, что сильно связан поставленными работодателем рамками, уволился и основал свою компанию, которая занялась исправлением родовых травм MySQL. Я говорю о дефолтном движке MyISAM, который необходимо было менять, и критических багах, на исправление которых уходило неприемлемое количество времени. Что получилось у создателей MariaDB? Замечательный продукт, который на уровне протокола, формата файлов и языка SQL идентичен с оригинальной версией MySQL. Это предоставляет возможность безболезненного перехода: без потери данных или изменения логики работы имеющегося кода.

"Но какие бонусы я получу от перехода?", - спросишь ты. Взамен мы получаем большую скорость работы и новые фичи, которых, возможно, вообще никогда не будет в мускуле. Например, интегрированный в сам сервер поисковый движок Sphinx, который не придется ставить отдельно, расширенные возможности по бэкапу и управлению данными и так далее.

Надо сказать, что многие очень крупные компании (в том числе такие звери, как Google и Facebook) давно используют MariaDB. По сети гуляет специальный набор патчей, которые после наложения на исходные коды оригинального мускула решают многие проблемы. Однако не жди их появления в официальном сервере - если за столько лет не сподобились, то вряд ли в следующей версии решатся. Разработчики MariaDB же пока свободны от корпоративных правил и маркетинговых ограничений, поэтому новые патчи и исправления багов принимаются достаточно быстро.

Если оригинальный мускул держится на двух китах - движках хранения данных InnoDB и MyISAM, то MariaDB использует свои собственные, выступающие продвинутыми заменителями. Движок Aria пришел на замену MyISAM и на деле куда более производителен благодаря построчному кэшированию и оптимизированному формату упаковки данных. Если оригинальный MyISAM был быстр за счет отказа от транзакций, что означало возможную потерю данных, то Aria одновременно и производителен, и безопасен. За счет улучшенных форматов для хранения информации MariaDB существенно быстрее восстанавливается после сбоев, не требуя отдельных процедур проверки данных после краха. Принадлежащий Oracle движок InnoDB заменен на XtraDB, разработку другой компании в области БД Percona. Последняя известна своими сборками MySQL с интегрированными патчами от Гугла и , а также расширенными инструментами администрирования. Команда имеет необычную историю (подробнее ты можешь прочитать во врезке) и сейчас активно занимается созданием нового мускула. Для обратной совместимости с MySQL движок XtraDB в MariaDB даже называется точно так же, то есть InnoDB. Но надо понимать, что на самом деле сохранилось только название, дабы не смущать софт непривычными идентификаторами.

Первым проектом молодой компании Oracle была разработка по заказу разведчиков учетной системы, за которую на конкурсе другие компании запрашивали под $2 000 000, а молодой Ларри Элисон заносчиво указал сумму всего в $300 000. Стоит ли говорить, что проект был провален, зато компания получила стартовый капитал и начала свое восхождение.

Дополнительные движки

Об XtraDB стоит поговорить более детально: по мнению многих специалистов это номер один в мире движок для БД. Более того, он обставляет оракловский InnoDB, как маленького:). Ключевая фича - долгожданная поддержка многоядерных и многопроцессорных систем, чем ну никак не хочет (или не может?) похвастаться MySQL. Патчи от Google давно решили эту проблему, но, как всегда, их не удосужились включить в оригинальный движок, поэтому MySQL с точки зрения производительности плетется далеко позади по любым бенчмаркам. Разработчики XtraDB значительно улучшили стратегию использования дискового I/O, что раньше ограничивало производительность из-за тормозов со сбросом данных на диск из кэша. Соответствующими опциями теперь можно тонко управлять из настроек, что позволяет особо продвинутым админам подтюнить производительность демона самому, не обращаясь к дорогим специалистам по базам данных. Тем более, что из коробки доступна детальная статистика по работе движка, что сводит на нет потребность в дорогом коммерческом софте для анализа производительности базы данных. Нужна лишь одна команда SHOW ENGINE INNODB STATUS . И немаловажный момент - скорость восстановления после сбоя: если уж он и случился, восстановление будет не просто быстрым, а почти реактивным, зачастую до десяти раз быстрее, чем в MySQL. А также множество других мелочей: буферы для записей, адаптивные чекпоинты и увеличенное число открытых транзакций. Все это позволит серверу хорошо чувствовать себя в очень нагруженных условиях.

Если тебе и этого не хватает, и ты киваешь головой в сторону Firebird или PosgreSQL, намекая, что там есть и полная поддержка транзакционной модели и даже MVCC (Multiversion Concurrency Control - конкурентная модель данных на базе версионности, что позволяет без блокировок производить обновление и чтение одной и той же строки данных) - расслабься. В MariaDB доступен движок PBXT, который в некоторых ситуациях еще более крут, чем все вышеперечисленные. Правда, тут сразу стоит сказать, что он не такой универсальный и его нужно уметь готовить! PBXT в основном заточен под большое количество транзакций, которые пишут или изменяют данные, поддерживает быстрый откат и умеет сам разрешать сложные ситуации с блокировками и дедлоками. Например, если хочешь сделать хранилище логов, то у тебя будет огромное количество операций записи в таблицу, но сравнительно мало чтения. В то же время, если кто-то все-таки захочет сделать выборку из БД, он получит максимально свежие данные, не мешая при этом записи новых. И для совсем уж извращенцев есть движок FederatedX, умеющий распределять таблицу данных на несколько физических серверов, а также OQGRAPH, оптимизированный для хранения иерархических структур, графов и деревьев. Подход, идеально подходящий для создания клона Facebook и , где требуется работать с социальным графом отношений между людьми, что плоховато вписывается в типичную модель баз данных.

Cloud Computing

Разработчики другого проекта - Drizzle - пошли по немного другому пути и решили вообще переосмыслить место базы данных в инфраструктуре типичного проекта. Вспомнили, что сейчас модно: cloud computing, Google Proto Buffers, масштабируемость, многоядерность и прочее. И подумали: база данных также должна двигаться вместе с современными технологиями, а не плестись в конце, вне зависимости от того, что на ней крутится - блоговый движок или крупная корпоративная CRM-система. Под шумок было решено упростить функционал оригинальной MySQL, выкинув тянущиеся из релиза в релиз возможности, которые в действительности мало кому нужны. Система утратила поддержку UNIX-сокетов (это хотя и спорное, но вполне допустимое решение ввиду направленности на облачные среды) и версию для Windows. В Drizzle нет никаких служебных баз и многих других привычных вещей. Но что же тогда есть?

Drizzle благодаря простой микроядерной и плагинной архитектуре умеет многое

А есть архитектура с микроядром, в которое вынесены все основные операции и поддержка протоколов, а также система плагинов, позволяющая расширить систему в любую сторону и на любую глубину. В качестве одной из основных системных компонент используется бинарный протокол от Google - Protocol Buffer. С его помощью описываются как таблицы, так и данные, он же применяется и для репликации. Основной упор в разработке сделан на максимальную поддержку многопоточности и многопроцессорности, так что масштабируемость - это основное достижение разработчиков. Реализована поддержка как стандартного MySQL-протокола, так и собственного варианта - через библиотеку libdrizzle и драйвера для большинства популярных языков, включая Perl, PHP, Python и Lua. При желании можно использовать клиентскую библиотеку и без самого сервера: в этом случае ты получишь эффективный асинхронный доступ к любимому MySQL. Поскольку эта же компания разработала и систему Gearman, то в Drizzle есть встроенная поддержка логирования в распределенной среде, нативное кэширование в memcache и даже такие продвинутые возможности, как репликация через системы сообщений типа RabbitMQ (используется в том числе новомодная технология WebSocket). В качестве основного движка хранения данных в Drizzle используется особая версия InnoDB, значительно переработанная и дополненная набором сторонних патчей. Также доступны движки XtraDB и PBXT. Если первые версии Drizzle основывались на MySQL 5.0, то теперь от оригинальной СУБД осталось немногое. Это почти полностью переписанный код с минимальной оглядкой на бывших родственников. На данный момент разработка Drizzle пребывает в активном состоянии, и к весне планируется первый стабильный релиз.

NoSQL-тренд

Ты наверняка знаешь о новомодном . По сути, это отказ от традиционного сервера базы данных с его таблицами и SQL-запросами и уход к самой простой схеме хранения данных "ключ-значение" (key-value). Для реализации последнего часто используются продвинутые типы данных вроде списков/хэшей (в Redis) или, например, формата JSON (в MongoDB). Но что мешает скрестить удава и ежа, используя, с одной стороны, всю мощь и годами отработанную технологию баз данных и их движков, а с другой - упрощенный протокол и отказ от громоздкой прослойки в виде обработки SQL-языка запросов? Суровым наследникам самураев не помешало ничего: японские парни из Yoshinori Matsunobu сделали плагин HandlerSocket, превращающий стандартный движок InnoDB в продвинутое NoSQL-хранилище, не мешая при этом работе обычного SQL. Скорость работы впечатляет: до 750 000 операций в секунду! Неудивительно, что компания Percona сразу же взяла на вооружение этот плагин, включив его в свои сборки сервера. Круто! Но, с другой стороны, как еще если не костылем можно назвать решение, которое имитирует то, что у нормальной БД типа Drizzle реализовано прямо из коробки в силу внутренней архитектуры?

Делаем выводы

Если ты обеспокоен развитием MySQL, тебе не нравится политика Oracle и ты справедливо опасаешься, что завтра тебя обяжут платить за функционал, который еще вчера был бесплатен, посмотри вокруг. Сообщество отреагировало на покупку MySQL как на начало заката технологии, некогда выведшей современный веб на недостижимую высоту благодаря стеку LAMP (Linux-Apache-MySQL-PHP). Ключевые разработчики начали развитие собственных форков, некоторые из которых уже сейчас на голову превосходят старый MySQL. За ними стоят многие знаковые фигуры и открытое сообщество. Сделав все по уму, разработчики умудрились оставить 100% внешней совместимости с приложениями и протоколами. Поэтому все желающие поставить новый сервер не окажутся у разбитого корыта: данные сохранятся, а приложения не придется переписывать. Многие вообще не заметят разницы, кроме возросшей скорости работы и надежности.

Уже сейчас ты можешь заменить свой сервер баз данных, так что имеющиеся приложения даже не почувствуют разницы, получив при этом гораздо большую скорость работы, надежность и массу недоступных в оригинальном мускуле фишек. MariaDB с набором движков - отличный вариант для старта. Ну а если ты задумал грандиозный проект с большим количеством серверов и гигабайтами данных, посмотри на Drizzle. Как программный продукт и как сервер баз данных он является очень перспективной разработкой, которая обязательно выстрелит уже в этом году. Если же хочется стабильности и поддержки самыми лучшими специалистами по базам данных - не бойся отвернуться от Oracle и пойти к Perconа. Ребята раздают бесплатно свою версию СУБД - исправляя, насколько это возможно, баги и добавляя фичи для увеличения производительности оригинального MySQL, не нарушая при этом совместимости. Ты все еще сидишь на стареньком мускуле? Тогда мы идем к тебе!

Оригинальная версия MySQL была разработана фино-шведской компанией MySQL AB, которую основали Джвид Ахмарк, Аллан Ларссон и Майкл Монти. Первая версия MySQL появилась в 1995 году. Изначально она предназначалась для личного пользования, но спустя несколько лет превратилась в базу данных корпоративного уровня.

В январе 2008 Sun Microsystems приобрела MySQL AB за 1 миллиард долларов. Вскоре после этого, Oracle купила Sun Microsystems с разрешения Европейской комиссии, которая изначально опасалась, что такое решение повредить свободному проекту MySQL, поскольку он был прямым конкурентом СУБД Oracle. Из-за недоверия к стратегии развития MySQL был создан форк под названием MariaDB.

Шли годы и за это время MariaDB начала использоваться во многих дистрибутивах Linux по умолчанию. Она используется для обеспечения работы большинства сайтов интернета. В этой статье мы попытаемся выполнить сравнение MySQL vs MariaDB и разобраться почему вторая лучше первой и когда нужна именно оригинальная MySQL.

В отличие от многих других проектов с открытым исходным кодом полученных от Sun Microsystems, Oracle до сих пор развивает MySQL. После того как много разработчиков подали в отставку, были наняты новые люди. Но разработка новых версий MySQL ведется закрыто. Исходный код доступен только команде разработчиков и выгружается в публичный репозиторий только после завершения работы. Все решения обсуждаются внутри компании

MariaDB разрабатывается полностью открыто, все решения и новые идеи касаемо развития могут свободно обсуждаться в email рассылке, а также системе сообщений об ошибках. Помочь в разработке MariaDB очень легко, патчи от пользователей принимаются также, как и от разработчиков. В целом MariaDB развивается более активно.

Из-за раскрученности бренда у MySQL все еще есть большое сообщество, но все больше и больше проектов переходят на MariaDB. Такие известные корпоративные дистрибутивы, как REHL 7 и SLES 12 уже используют MariaDB, а это значит, что в сражении MySQL или MariaDB победит последняя.

2. Частота релизов

Политика Oracle - выпускать обновления безопасности для всех своих продуктов каждые три месяца. Но выход новой версии MySQL запланирован каждые два месяца. Это часто приводит к тому, что обновления продукта и обновления безопасности не синхронизируются.

Разработчики не успевают закрыть все сообщения об ошибках и уязвимости, в результате чего база данных может оставаться уязвимой несколько месяцев. Еще одна проблема MySQL в том, что обновления безопасности очень расплывчаты. Если администратор не может просто обновить программу до новой версии, то создать бэкпорт сложно.

MariaDB выпускает обновления программы и обновления безопасности синхронизировано, поэтому все ошибки успевают исправить. Все исправленные CVE задокументированы и любой пользователь может узнать что изменилось в новой версии.

4. Возможности и функциональность

В целом MariaDB развивается быстрее и имеет больше возможностей. Эти возможности касаются оптимизации, улучшения работы с памятью, и много другого. Обычно, со временем, эти возможности переносятся в MySQL. Например, та же поддержка GIS появилась в MariaDB раньше, чем в MySQL. Среди прочего MariaDB имеет множество улучшений производительности Inodb, MyISAM и движка обработки запросов, поддерживает GIS, ликвидацию таблиц, виртуальные и динамические колонки, репликацию с несколькими источниками, роли и многое другое.

Но у MariaDB есть и свои минусы, она не поддерживает некоторые возможности, которые есть в MySQL. А именно, MariaDB несовместима с синтаксисом JSON MySQL, не поддерживаются плагины ngram, MeCab, MySQL X, а также пространства таблиц, которые позволяют присваивать данные нескольким таблицам одновременно. Но разработчики активно работают над исправлением недостатков.

Для тех, кого интересуют кластеры MySQL будет интересно то, что в MariaDB используется новая система репликации Galera, прием ее работа отличается от стандартного master-salve. Galera разрабатывается с 2007 года, но она никогда не включалась в официальную версию MySQL.

5. Поддержка движков хранения данных

Система управления базами данных MariaDB поддерживает намного больше движков для хранения данных. Большинство этих движков доступны в качестве плагинов для MySQL, но в MariaDB они включены в официальный релиз. Это означает, что движки правильно интегрированы и будут хорошо работать. Вот список поддерживаемых движков:

  • Aria;
  • XtraDB - улучшенная версия InnoDB;
  • FederatedX - улучшенная версия Federated;
  • OQGRAPH;
  • SphinxSE;
  • IBMDB2I;
  • TokuDB;
  • Cassandra;
  • CONNECT;
  • SEQUENCE;
  • Spider;
  • ColumnStore;
  • MySIAM.

Напомню, что оригинальная MySQL поддерживает по умолчанию только три типа таблиц - Aria, MySIAM и InnoDB. Это важный аспект в выборе MySQL или MariaDB.

6. Имя и нумерация версий

Эти отличия MariaDB от MySQL не столь важны, но, возможно, они будут кому-то интересными. Имя MySQL было дано в честь первой дочери одного из разработчиков - Майкл Монти, ее зовут My. Разработку MariaDB продолжил тот же человек и на этот раз программа была названа в честь его младшей дочери - Марии.

Что касается версий, то изначально, до версии 5.6 версии MariaDB нумеровались синхронно до версий MySQL, на которых они были основаны. Но когда накопилось достаточно изменений и за основу стал браться код MariaDB номера версий было принято поменять на 10. С того момента нумерация MariaDB выполняется только так.

Выводы

В этой статье мы сделали сравнение MySQL vs MariaDB. По большинству параметров MariaDB намного лучше, чем MySQL, поэтому не зря большинство дистрибутивов Linux теперь используют ее по умолчанию в своих репозиториях. Оригинальная версия может понадобиться только в очень редких случаях.

СУБД является ответвлением от MySQL и развивается компанией Monty Program Ab, созданной Майклом Видениусом после его ухода из Sun Microsystems. Она включает все основные открытые механизмы хранения, включая дополнительно механизм хранения Maria. Во многих отношениях MariaDB будет работать точно так же, как MySQL: все команды, интерфейсов, библиотек и API-интерфейсы, которые существуют в MySQL, существуют также в MariaDB.

Как сообщают разработчики этой СУБД, они собираются синхронизировать выпуски релизов MariaDB с релизами MySQL.

Название MariaDB происходит от имени младшей дочери Майкла Видениуса Марии.

История

Платформы

Windows amd64 (64-bit), Windows x86 (32-bit), Solaris 10 x86, Solaris 11 x86, Linux amd64 (64-bit), Linux x86, CentOS 5 / RedHat 5 amd64 (64-bit), CentOS 5 / RedHat 5 x86 (32-bit).

Редакции

Системы хранения

    Aria – новый механизм хранения MySQL и MariaDB (ранее назывался Maria). Система хранения является альтернативой MyISAM, но более устойчива к краху. Благодаря ведению лога операций, в случае краха, производится восстановление всех таблиц до состояния перед выполнением оператора или до состояния перед выполнением последней команды LOCK TABLES. Также поддерживается возможность восстановления состояния из любой точки в логе операций (включая поддержку CREATE/DROP/RENAME/TRUNCATE). В работе осуществляется лучшее кэширование, чем в MyISAM, а также более развит параллелизм при множественных вставках. Все внутренние таблицы MariaDB используют данный механизм хранения. Разрабатывался с 2007 года.

    MyISAM - одна из основных систем хранения данных в СУБД. Она основывается на коде ISAM и обладает в сравнении с ним рядом полезных дополнений. Таблицы MyISAM прекрасно подходят для использования в WWW и других средах, где преобладают запросы на чтение. Используется как механизм хранения по умолчанию.

    XtraDB - представляет собой расширенную версию механизма хранения InnoDB, направленную на более эффективную масштабируемость современного оборудования и включающую, в том числе множество функций, полезных в условиях высокой производительности. В XtraDB улучшен механизм работы с памятью, улучшена работа подсистемы ввода/вывода InnoDB, добавлена поддержка нескольких потоков чтения и записи, поддержка управления пропускной способностью, реализация упреждающей выборкой данных (read-ahead), адаптивная установка контрольных точек (adaptive checkpointing). Расширены возможности по масштабированию для больших проектов, система организации блокировок адаптирована для работы на системах с большим числом CPU, добавлены дополнительные возможности для накопления и анализа статистики. Механизм является полностью обратно совместимым, и поэтому может использоваться в качестве заменителей стандартного InnoDB. Система хранения XtraDB базируется на основе Oracle / Innobase InnoDB плагине версии 1.0.3, с дополнительными расширениями.

    PBXT (PrimeBase XT) – система хранения разработанная с нуля и поддерживающая мультиверсионный метод организации хранения данных MVCC (multi-version concurrency control), позволяющий избавиться от блокировок при выполнении операций чтения. PBXT поддерживает ACID-совместимые транзакции, быстрый откат транзакций и восстановление после некорректного завершения работы сервера. Имеются средства для обеспечения ссылочной целостности данных, поддержка определения внешних ключей (foreign key), каскадных обновлений и удалений данных. Поддерживается возможность прямого потокового ввода и вывода бинарных данных (BLOB) в БД.

    FederatedX – система хранения, позволяющая организовать обращение к удаленным таблицам как к локальным. Имеется поддержка транзакций, одновременной установки нескольких соединений к удаленной СУБД, использования операций "LIMIT".

Лицензирование

MariaDB доступно в соответствии с условиями лицензии GPL v2 , как и MySQL. Лицензия GPL распространяется только на код, предоставляемый для других сторон. Для внутреннего использования в рамках организации такой код является абсолютно бесплатным и не подпадают под действие каких-либо условий. Подключение к удаленной службе, которая работает в MariaDB (или каких-либо других GPL программных обеспечениях) в фоновом режиме, также является бесплатным.

После полутора лет разработки и пяти предварительных выпусков сформирован первый стабильный релиз новой ветки СУБД MariaDB 10.2, в рамках которой развивается ответвление от MySQL, сохраняющее обратную совместимость и отличающееся интеграцией дополнительных движков хранения и расширенных возможностей. Развитие MariaDB курирует независимая организация MariaDB Foundation в соответствии с полностью открытым и прозрачным процессом разработки, не зависящим от отдельных вендоров. MariaDB поставляется вместо MySQL во многих дистрибутивах Linux (RHEL 7, SUSE 12, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian 9) и внедрён в таких крупных проектах, как Wikipedia, Google Cloud SQL и Nimbuzz.

Ключевые улучшения MariaDB 10.2:

  • Добавлена экспериментальная поддержка движка хранения MyRocks, разработанного Facebook на базе системы хранения RocksDB, оптимизированной для Flash-накопителей. В хранилище MyRocks применяются страницы данных плавающего размера, позволяющие избежать выравнивания по фиксированной границе блока, и модель хранения данных в форме лога (Log Structured Merge Trees), допускающая только дополнение (чистка производится сборщиком мусора). В процессе выполнение запросов в несколько раз сокращено число операций последовательного чтения/записи, что привело к увеличению производительности по сравнению с InnoDB на 20-30% на SDD и до 6 раз на НЖМД при нагрузке с большим числом операций случайной записи. Кроме того, MyRocks позволяет на 50% сократить размер БД по сравнению со сжатым хранилищем InnoDB и в 3.5 раза по сравнению с InnoDB без применения сжатия. Из недостатков MyRocks можно отметить отсутствие поддержки внешних ключей и полнотекстовых индексов;
  • Добавлена поддержка оконных функций, задаваемых ключевым словом OVER и позволяющих совершить вычисление над набором строк, связанных с текущей строкой. По аналогии с агрегатными функциями оконные функции позволяют обратиться к другим строкам в процессе обработки результата запроса, но в отличие от агрегатных функций они не группируют результат в одну строку;
  • Поддержка общих табличных выражений (выражение «WITH») и рекурсивных общих табличных выражений («WITH RECURSIVE»). Секцию WITH можно использовать для определения подзапросов как локальных временных таблиц, на которые можно много раз ссылаться в запросе. «WITH RECURSIVE» позволяет обращаться к собственному результату, например, можно организовать обход дерева в процессе выполнении запроса;
  • Добавлено выражение «CONSTRAINT… CHECK» в блоке «CREATE TABLE» для задания ограничений столбца;
  • Реализована возможность указания выражений в блоке DEFAULT, например «b int DEFAULT (a+1)». Обеспечена поддержка указания значений DEFAULT для полей BLOB и TEXT;
  • Хранилище InnoDB обновлено до выпуска из состава MySQL 5.7.18 и задействовано по умолчанию (ранее по умолчанию предлагалось ответвление от InnoDB — XtraDB, смысл использования которого потерялся после того, как в InnoDB реализовали большинство основных возможностей XtraDB). В InnoDB добавлена поддержка пространственных индексов (spatial index);
  • Добавлено выражение «SHOW CREATE USER», показывающее полное выражение «CREATE USER», использованное для создания указанного пользователя;
  • Для выражения «CREATE USER» реализованы опции для ограничения потребления ресурсов и настройки tls/ssl. Например, теперь можно ограничить максимальное число запросов или соединений в час;
  • Представлено новое выражение «ALTER USER», позволяющее внести изменения в учётную запись существующего пользователя;
  • Сняты многие ограничения для виртуально вычисляемых столбцов;
  • Добавлена поддержка выражения «EXECUTE IMMEDIATE» для запуска динамического SQL-выражения, созданного на лету;
  • В оператор PREPARE добавлена возможность использования большинства выражений;
  • Добавлены функции для работы с данными в формате JSON;
  • Добавлен плагин аутентификации, использующий алгоритм ed25519 для хранения паролей;
  • В состав сборок для Windows, CentOS, RHEL и Fedora добавлен плагин для расшифровки ключей, используемых в Amazon Web Services (AWS) Key Management Service (KMS), для их последующего использования для шифрования данных в БД;
  • Появилась возможность привязки нескольких разных триггеров к одному событию;
  • Добавлена поддержка отложенной репликации, при которой состояние slave-сервера на заданный промежуток времени отстаёт от master-сервера;
  • Переработана реализация выражения ANALYZE TABLE, которое теперь не блокирует таблицу во время сбора статистики;
  • Библиотека wsrep, используемая для организации синхронной multi-master (active-active) репликации Galera, обновлена до выпуска 25.3.20;
  • Обеспечено формирование пакетов для Ubuntu 17.04;
  • В mysqldump добавлена опция «—add-drop-trigger», воспроизводящая функциональность MySQL 5.6 по добавлению в SQL-дамп выражения для удаления триггера перед его созданием;
  • Добавлен скрипт mysqlbinlog для организации непрерывного бэкапа бинарного лога;
  • Добавлена поддержка OpenSSL 1.1 и LibreSSL;
  • Добавлены переменные innodb_deadlock_detect и innodb_stats_include_delete_marked для отключения система определения взаимных блокировок и учёта записей, помеченных как удалённые, при расчёте статистики;
  • Добавлена переменная read_binlog_speed_limit, задающая ограничение скорости с которой slave-сервер читает бинарный лог master-сервера;
  • Удалена старая клиентская библиотека, поставляемая под лицензией GPL, на смену которой пришла новая библиотека, имеющая лицензию LGPL.

Начиная с октября 2011 года мы проводим апгрейд наших серверов баз данных, с целью замены MySQL на новую версию: MariaDB.

Что такое MariaDB?

MariaDB - это альтернативная MySQL СУБД, которую разрабатывает автор MySQL Michael "Monty" Widenius. Основная цель проекта MariaDB - создание полностью бинарно совместимой с оригинальной MySQL версии СУБД, которая при этом будет иметь значительное количество улучшений в коде, влияющих на производительность. MariaDB разрабатывается как drop-in замена для MySQL, полностью имитируя поведение MySQL.

Почему вообще Monty решил сделать клон своего же детища? Дело в том, что права на MySQL принадлежат компании MySQL AB, которую сначала купили Sun Microsystems, а затем уже Sun продались корпорации Oracle. В итоге Monty решил уйти из Oracle и сделать, в некотором смысле, MySQL "на стероидах".

MariaDB: что в ней есть нового?

MariaDB версий 5.1, 5.2 и 5.3 (beta) базируется на коде MySQL 5.1, но с рядом нововведений и улучшений.

Во-первых, это ряд новых движков (database engine) для хранения данных. А именно: Aria - альтернатива таблицам MyISAM, более быстрая и устойчивая к сбоям. Таблицы Aria используются в MariaDB для внутренних нужд, в частности все temporary tables работают именно на движке Aria, за счет чего в ряде случаев получилось добиться значительно большей производительности на сложных запросах. Кроме того, таблицы InnoDB заменены на XtraDB (альтернатива InnoDB от компании Percona), так же более быстрые, чем оригинал, и более устойчиывые к сбоям.

Кроме того, в MariaDB переписана порядка трети оригинального кода MySQL, благодаря чему удалось избавиться от многих узких мест MySQL, улучшить работу на многопроцессорных системах и конечно же повысить стабильность.

Так же в MariaDB появился новый способ доступа к данным InnoDB - HandlerSocket. HandlerSocket в каком-то смысле является альтернативой memcached. Через интерфейс HandlerSocket с данными в таблицах InnoDB (XtraDB) можно работать как с набором данных "ключ-значение", где в качестве ключа выступает любой из индексов, созданных по любой из InnoDB-таблиц. По скорости работы HandlerSocket практически не уступает memcached и некоторые источники даже сообщают, что им удалось добиться большей, чем с memcached, производительности.

Сравнительные тесты

Для того, чтобы понять, стоит ли овчинка выделки и действительно ли проделанные в MariaDB оптимизации заметны на глаз, мы провели ряд сравнительных тестов. Тесты проводились на сервере в конфигурации HP ProLiant DL160 G6, 2x E5520 Xeon QC CPU (16 cores), 20 Gb RAM, H/W RAID 10: 4x 300 Gb SAS 15k RPM. В качестве теста использовалась утилита mysqlslap следующим образом:

Mysqlslap --auto-generate-sql --concurrency=$i --number-of-queries=$(($i*500)) --iterations=3

то есть мы в цикле меняем переменную $i от 10 до 200, эмулируя при этом одновременную работу от 10 до 200 клиентов, каждый из которых делает по 500 запросов к базе данных. Далее мы замеряем общее время выполнения тестов. Тесты проводились на MariaDB версии 5.1 в сравнении с MySQL тоже версии 5.1

Таблицы MyISAM

Ниже приведены графики замеров производительности MySQL (верхний график) и MariaDB (нижний) на таблицах MyISAM. По оси X изображено количество одновременно работающих клиентов, по Y - время в секундах, затраченное на тест.

Как интерпретировать результаты: чем ниже точка на графике, тем быстрее отработал тест. Судя по графику, уже начиная с 60 одновременно работающих клиентов, MariaDB отработала тесты почти в 1,5 раза быстрее, чем MySQL.

Таблицы InnoDB

Здесь ситуация аналогичная: MariaDB победила, но только перевес здесь гораздо более значительный: производительность InnoDB в MySQL в разы хуже, чем производительность XtraDB в MariaDB.

Следует так же отметить, что данный тест замерял производительность работы только с одной таблицей, поэтому роста производительности на JOIN"ах, и особенно на запросах, выполнение которых делается при помощи создания временных таблиц, на этих графиках не видно. Реально при переходе на MariaDB даже для таблиц MyISAM производительность БД может вырасти в несколько раз.

Обращаем ваше внимание, что версия 5.1 у MariaDB, на которой проводились приведенные тесты, - это первоначальная версия, содержащая минимальный набор улучшений. В реальности мы используем на серверах MariaDB 5.2, а со временем планируем перейти на MariaDB 5.3, где улучшений и оптимизаций еще больше.