Открыть сервис

Документно-ориентированная модель

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

История

Концепция документно-ориентированного хранения данных возникла как ответ на ограничения реляционных баз данных (РБД) в контексте веб-приложений и распределённых систем. В конце 1990-х — начале 2000-х годов рост объёмов данных, необходимость быстрой разработки и масштабирования привели к появлению движения NoSQL. Первые документные базы данных, такие как Lotus Notes (1989) и CouchDB (2005), заложили основы подхода.

Ключевым этапом стало создание MongoDB в 2007 году (публичный релиз — 2009), которая популяризировала формат BSON (бинарный JSON) и модель «документ как единица хранения». В 2010-х годах появились другие значимые системы: Couchbase (2010), Amazon DynamoDB (2012, гибридная модель), RethinkDB (2012). К 2020-м годам документно-ориентированные базы данных стали одним из основных типов NoSQL-решений, используемых в облачных сервисах, микросервисной архитектуре и системах управления контентом.

Основные принципы

Документ как атомарная единица

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

Коллекции и базы данных

Документы группируются в коллекции (аналоги таблиц в РБД). Коллекции, в свою очередь, объединяются в базы данных. Внутри коллекции документы обычно не имеют жёсткой схемы, но могут быть индексированы по определённым полям для ускорения запросов.

Отсутствие JOIN-операций (в классическом виде)

В чистой документно-ориентированной модели связи между документами реализуются через встраивание (embedding) или ссылки (references). Встраивание — когда связанные данные (например, адреса пользователя) помещаются внутрь родительского документа. Ссылки — когда в документе хранится идентификатор другого документа, а объединение выполняется на уровне приложения. Некоторые СУБД (например, MongoDB с агрегационным конвейером) поддерживают операцию $lookup, эмулирующую JOIN, но с ограничениями по производительности.

Классификация и виды

По формату хранения

  • JSON-ориентированные (MongoDB, CouchDB) — используют BSON или JSON как основной формат.
  • XML-ориентированные (eXist-db, BaseX) — работают с XML-документами, поддерживают XPath и XQuery.
  • Гибридные (Amazon DynamoDB) — поддерживают как документную, так и ключ-значение модель.

По способу хранения

  • С дисковым хранением (MongoDB, Couchbase) — данные хранятся на жёстких дисках или SSD, с поддержкой журналирования.
  • В оперативной памяти (Redis, но с ограниченной документной поддержкой) — ориентированы на сверхбыстрый доступ, но с риском потери данных при сбое.

По модели консистентности

  • Строго консистентные (MongoDB с настройкой majority) — гарантируют, что после записи все последующие чтения увидят новое значение.
  • В конечном счёте консистентные (CouchDB, Amazon DynamoDB) — допускают временное расхождение данных между узлами, но в итоге синхронизируются.

Устройство и характеристики

Индексация

Документные базы данных поддерживают различные типы индексов: первичные (по _id), вторичные (по любому полю), составные, текстовые, геопространственные. Индексы ускоряют поиск, но замедляют запись и увеличивают объём хранилища.

Шардирование и репликация

Горизонтальное масштабирование достигается через шардирование — распределение документов по нескольким серверам (шардам) на основе ключа шардирования. Репликация обеспечивает отказоустойчивость: данные копируются на несколько узлов (реплик), причём один узел является первичным (primary) для записи, остальные — вторичными (secondary) для чтения.

Атомарность и транзакции

Традиционно документно-ориентированные СУБД гарантируют атомарность только на уровне одного документа. Многодокументные транзакции (ACID) появились относительно недавно: например, в MongoDB с версии 4.0 (2018) поддерживаются транзакции, охватывающие несколько документов в одной коллекции, а с версии 4.2 — в нескольких коллекциях.

Схема и миграции

Отсутствие жёсткой схемы (schema-less) позволяет разработчикам быстро изменять структуру данных без длительных миграций. Однако на практике часто применяют «мягкую схему» (schema-on-read), когда приложение проверяет и преобразует данные при чтении. Для управления миграциями используются внешние инструменты (например, Mongoose для MongoDB).

Применение

Системы управления контентом (CMS)

Документная модель удобна для хранения статей, блогов, страниц, где каждый документ содержит заголовок, тело, метаданные, теги и комментарии. Примеры: WordPress (на MySQL, но с документным подходом через плагины), Ghost (на MongoDB).

Интернет-магазины и каталоги

Каталоги товаров с разнородными характеристиками (размер, цвет, вес, материал) легко представляются в виде документов. Платформы электронной коммерции, такие как Magento и Shopify, используют документные базы для управления продуктами.

Аналитика и логирование

Документы с произвольной структурой удобны для сбора логов, событий и метрик. Системы вроде Elasticsearch (основана на Lucene, но использует документную модель) и Graylog позволяют индексировать и искать миллионы записей.

Мобильные и веб-приложения (реального времени)

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

Сравнение с реляционной моделью

ХарактеристикаРеляционная модельДокументно-ориентированная модель
Структура данныхТаблицы, строки, столбцыДокументы (JSON/BSON)
СхемаФиксированная, строгаяГибкая, динамическая
СвязиJOIN через внешние ключиВстраивание или ссылки
МасштабированиеВертикальное (горизонтальное — сложно)Горизонтальное (шардирование)
ТранзакцииACID на уровне нескольких таблицACID на уровне одного документа (многодокументные — ограниченно)
Производительность при чтенииВысокая при нормализованных данныхВысокая при денормализованных данных
Сложность запросовSQL (сложные соединения)API-запросы (агрегация, фильтрация)

Критика и ограничения

  • Проблема денормализации. Для избежания JOIN-операций данные часто дублируются, что ведёт к избыточности и риску несогласованности при обновлении.
  • Ограниченная поддержка сложных запросов. Многодокументные транзакции и сложные агрегации в документных базах менее производительны, чем в реляционных.
  • Отсутствие стандарта. Каждая СУБД имеет свой API, язык запросов и особенности, что затрудняет миграцию между системами.
  • Сложность миграции схемы. Хотя схема гибкая, при изменении структуры документов в существующей коллекции требуется обновление всех документов, что может быть ресурсоёмким.

Примеры систем

  • MongoDB — самая популярная документно-ориентированная СУБД, использует BSON, поддерживает шардирование, репликацию и агрегационный конвейер.
  • CouchDB — система с фокусом на репликацию и офлайн-доступ, использует JSON и REST API.
  • Couchbase — объединяет документную модель с кэшированием в памяти, поддерживает N1QL (SQL-подобный язык запросов).
  • Amazon DynamoDB — управляемая облачная NoSQL-база данных от Amazon Web Services, поддерживает как документную, так и ключ-значение модель.
  • RethinkDB — база данных реального времени с push-уведомлениями, но прекратившая активную разработку в 2016 году.

Интересные факты

  • Термин «документно-ориентированная база данных» ввёл Карл Стросс в 2005 году в статье «Document-Oriented Databases».
  • MongoDB основана на языке C++ и использует механизм хранения WiredTiger (с версии 3.2).
  • В 2020 году MongoDB ввела поддержку многодокументных транзакций с уровнем изоляции snapshot, что приблизило её к реляционным СУБД.
  • Документные базы данных часто выбирают для стартапов и проектов с быстро меняющимися требованиями, так как они позволяют избежать длительного проектирования схемы.

Источники

  • C. J. Date. An Introduction to Database Systems. 8th ed. — Addison-Wesley, 2003.
  • P. J. Sadalage, M. Fowler. NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. — Addison-Wesley, 2012.
  • MongoDB Documentation. Introduction to MongoDB. — MongoDB, Inc., 2023.
  • A. Moniruzzaman, S. A. Hossain. NoSQL Database: New Era of Databases for Big Data Analytics — Classification, Characteristics and Comparison. — International Journal of Database Theory and Application, 2013.
  • R. Hecht, S. Jablonski. NoSQL Evaluation: A Use Case Oriented Survey. — International Conference on Cloud and Service Computing, 2011.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →