Что такое документоориентированная БД

Зачем понадобилась ещё одна модель данных и чем документ отличается от строки таблицы.

MongoDB — документоориентированная NoSQL-база данных, которая хранит данные не в таблицах со строками и столбцами, а в гибких документах формата JSON.

Реляционная модель в двух словах

Если вы работали с PostgreSQL или MySQL, картина знакома: данные лежат в таблицах, каждая запись — это строка с фиксированным набором столбцов. Схема задаётся заранее: у таблицы users есть колонки id, name, email, и каждая строка обязана им соответствовать. Связанные данные раскладывают по разным таблицам и собирают обратно через JOIN.

Эта модель отлично подходит, когда структура данных стабильна и важна строгая целостность. Но у неё есть цена: чтобы показать одну сущность (скажем, заказ с товарами и адресом), приходится склеивать несколько таблиц, а изменить схему на живой большой таблице — дорогая операция.

Документная модель: данные как объект

MongoDB предлагает другой взгляд. Вместо того чтобы дробить сущность по таблицам, вы храните её целиком — как вложенный объект, очень похожий на JSON. Вот один пользователь:

{
  "_id": "u1",
  "name": "Анна",
  "email": "[email protected]",
  "address": {
    "city": "Казань",
    "zip": "420000"
  },
  "roles": ["author", "editor"]
}

Заметьте: адрес — это вложенный объект, а роли — массив, и всё это лежит внутри одного документа. В реляционной БД для этого понадобились бы как минимум три таблицы и два JOIN. Здесь — один документ, который читается одним запросом.

NoSQL — не значит «без SQL-возможностей»

Термин NoSQL («Not Only SQL») объединяет базы, которые отказались от строгой табличной модели ради гибкости и горизонтального масштабирования. MongoDB — самый популярный представитель документного семейства. Это не значит, что в ней нет мощных запросов: есть и фильтры, и сортировки, и агрегации, и аналог JOIN. Просто язык запросов другой — это методы над коллекциями, а не SQL.

Когда документная модель выигрывает

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

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

Итог

  • MongoDB хранит данные в гибких JSON-подобных документах, а не в таблицах со строгой схемой.
  • Связанные данные часто вкладывают внутрь одного документа вместо раскладывания по таблицам.
  • NoSQL — это другая модель данных и другой язык запросов, а не отсутствие запросов вообще.
  • Документная модель сильна там, где данные читаются целиком и структура может меняться.
Проверьте себя
1. Чем документ MongoDB принципиально отличается от строки реляционной таблицы?
AДокумент может содержать вложенные объекты и массивы и не обязан совпадать по структуре с другими документами
BДокумент всегда занимает ровно одну строку текста
CДокумент нельзя изменить после создания
DДокумент хранит только числа
2. Что означает аббревиатура NoSQL?
AБазы данных без какого-либо языка запросов
B«Not Only SQL» — семейство БД с нетабличной моделью данных
CБазы, работающие только в облаке
DSQL-базы новой версии
3. В каком случае документная модель обычно выигрывает у реляционной?
AКогда нужны строгие банковские транзакции между множеством таблиц
BКогда у каждой записи строго одинаковый фиксированный набор колонок
CКогда сущность удобно читать и хранить целиком, а структура может меняться
DКогда данные вообще не нужно искать
Поддержать проект