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

Документоориентированная база данных

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

История

Предпосылки появления

К началу 2000-х годов реляционные базы данных (РБД) доминировали в корпоративной среде. Однако рост масштабов веб-приложений, появление социальных сетей и необходимость обработки больших объёмов неструктурированных данных выявили ограничения реляционной модели: жёсткая схема, сложность горизонтального масштабирования, неэффективность при работе с иерархическими данными (например, вложенными объектами JSON). Это привело к поиску альтернатив, получивших общее название NoSQL.

Развитие

Первые документоориентированные системы начали появляться в середине 2000-х годов. В 2005 году компания Google опубликовала статью о Bigtable, а в 2007 году — о MapReduce, что стимулировало развитие распределённых хранилищ. В 2007 году была выпущена система CouchDB, созданная Дэмианом Кацем и Яном Лейном, которая стала одной из первых документоориентированных баз данных с открытым исходным кодом, использующей JSON и HTTP-интерфейс. В 2009 году компания 10gen (ныне MongoDB Inc.) выпустила MongoDB, которая быстро завоевала популярность благодаря простоте использования, масштабируемости и поддержке вложенных документов. В 2010-х годах появились другие заметные системы: Amazon DynamoDB (проприетарная, от Amazon Web Services), Couchbase (на основе CouchDB и Membase), OrientDB (гибридная, с поддержкой графовой модели) и RethinkDB. К концу 2010-х годов документоориентированные базы данных стали стандартом для многих современных веб-приложений, микросервисных архитектур и систем управления контентом.

Классификация

Документоориентированные базы данных можно классифицировать по нескольким признакам.

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

По модели хранения

По способу размещения

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

Основные понятия

Модель данных

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

Запросы

Запросы к документам выполняются с помощью специализированных языков запросов, которые обычно не являются SQL. Примеры:

ACID-транзакции

Многие ранние документоориентированные базы данных (например, MongoDB до версии 4.0) не поддерживали многооперационные транзакции с гарантиями ACID (атомарность, согласованность, изоляция, долговечность) на уровне нескольких документов. Вместо этого они гарантировали атомарность только на уровне одного документа. Начиная с версии 4.0 (2018 год), MongoDB добавила поддержку многодокументных транзакций. Другие системы, такие как Amazon DynamoDB, также имеют ограниченную поддержку транзакций.

Масштабирование

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

Применение

Документоориентированные базы данных находят применение в широком спектре задач, где требуется гибкая схема, быстрая разработка и работа с иерархическими данными.

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

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

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

Хранение товаров с различными характеристиками (цвет, размер, вес, технические параметры). В реляционной модели потребовалось бы много таблиц для каждого типа характеристик; в документоориентированной — один документ на товар.

Аналитика и журналирование

Хранение логов, событий, метрик. Документы могут быть записаны в базу данных в реальном времени, а затем обработаны с помощью агрегационных запросов.

Мобильные и веб-приложения

Хранение пользовательских сессий, настроек, данных о действиях. JSON-документы легко сериализуются и десериализуются в объекты JavaScript, что упрощает интеграцию с фронтендом.

Интернет вещей (IoT)

Хранение данных от датчиков, устройств, сенсоров. Каждое устройство может генерировать документы с разной структурой, что хорошо подходит для документоориентированной модели.

Примеры

MongoDB

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

CouchDB

База данных, ориентированная на веб-технологии. Хранит документы в JSON, использует HTTP-интерфейс для всех операций (RESTful API). Поддерживает репликацию между узлами (multi-master) и конфликты, которые разрешаются пользователем. Отличается высокой надёжностью и простотой развёртывания.

Amazon DynamoDB

Управляемый сервис от Amazon Web Services (AWS). Является документоориентированной и key-value базой данных одновременно. Поддерживает автоматическое масштабирование, шифрование, резервное копирование. Использует собственный формат хранения и язык запросов (PartiQL). Отличается высокой производительностью при работе с ключами.

Azure Cosmos DB

Управляемый сервис от Microsoft Azure. Поддерживает несколько моделей данных (документную, графовую, табличную, key-value). Использует собственный протокол (SQL API) для запросов к JSON-документам. Обеспечивает глобальное распределение и многомодельность.

Критика

Несмотря на широкое распространение, документоориентированные базы данных имеют ряд недостатков.

Источники

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

На главную BFOmetr →