Код
#статьи

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.

У документов нет строгой структуры. Они могут содержать разные наборы полей, причём различающиеся как по типу, так и по количеству. Например, документ может выглядеть так:

test> db.smartphones.find()
[
    {
      _id: ObjectId("64084a222063b8732a692d5a"),
      model: 'DEXP G450 One',
      color: 'Blue',
      screen: '5 inch',
      year: '2021'
    }
]

Значениями могут быть даже другие документы — их называют встроенными.

Подобно тому, как у строк в реляционных БД есть первичный ключ, у каждого документа в MongoDB есть уникальный идентификатор (в наших примерах это _id). Он формируется автоматически или задаётся пользователем.

Например, все эти документы принадлежат одной коллекции smartphones:

test> db.smartphones.find()
[
    {
        _id: ObjectId("64084a222063b8732a692d5a"),
        color: 'Blue',
        model: 'DEXP G450 One',
        screen: '5 inch',
        year: '2021'
    },
    {
        _id: ObjectId("DEXP"),
        model: 'DEXP G450 One',
        mpn: '[MZB0CBJRU]',
        material: 'plastic',
        year: 2022
    },
    {
        _id: ObjectId("640f7e114f9f59d9dcda468d"),
        model: 'Xiaomi Redmi Note 10 Pro',
        color: 'Grey',
        screen: {
            diagonal: '6.67 inch',
            resolution: '2400x1080',
            refresh_rate: '120 Hz'
        }
    }
]

Перед добавлением данных необязательно создавать коллекцию, документ можно делать сразу.

Чем 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 гибкие и масштабируемые, они обеспечивают быструю и надёжную работу программ.

Научитесь: Профессия Data Analyst Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована