MongoDB: что это за СУБД, плюсы, минусы, подводные камни
Разбираемся с NoSQL-СУБД MongoDB: почему она так популярна, чем отличается от других, кому и когда её использовать.
Иллюстрация: Grzegorz Walczak / Unsplash / Iswanto / Rawpixel / Annie для Skillbox Media
По рейтингу портала DB-Engines, MongoDB входит в пятёрку самых востребованных СУБД в мире, интересно, ожидали ли её авторы Дуайт Мерриман, Элиот Горовиц и Кевин Райан такого успеха в 2007 году, когда приступали к разработке?
Скорее всего, да — ведь MongoDB обладает целым рядом внушительных достоинств при очень небольшом числе довольно несущественных недостатков. Давайте рассмотрим и то и другое по порядку.
Что такое MongoDB, зачем её создали и где её скачать
MongoDB — это документоориентированная нереляционная СУБД, которая распространяется по лицензии SSPL и имеет открытый исходный код.
Её создатели были довольно авторитетными в мире IT разработчиками. В частности, именно они основали в начале 2000-х DoubleClick — одну из первых компаний, специализирующихся на интернет-рекламе, с фантастической по тем временам скоростью показа до 400 000 объявлений в секунду.
В 2005 году Мерриман с коллегами выгодно продали её Google и смогли вплотную приступить к давно волновавшей их проблеме. Существовавшие в середине нулевых базы данных не имели чёткой структуры, хранившиеся в них информационные фрагменты не были связаны друг с другом, постоянно возникали проблемы с масштабируемостью и гибкостью. Так возникла фирма 10gen, позже переименованная в честь своего флагманского продукта в MongoDB Inc.
За эти годы вышло несколько версий MongoDB. Установочные файлы и инструменты для работы с самой свежей из них, MongoDB 6.0.5, можно бесплатно скачать с официального сайта компании.
Как устроены данные в MongoDB
В обычных реляционных базах данных информация хранится в виде взаимосвязанных таблиц. Их структура жёстко задана, и поменять её непросто. Строки каждой таблицы имеют одинаковый набор полей, данные обрабатывают с помощью запросов на языке SQL.
Эти базы наглядны, но не всегда удобны — например, в тех случаях, когда вам нужно хранить информацию без определённой структуры: представить её в виде двумерных таблиц нельзя.
В MongoDB всё устроено немного по-другому. Базы состоят из коллекций и документов — иерархических структур, содержащих пары «ключ — значение» (поля).
Если проводить аналогии с реляционной базой, коллекции при таком способе хранения соответствуют таблицам, а документы — строкам.
Информация отформатирована в BSON — двоичной кодировке JSON-подобных документов. Это позволяет поддерживать данные типа Date и двоичных файлов, что невозможно в JSON.
У документов нет строгой структуры. Они могут содержать разные наборы полей, причём различающиеся как по типу, так и по количеству. Например, документ может выглядеть так:
Значениями могут быть даже другие документы — их называют встроенными.
Подобно тому, как у строк в реляционных БД есть первичный ключ, у каждого документа в MongoDB есть уникальный идентификатор (в наших примерах это _id). Он формируется автоматически или задаётся пользователем.
Например, все эти документы принадлежат одной коллекции smartphones:
Перед добавлением данных необязательно создавать коллекцию, документ можно делать сразу.
Чем MongoDB отличается от конкурентов
Перечислим главные особенности, выделяющие MongoDB среди прочих систем:
- Это кросс-платформенная СУБД, работающая в ОС Windows, Linux и macOS. Она написана на С++.
- Базы хранятся в виде наборов из связанных между собой экземпляров (реплик) на нескольких серверах (узлах). Оригинальный экземпляр — ключевой, в нём выполняются операции. Остальные — вторичные, в них копируются записи из первичного экземпляра. Если на ключевом сервере случилась неисправность или ведутся технические работы, то главной становится одна из копий. Когда сервер заработает в штатном режиме, всё возвратится на свои места. Это называется репликацией. Так обеспечивается доступность данных и их резервирование.
- Чтобы увеличить пропускную способность СУБД, при работе с большими данными применяется шардирование — базы разбиваются на части (шарды) и размещаются на разных серверах. Это позволяет сбалансировать нагрузку на них.
- Размер документов ограничен — он не может быть больше 16 МБ. Если нужно хранить больший объём информации, применяется технология GridFS. Система делится на две коллекции: в первой хранятся имена файлов и метаданные, а во второй — данные, разбитые на небольшие файлы.
- В MongoDB есть система специальных запросов: данные можно искать по полям и диапазонам, поддерживаются регулярные выражения, можно возвращать пользовательские функции.
- Чтобы ускорить доступ к данным и поиск по базе, поддерживается индексация.
- Информация закодирована в формате BSON — это помогает быстро искать нужные данные.
- Есть собственный язык запросов. В нём не предусмотрены сложные JOIN-соединения.
Преимущества и недостатки MongoDB
Начнём с плюсов, которые особенно актуальны при работе с большими объёмами данных:
- Гибкая система хранения информации: в приложениях не обязательно преобразовывать объекты в элементы таблиц, не нужно пересоздавать схему базы при изменении структуры данных, например при добавлении нового поля. В документах хранится информация разных типов, что важно при работе с большими данными, которые имеют разную структуру и взяты из разных источников.
- Базы легко масштабируются.
- Большинство языков имеют специальные инструменты для работы с Mongo — например, в JavaScript это Mongoose.
- Благодаря индексации, системе запросов и другим особенностям можно быстро искать, читать и записывать данные в базах.
- Базы MongoDB могут работать сразу на нескольких серверах: сегментирование позволяет распределять нагрузку, а репликация — создавать копии. Поэтому система работает быстро и без перебоев.
Впрочем, есть и недостатки:
- В базах нет хранимых процедур, триггеров и внешних ключей, поэтому невозможно полностью автоматизировать работу.
- Нет полного соответствия ACID.
- Есть сложности при работе с транзакциями, хотя разработчики стараются это исправить, и в скором времени это у них должно получиться.
В каких случаях использовать MongoDB
MongoDB используется в веб-программировании, big data и аналитике, где приходится работать с большим количеством не связанных друг с другом фрагментов информации.
Также её нередко применяют в стартапах, где ещё нет чётко определённой структуры хранения данных и могут потребоваться постоянные её изменения.
Она будет хорошим решением и там, где требуются гибкие и масштабируемые базы, например:
- в каталогах товаров электронной коммерции;
- при хранении событий в системе (логировании);
- для записи информации с датчиков мониторинга;
- в управлении контентом;
- в играх;
- в платёжных системах;
- в приложениях интернета вещей;
- в мобильных приложениях;
- для кэширования;
- в приложения, обрабатывающих временные ряды;
- и ещё много где.
Базы MongoDB используют для хранения внутренних данных многие IT-гиганты и крупные медиа, например IBM, Zendesk, Forbes, Google и другие.
Выводы
MongoDB — это NoSQL-система, которая работает не с таблицами, а с коллекциями и документами. Её разворачивают на разных платформах.
СУБД пригодна для использования приложениями, обрабатывающими данные без жёсткой структуры и связей. Базы MongoDB гибкие и масштабируемые, они обеспечивают быструю и надёжную работу программ.