MongoDB: чем эта база отличается от других

Когда используется MongoDB и чем эта база данных отличается от других? Отвечаем на эти вопросы и разбираемся с особенностями в статье.

664 открытий4К показов
MongoDB: чем эта база отличается от других

MongoDB — это…

Официальный сайт дает следующее определение:

MongoDB — документоориентированная база данных, разработанная для простоты и разработки и масштабирования приложений. 

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

BSON (Binary JSON) — это двоичный формат хранения данных, который используется в MongoDB. Он представляет собой бинарное представление JSON, но с рядом улучшений, которые делают его более эффективным для хранения и обработки данных. В отличие от обычного JSON, BSON поддерживает дополнительные типы данных, такие как даты, массивы байтов, и предоставляет оптимизированное сжатие и более быструю сериализацию.

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

Кроме того, MongoDB поддерживает горизонтальное масштабирование благодаря механизму шардирования — распределения данных по нескольким серверам, что позволяет эффективно управлять большими массивами информации. Она также обладает встроенными механизмами репликации и автоматического восстановления, что обеспечивает высокий уровень доступности данных и отказоустойчивость.

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

Монго поставляют три основных варианта использования своей базы данных:

  1. MongoDB Atlas — полностью управляемый сервис для развертывания MongoDB в облаке;
  2. MongoDB Enterprise — самоуправляемая версия MongoDB на основе подписки;
  3. MongoDB Community — бесплатная, доступная с исходным кодом и самостоятельно управляемая версия MongoDB.

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

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

Посмотрим на примерах, как для такого типа данных будет работать фильтрация.

Пусть у нас есть такая запись:

			{
  "_id": ObjectId("50b72b2f5f1b2c6d28f5f5a1"),
  "name": "Ivan Petrov",
  "email": "Ivan.Petrov@example.com",
  "age": 27,
  "address": {
    "city": "Moscow",
    "state": "MSK",
  },
  "hobbies": ["reading", "hiking", "gaming"]
}

		

Предположим, мы хотим найти всех пользователей, которые живут в городе Moscow. Поле city находится внутри вложенного объекта address, поэтому используем точечную нотацию:

			db.users.find({ "address.city": "Moscow" })
		

Этот запрос вернёт всех пользователей, у которых в поле address.city значение равно "Moscow".

Если нужно найти документы по значениям в массиве, например, у пользователей, которые увлекаются hiking, мы можем отфильтровать по массиву hobbies:

			db.users.find({ "hobbies": "hiking" }) 
		

Можно использовать операторы $gte, $lte и др. для сравнения для фильтрации. Например, чтобы найти всех пользователей старше 25 лет:

			db.users.find({ "age": { $gte: 25 } }) 
		

Здесь $gte означает «больше или равно».

Можно комбинировать несколько условий. Например, если нужно найти всех пользователей, которые живут в городе "Moscow" и старше 25 лет:

			db.users.find({ 
    "address.city": "Moscow", 
    "age": { $gte: 25 } 
})

		

Кратко о преимуществах и недостатках MongoDB

Подведем итог описания базы данных кратким перечнем плюсов и минусов использования MongoDB.

Основные преимущества MongoDB

  • Гибкость и адаптивность под изменяющиеся требования за счет хранения данных в формате BSON;
  • Простота масштабирования;

Основные недостатки MongoDB

  • Ограниченная поддержка сложных транзакций, что особенно ощущается при работе с сильно взаимосвязанными данными;
  • Возможные проблемы с производительностью при неправильной конфигурации.

А какие вообще бывают базы данных?

Базы данных можно разделить на два основных типа: реляционные и нереляционные.

Реляционные БД представляют данные в формате таблиц и используют Structured Query Language (SQL) для управления данными. Примеры таких баз данных: MySQL и PostgreSQL.

Нереляционные базы данных еще называют NoSQL. В отличие от реляционных БД они не привязываются к четко описанной и редкоизменяемой структуре данных. Они предназначены для приложений, где представление данных может меняться.

Существует несколько подтипов NoSQL-баз данных:

  • Документоориентированные БД хранят информацию в формате, который может не соответствовать строгой структуре, например, JSON или BSON. Примеры: MongoDB, CouchDB.
  • В колоночных базах данных информация хранится не по строкам, как в обычных реляционных бд, а по столбцам. Данные каждого столбца сохраняются отдельно, что позволяет быстрее обрабатывать большие объемы данных, особенно когда нужны выборки только по нескольким столбцам. Примеры: Apache Cassandra, HBase.
  • Представление информации в виде пар ключ-значение — простой и быстрый способ хранения данных. Примеры таких БД: Redis, DynamoDB.

