Сравнение MySQL vs MariaDB. Время для субд: mariadb vs проверенная временем mysql Важная вещь - совместимость

MySQL стал собственностью Oracle, есть ли альтернативы и как быстро движение вперед?.. Вроде как обобщающего обзорчика «who is who?» еще не было. Итак, обзорчик для тех кто «не в теме»

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

Майкл Видениус (Michael Widenius), основатель MySQL и основатель компании MySQL AB (которую и поглотила Sun, которую и поглотила Oracle)
Петр Зайцев - эксперт по производительности MySQL, бывший тимлидер группы High Perfomance в MySQL Inc, ведущий блога MySQLPerformanceBlog.com

Итак, какие существуют альтернативы?

Percona server - это сборка MySQL (от Петра Зайцева и ко) с включенным по умолчанию XtraDB storage engine. Отличается от MySQL+InnoDB plugin лучшей производительностью/масштабируемостью, особенно на современных многоядерных серверах. Также улучшена функциональность - больше всякой полезной для оптимизации статистики и пр. Собирается в вариантах базирующихся на MySQL 5.0 и 5.1. Полностью совместим с таблицами innodb, то есть можно переходить от innodb к xtradb и обратно без проблем (если не использовать некоторые специфичные для xtradb функции, типа меньшего размера страницы).

Хранилище XtraDB основано на коде InnoDB-plugin, полностью совместимо с ним, но отличающийся заметно более высокой производительностью, благодаря интеграции патчей от компаний Google и Percona. В частности, в XtraDB улучшен механизм работы с памятью, улучшена работа подсистемы ввода/вывода InnoDB, добавлена поддержка нескольких потоков чтения и записи, поддержка управления пропускной способностью, реализация упреждающей выборкой данных (read-ahead), адаптивная установка контрольных точек (adaptive checkpointing), расширены возможности по масштабированию для больших проектов, система организации блокировок адаптирована для работы на системах с большим числом CPU, добавлены дополнительные возможности для накопления и анализа статистик

MariaDB - сборка от Монти, синхронизирована с кодовой базой MySQL и полностью с ней совместим, т.е. может выступать в качестве прозрачной замены MySQL 5.1, обладая при этом рядом расширенных функций, включая оптимизации производительности и поставляясь с набором дополнительных движков хранилищ:

  • Новые хранилища данных:
    • Aria (ранее Maria) - основанное на MyISAM высоконадежное хранилище, отличающиеся повышенной устойчивостью и сохранению целостности данных после краха, при полной совместимости с MyISAM
    • OQGRAPH (хранилище для организации сложных графов)
    • Sphinx - хранилище для построения поисковых движков
    • PrimeBase XT - описание на русском
    • В качестве замены InnoDB используется движок XtraDB
    • FederatedX - позволяет организовать обращение к удаленным таблицам как к локальным
  • Патчи MyISAM движка - Сегментированный кэш (при высоких нагрузках дает существенный прирост)
  • Ликвидация таблиц - новый вид оптимизации запросов с использованием JOIN
  • Пул потоков - теперь на одно соединение можно открыть больше одного потока
  • Улучшены

MariaDB - программа для работы с базами данных. Является свободно распространяемым приложением, которое было создано, как альтернатива лицензионного MySQL. По принципу своей работы очень схожа с идентичным продуктом компании Oracle. СУБД поддерживает стандартные функции и форматы: myisam, blackhole, csv. Поддерживает такие же клиентские интерфейсы API, протоколы и структуры, как и MySQL. Все коннекторы (PHP, Perl, Python, Java, .NET, MyODBC, Ruby) отлично взаимодействуют с системой управления БД. Время выполнения запроса значительно меньше, чем у лицензионного аналога. Репликации протекают быстрее и безопаснее. Улучшен асинхронный ввод-вывод для таблиц InnoDB. Поддерживает сегментирование кеша для MyISAM. Это позволяет ускорить работу с MyISAM-таблицами в 4 раза.



- Позволяет работать с различными базами данных.
- Представляет собой систему управления базами хранения данных.
- Поддерживает множество клиентских приложений и API.
- Отлично подключается к большинству коннекторов.
- Позволяет создавать различные базы для хранения информации.
- Механизм хранения Aria позволяет быстрее обрабатывать сложные запросы.
- Поддерживает функцию «Убить все запросы для пользователя».
- Имеет богатый набор улучшенных функций.
- Имеет улучшенный асинхронный ввод-вывод для таблиц MyISAM.
- Поддерживает параллельные репликации.
- Имеет множество оптимизированных параметров.
- Отличное решение для веб-разработчиков, предпочитающих свободно распространяемое ПО.
- Есть поддержка русского языка.


