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

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

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

История

Концепция документо-ориентированных баз данных возникла как ответ на ограничения реляционной модели при работе с большими объёмами разнородных данных, характерными для веб-приложений и распределённых систем начала 2000-х годов. Одним из первых и наиболее влиятельных проектов стала система Lotus Notes (разработана в 1989 году компанией Lotus Development Corporation), которая использовала собственную документную модель, однако её популярность была ограничена корпоративной средой.

Настоящий прорыв произошёл в середине 2000-х годов с появлением проектов с открытым исходным кодом. В 2005 году была выпущена CouchDB (Apache CouchDB), спроектированная для работы с документами в формате JSON и использующая RESTful API. В 2007 году начала разрабатываться MongoDB, которая стала самой популярной документо-ориентированной СУБД. Её успех был обусловлен высокой производительностью, простотой масштабирования и богатым языком запросов.

Параллельно развивались и другие системы: RavenDB (2009), OrientDB (2010, мультимодельная, но с сильной документной поддержкой), Couchbase (2011, наследник CouchDB с улучшенной производительностью). К концу 2010-х годов документо-ориентированные базы данных стали стандартом для многих современных приложений, особенно в области управления контентом, каталогов продуктов, аналитики и интернета вещей.

Ключевые характеристики

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

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

Гибкая схема (schema-less)

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

Идентификация документов

Каждый документ обычно имеет уникальный идентификатор (_id в MongoDB, _id в CouchDB), который служит первичным ключом. Идентификатор может быть автоматически сгенерирован системой или задан пользователем. Поиск по идентификатору является самой быстрой операцией.

Языки запросов и индексация

Документо-ориентированные базы данных предоставляют разнообразные API и языки запросов, часто основанные на JSON или SQL-подобных конструкциях. Поддерживаются:

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

Масштабирование и репликация

Большинство документо-ориентированных СУБД поддерживают горизонтальное масштабирование (шардирование) — распределение данных по нескольким серверам. Репликация (создание копий данных на разных узлах) обеспечивает отказоустойчивость и высокую доступность. Например, MongoDB использует наборы реплик (replica sets) для обеспечения отказоустойчивости.

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

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

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

По модели данных и функциональности

По лицензии

Устройство и принципы работы

Хранение данных

Данные хранятся в виде коллекций, которые являются аналогами таблиц в реляционных базах данных. Каждая коллекция содержит набор документов. Физически документы могут храниться на диске в виде файлов (например, в CouchDB каждый документ — отдельный файл) или в едином файле данных с индексами (MongoDB использует механизм хранения WiredTiger).

Обработка запросов

Запросы к документо-ориентированной базе данных обычно выполняются через драйверы, предоставляющие API для конкретного языка программирования (Python, Java, JavaScript, C# и др.). Запросы могут быть:

Транзакции и согласованность

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

Применение

Документо-ориентированные базы данных широко применяются в областях, где требуется гибкость схемы, быстрая разработка и работа с полуструктурированными данными:

Примеры

Критика

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

Источники

  1. Cattell, R. (2010). "Scalable SQL and NoSQL Data Stores". ACM SIGMOD Record.
  2. MongoDB, Inc. (2023). "MongoDB Documentation".
  3. Fowler, M., & Sadalage, P. (2012). "NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence". Addison-Wesley.
  4. Apache CouchDB Documentation. (2023). "CouchDB: The Definitive Guide".
  5. Couchbase, Inc. (2023). "Couchbase Server Documentation".
  6. Stonebraker, M. (2010). "SQL Databases v. NoSQL Databases". Communications of the ACM.

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

На главную BFOmetr →