Также стоит отметить некоторые специфические типы, например:

  • Базы данных на основе графов, которые используются в приложениях, где важны сложные взаимосвязи между объектами. Примеры: Neo4j, Amazon Neptune, JanusGraph;
  • Базы данных на основе временных рядов оптимизированы для хранения данных, организованных по временным меткам (например, показания датчиков). Примеры: InfluxDB, Prometheus, TimescaleDB;
  • В объектно-ориентированных базах данных данные представляются в виде объектов, как в ООП. Примеры: db4o, ObjectDB.

Сравнительный анализ основных баз данных

Для того что ответить на вопрос, чем именно MongoDB отличается от других БД, сравним ее с самыми популярными представителями остальных типов.

Рассмотрим основные параметры следующих баз данных: MongoDB, MySQL, PostgreSQL, CouchDB, Apache Cassandra, Redis, Neo4j, InfluxDB, db4o.

Для удобства будем рассматривать параметры последовательно и в виде таблицы.

MongoDB: чем эта база отличается от других 1
Первая четверка параметров: «Тип СУБД», «Структура данных», «Язык запросов» и «Модель консистетности». 
  • Типы СУБД мы рассматривали ранее и дополнительного описания этот параметр не требует. 
  • MongoDB, в отличие от остальных рассматриваемых БД, использует структуру данных BSON. Среди прочих NoSQL БД такой вариант выгодно отличается скоростью работы из-за бинарного формата данных. 
  • Язык запросов: в MongoDB запросы формируются через JSON-подобный синтаксис, более естественный для работы с объектами и не требующий сложных объединений данных.
  • Модель консистентности: в реляционных базах строгая консистентность — данные сразу становятся согласованными. MongoDB поддерживает конечную консистентность, что позволяет ей быть более гибкой в распределённых системах, хоть и с временными расхождениями данных.

Следующие на очереди параметры «Скорость записи», «Скорость чтения», «Типы хранения данных» и «Лицензия».

MongoDB: чем эта база отличается от других 2
Параметры: «Скорость записи», «Скорость чтения», «Типы хранения данных» и «Лицензия»

Отмечу, что оценки скорости средние и могут отличатся в зависимости от особенностей конкретной структуры БД и параметров сервера.

  • Скорость записи. MongoDB оптимизирована для высокой скорости записи благодаря поддержке горизонтального масштабирования и асинхронной записи. Это особенно эффективно при работе с большими объёмами данных. Реляционные базы данных (например, MySQL, PostgreSQL) могут быть медленнее из-за строгих транзакционных гарантий.
  • Скорость чтения. В MongoDB чтение данных может быть быстрее при распределении данных по шардированным кластерам, хотя это зависит от настроек индексов и распределения данных. Реляционные базы часто показывают высокую скорость чтения, но могут терять производительность на сложных запросах с несколькими таблицами.
  • Типы хранения данных. Тут выделяется только Redis, его вариант хранения данных позволяет существенно ускорить количество операций записи и чтения.
  • Лицензии. В таблице обозначены их названия, более подробную информацию стоит прочитать на сайтах этих БД.

Также важными параметрами для выбора БД являются «Масштабируемость», «Отказоустойчивость», «Поддержка транзакций» и «Поддержка индексов».

MongoDB: чем эта база отличается от других 3
Параметры: «Масштабируемость», «Отказоустойчивость», «Поддержка транзакций» и «Поддержка индексов».
  • Масштабируемость. MongoDB поддерживает горизонтальное масштабирование через шардирование. Реляционные базы данных чаще масштабируются вертикально. Однако они поддерживают и другие варианты масштабируемости (см. в таблице).
  • Отказоустойчивость. MongoDB предлагает встроенные механизмы репликации и автоматического восстановления данных при сбоях, что обеспечивает высокую доступность системы. В реляционных базах также возможна отказоустойчивость через репликацию, но она чаще требует более сложной настройки.
  • Поддержка транзакций. Ранее MongoDB не поддерживала полноценные транзакции, но начиная с версии 4.0, она обеспечивает поддержку ACID-транзакций. В реляционных базах, таких как PostgreSQL и MySQL, поддержка транзакций является стандартом и более развита.
  • Поддержка индексов. Многие БД поддерживают индексацию, и MongoDB тоже.

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
664 открытий4К показов