- Процессор с тактовой частотой 1200 MHz или более мощный.
- Оперативная память 256 Мб или больше.
- Свободное место на жёстком диске от 636 Мб.
- Архитектура с разрядностью 32 бит или 64 бит (x86 или x64).
- Операционная система Windows XP, Windows Vista, Windows 7, Windows 8, Windows 10

СУБД: Таблицы сравнения

Название программы На русском Дистрибутивы Инсталлятор Популярность Размер Индекс
★ ★ ★ ★ ★ 286.7 Мб 100
★ ★ ★ ★ ★ 0.5 Мб 97

Вы все еще используете MySQL?
А очень многие уже давно перешли на базу данных MariaDB.
Смотрите какой красивый логотип MariaDB с тюленем.

У MySQL тоже довольно красивый дельфин

Немного истории MariaDB из Википедии .
MariaDB - ответвление СУБД MySQL, разрабатываемое сообществом. Толчком к созданию стала необходимость обеспечения свободного статуса СУБД (под лицензией GPL), в противовес неопределенной политике лицензирования MySQL компанией Oracle.

Ведущий разработчик MariaDB - Майкл Видениус, он же автор оригинальной версии MySQL и основатель компании Monty Program AB.

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

MariaDB разрабатывается как drop-in замена для MySQL, полностью имитируя поведение MySQL (и это действительно так).

MariaDB сейчас перспективный тренд, посмотрите на таблицу сравнения MySQL и MariaDB (особенно ветка 10.х)

Сравнение я взял с официального сайта MariaDB, там вы можете посмотреть подробнее на пункты. Хотя и без этого видно, что MariaDB 10.х явно лидирует.

Сейчас уже многие дистрибутивы Linux устанавливают MariaDB по-умолчанию вместо MySQL и секрет тут прост — МарияДБ поддерживает те же форматы хранения данных, таблицы и даже команды запуска и прочее, т.е. миграция на MariaDB получается легкой и незаметной. В FreeBSD тоже легко и просто провести установку MariaDB.

Например, тип таблиц Aria, оптимизирован для операций вставки в базу (они проходят заметно быстрее чем на MyISAM). Также таблицы Aria используются в MariaDB для внутренних процессов, все temporary tables работают именно на Aria, за счет этого повышается производительность на сложных запросах.

Фразы: сравнение MariaDB и MySQL, что лучше из баз данных?, скорость работы, установка MariaDB

И сейчас встал выбор СУБД для хранения основных данных. Начинал разработку на MySQL, но сейчас не уверен в выборе. Переезд на другую СУБД на данном этапе для меня не составит проблем (использую PDO). далек от ясного понимания что такое «высокие нагрузки» для СУБД. Просто по моим расчетам примерно через год база будет весьма увесистой (см. ниже)

Основной выбор стоит между MySQL, PostgreSQL, MariaDB. Также, возможен, но не приветствуется вариант Microsoft SQL Server на Windows Azure

Ситуация такова:

  1. Сложных запросов к базе нет. Максимум JOIN из двух таблиц
  2. Бо льшая часть запросов - чтение
  3. Есть одна самая важная и «главная» таблица (структура таблицы ниже под спойлером). Таблица будет расти примерно на 10-30 тысяч записей в сутки. Запись данных в эту таблицу - самое главное!
  4. Бо льшая часть запросов на чтение будет как раз к «главной» таблице. По этой таблице будет осуществляться поиск по любому из полей (в крайне редких случаях ~0.5% - по нескольким сразу). Поиск должен осуществляться быстро (не смотря на пункт №3)
  5. К «главной» таблице скорее всего будут добавлены индексы к каждому из полей сразу для двух полей (ownerID и Имя поля т.к. ownerID будет указан во всех запросах). Быстрый поиск будет нужен по любому из полей, но это не столь приоритетная задача. (Или лучше использовать Sphinx?)
  6. Львиная доля запросов (~80%) на чтение к «главной» таблице - простые select"ы по индексам from и personalID с limit = 20. Остальные запросы по любым другим полям по индексам (которых пока нет) ownerID и Имя поля, также с limit = 20
  7. Изменения данных в записях «главной» таблицы будут происходить крайне редко. Никакие записи из таблицы удаляться не будут.
  8. Поддержка транзакций и внешних ключей не обязательна
  9. Нужна возможность репликации данных типа master-slave
  10. Возможность шардинга на уровне СУБД приветствуется
  11. Крайне важна надежность БД (т.е. такой крах, как у MyISAM с ручным восстановлением сразу отпадает)
  12. К «главной» таблице могут добавляться новые поля. Это конечно крайне редкое явление и далеко не самое важное требование, но добавление нового столбца к таблице размером с десяток ГБ для MySQL весьма длительный процесс, а выносить новые поля в отдельную таблицу очень не хочется
  13. Всё это по-началу будет крутиться на таком вот выделенном сервере
  14. Другие таблицы будут расти медленно, и обращения к ним будут достаточно редкими, за них я не переживаю. Часто обновляемые данные у меня крутятся в redis"e
