Почему именно эта пара, спросите Вы? Потому что популярность open source решения в области баз данных на протяжении нескольких последних лет растет, в то время как коммерческие решения показывают спад. Потому что выбранные решения представляют собой разные типы баз данных, а еще потому что несколько дней назад мой брат, начинающий разработчик, спросил меня об этом.
Что ж, вопрос не простой, потому что многогранный. Попробуем разобраться.
Автор одного из докладов на Highload++ 2016 предлагает рассмотреть перечень вопросов, оценив ответы на которые можно склониться в пользу того или иного выбора базы данных для своего проекта.
- Опыт и предпочтения команды. Это достаточно выжный момент, поскольку для многих решений подхоит как MySQL так и MongoDB. Однако если Ваша команда все время работала с MySQL, например, то ресурсы, которые потребуются на переучивание, буудут потрачены впустую, поскольку не принесут явной выгоды.
- Подход к разработке и жизненный цикл приложения. Сейчас в тренде быстрый подход к разработке с дальнейшим постоянным внесением изменений. И конечно же mongoDB выглядит перспективнее в этом свете. Но нужно понимать, что у данных всегда есть схема, вопрос только в том, где она реализуется.
- Модель данных. Казалось бы mongoDB со свойе простой структурой должна иметь преимущество и в этом вопросе. Но MySQL – реляционная база данных, позволяющая легко отображать связи между таблицами, нормализировать данные, что в итоге позволяет выполнять изменения только в одном месте, в то время как в mongoDB придется вносить изменения в кучу документов. Вопрос в том, что данные не всегда удается уложить в реляционный вид или это не так нужно. В качестве подтверждения этого факта можно привести примеры, когда в ячейках таблицы хранится JSON или XML текст.
- Транзакции и консистентность. Здесь надежнее выглядит MySQL, который работает с транзакциями и позволяет гибко управлять ими. Документация MongoDB говорит о поддержке ACID-транзакций, но с ограничением. На деле это выглядит так: mongoDb вносит изменения в файл. Операция атомарна. Но если нужно внести изменения в несколько файлов и во время операции произошел сбой, то Вы никак не защищены от того, что часть файлов будет изменена, а часть – нет. Консистентность также делается на уровне документов.
- Производительность. Достаточно сложно сравнить, поскольку в зависимости от схемы базы данных будет меняться дизайн приложения. Однако следуя правилу «чем приложение проще масштабируется, тем меньше внимания уделяется его эффективности», можно утверждать, что MySQL будет более экономен к ресурсам при одинаковых объемах данных.
- Масштабируемость. Как было сказано в предыдущем пункте, MongoDB изначально фокусировался на масштабировании, что, конечно же, сказалось на качестве и удобстве использования, в то время как для MySQL – это «вынужденная мера» требующая особого внимания разработчиков.
- Администрирование. MySQL имеет богатство решений и гибкость. Это может быть как плюсом, так и минусом, поскольку разнообразие вызывает трудности. В mongoDB есть ориентация на стандартизацию, что конечно же минимизирует администрирование.
Подводя итог, можно сказать, что однозначного выбора в пользу той или иной БД нет. Нужна оценка каждого конкретного случая с учетом особенности архитектуры проекта и команды, которая работает над ним. Возможно даже применение гибридных решений, однако помните, что этим не стоит увлекаться, поскольку в погоне за использованием лучших сторон каждого из продуктов может быть потеряна простота разработки решения.
Какую бы базу данных Вы не выбрали, наша команда профессионалов, может установить, настроить отказоустойчивое решение и предложит поддержку, [email protected]