Структура «главной» таблицы CREATE TABLE IF NOT EXISTS `clients` (`id` bigint(11) NOT NULL AUTO_INCREMENT, `personalID` int(11) NOT NULL, `ownerID` int(11) NOT NULL, `fromID` int(11) NOT NULL DEFAULT "4", `fromDomain` varchar(255) NOT NULL, `datetime` datetime NOT NULL, `status` int(11) NOT NULL DEFAULT "0", `paid` tinyint(1) NOT NULL DEFAULT "0", `paymentType` tinyint(4) NOT NULL DEFAULT "1", `wmSum` float NOT NULL DEFAULT "0", `wmCommission` float NOT NULL DEFAULT "20", `sysNumber` varchar(14) NOT NULL, `sysNumberLastUpdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `sysNumberStatus` varchar(250) NOT NULL, `timezone` float NOT NULL, `comment` varchar(500) NOT NULL, `countryID` int(11) NOT NULL, `postIndex` varchar(6) NOT NULL, `region` varchar(500) NOT NULL, `city` varchar(500) NOT NULL, `address` varchar(500) NOT NULL, `fio` varchar(500) NOT NULL, `phone` varchar(15) NOT NULL, `email` varchar(255) NOT NULL, `price` float NOT NULL, `quantity` int(11) NOT NULL DEFAULT "1", `label` varchar(30) NOT NULL, `tag` int(11) NOT NULL, `ip` varchar(15) NOT NULL, `referer` varchar(200) NOT NULL, PRIMARY KEY (`id`), KEY `from` (`ownerID`,`fromID`), KEY `paid` (`paid`), KEY `status` (`status`), KEY `label` (`label`), KEY `sysNumberLastUpdate` (`sysNumberLastUpdate`), KEY `personalID` (`ownerID`,`personalID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

P.S. Желающих отправить меня гуглить прошу даже не отвечать. Найти информацию по сравнению актуальных версий разных СУБД мне не удалось, а изучать возможности, плюсы и минусы PostgreSQL, Microsoft SQL Server и MariaDB для человека, который с ними не работал весьма долгая задача. Да и в MySQL я далеко не эксперт, и подобный крупный проект для меня дело новое, да и возможности MySQL от версии к версии отличаются. Единственное, что я точно знаю, так это то, что таблицы типа MyISAM в MySQL мне точно не подойдут

  • Вопрос задан более трёх лет назад
  • 39797 просмотров

Послужила необходимость обеспечения свободного статуса СУБД (под лицензией GPL), в противовес неопределенной политике лицензирования MySQL компанией Oracle . Продукт распространяется и используется согласно лицензии GNU GPL v.2, GNU LGPL.

Система написана с использованием: C, C++, Perl, Bash. Продукт работает под управлением ОС Linux и UNIX -подобных, Windows .

2014: MariaDB Enterprise 1.0

Развитие 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.1

  • Поддержка шифрования таблиц и логов транзакций, которое позволяет защититься от утечки данных в случае кражи жесткого диска , но бесполезно в ситуации получения контроля над работающей СУБД , например, в результате атаки через подстановку SQL-запроса или взлома системы. При включении шифрования накладные расходы увеличиваются на 3-5%. Ключи шифрования имеет смысл хранить на отдельном защищённом сервере с включением системы ротации ключей, подразумевающей периодическое перешифрование с новым ключом после устаревания текущего ключа. Поддержка шифрования реализована в хранилищах XtraDB и InnoDB. Предлагается несколько схем: шифрование выбранных таблиц, шифрование всех таблиц в БД и шифрование всех таблиц за исключением выбранных. Благодаря шифрованию лога транзакций защита также обеспечивается в системах с репликацией;
  • Включение в базовую поставку технологии синхронной multi-master (active-active) репликации Galera, ранее предлагаемой в рамках отдельного продукта MariaDB Galera Cluster. Galera расширяет возможности СУБД MariaDB средствами синхронной репликации, при которой все узлы всегда содержат актуальные данные, т.е. гарантируется отсутствие потерянных транзакций, так как транзакция фиксируется только после распространения данных по всем узлам. При этом, в рамках транзакции операции выполняются сразу, задержка из-за ожидания подтверждения возникает только при выполнении операции "commit". Репликация выполняется в параллельном режиме, на уровне строк, с передачей только информации об изменениях. Управление принадлежностью узлов кластеру выполняется автоматически, сбойные узлы сразу исключаются из кластера без участия администратора, новые узлы при необходимости можно подключить на лету без дополнительной переконфигурации;
  • Возможность репликации данных c MySQL 5.6 при включении на MySQL поддержки GTID, т.е. MySQL теперь может использоваться в роли master-сервера для MariaDB. Указанная возможность позволяет существенно упростить тестирование в процессе миграции с MySQL на MariaDB;
  • Поддержка сжатия страниц данных для хранилищ InnoDB и XtraDB. От ранее доступного механизма сжатия (row_format=compressed) новый метод отличается возможностью выбора различных алгоритмов сжатия (zlib, lz4, lz0, lzma, bzip2 и snappy) и иной организацией процесса работы с упакованными данными. Если в традиционной реализации в буфере находятся как сжатые, так и ещё не упакованные данные, то новая схема подразумевает нахождение в буфере только распакованных данных - страницы сжимаются перед записью в хранилище и распаковываются после чтения. Новый метод наиболее эффективен при использовании SSD -накопителей или NVM-памяти. Наилучшие результаты наблюдаются при использовании плат FusionIO;
  • Реализована система дефрагментации хранилищ InnoDB, основанная на наработках, предоставленных компанией Facebook . Ранее, при удалении строк из InnoDB они лишь помечались удалёнными и становились доступны для новых записей без фактического освобождения блоков на диске и без возвращения дискового пространства системе. Выполнение "OPTIMIZE TABLE" решает указанную проблему, но путём полного перестроения таблицы с копированием имеющихся данных на новое место, т.е. требует наличия большого объёма свободного дискового пространства. После включения в файле конфигурации поддержки дефрагментации (innodb-defragment=1), выполнение команды "OPTIMIZE TABLE" не приводит к копированию в новые таблицы, а реализуется через механизм перемещения записей;
  • Реализован "оптимистичный" режим параллельной репликации, который значительно упрощён по сравнению с появившимися в MariaDB 10.0 средствами параллельной репликации slave-серверов. В частности, обеспечена возможность параллельного применения к slave-серверу любых операций INSERT/UPDATE/DELETE, даже если они пока не завершены на master-сервере;
  • Возможность проверки степени надёжности задаваемого пароля при помощи плагинов simple_password_check и cracklib_password_check;
  • Внесена порция оптимизаций производительности, позволивших снизить нагрузку на CPU и увеличить эффективность работы на многоядерных системах. Тестирование показало прирост числа обрабатываемых транзакций от 135 до 190% и возможность обработки более миллиона OLTP-операций в секунду;
  • Добавлены команды "EXPLAIN FORMAT=JSON" и "ANALYZE FORMAT=JSON", при которых вывод с оценкой характеристик запроса формируется в формате JSON. Штатный вывод команды ANALYZE теперь походит на вывод EXPLAIN, но включает полученные в результате выполнения запроса данные (число прочитанных строк и т.п.);
  • Средства для пространственной привязки (Spatial Reference) данных геоинформационных систем. Реализация новых функций для работы с пространственными координатами: ST_Boundary, ST_ConvexHull, ST_IsRing, ST_PointOnSurface, ST_Relate;
  • Поддержка выражений "IF EXISTS", "IF NOT EXISTS" и "OR REPLACE" в директивах "CREATE DATABASE", CREATE FUNCTION UDF", CREATE ROLE", CREATE SERVER", CREATE USER", CREATE VIEW", DROP ROLE", DROP USER", CREATE EVENT", "DROP EVENT" CREATE INDEX", "DROP INDEX" CREATE TRIGGER" и "DROP TRIGGER";
  • Поддержка команд SHOW и FLUSH для плагинов, например, "SHOW LOCALES", "SHOW QUERY_RESPONSE_TIME", "FLUSH QUERY_RESPONSE_TIME";
  • Поддержка директивы "SET DEFAULT ROLE", позволяющей определить роль по умолчанию, применяемую ко всем новым соединениям;
  • Поддержка systemd.