Документоориентированная база данных или хранилище документов — это компьютерная программа и система хранения данных, предназначенная для хранения, извлечения и управления документоориентированной информацией, также известной как полуструктурированные данные . [1]
Документо-ориентированные базы данных являются одной из основных категорий баз данных NoSQL , и популярность термина «документо-ориентированная база данных» выросла [2] с использованием самого термина NoSQL. Базы данных XML являются подклассом документо-ориентированных баз данных, которые оптимизированы для работы с XML- документами. Графовые базы данных похожи, но добавляют еще один уровень, отношение , которое позволяет им связывать документы для быстрого обхода.
Документо-ориентированные базы данных по своей сути являются подклассом хранилища ключей и значений , еще одной концепции баз данных NoSQL. Разница [ противоречивая ] заключается в способе обработки данных; в хранилище ключей и значений данные считаются изначально непрозрачными для базы данных, тогда как документо-ориентированная система полагается на внутреннюю структуру документа для извлечения метаданных , которые ядро базы данных использует для дальнейшей оптимизации. Хотя эта разница часто незначительна из-за инструментов в системах, [a] концептуально хранилище документов разработано для предоставления более богатого опыта работы с современными методами программирования.
Базы данных документов [b] сильно контрастируют с традиционной реляционной базой данных (RDB). Реляционные базы данных обычно хранят данные в отдельных таблицах , которые определяются программистом, и один объект может быть распределен по нескольким таблицам. Базы данных документов хранят всю информацию для данного объекта в одном экземпляре в базе данных, и каждый сохраненный объект может отличаться от любого другого. Это устраняет необходимость в объектно-реляционном отображении при загрузке данных в базу данных.
Центральным понятием документо-ориентированной базы данных является понятие документа . Хотя каждая реализация документо-ориентированной базы данных отличается в деталях этого определения, в целом все они предполагают, что документы инкапсулируют и кодируют данные (или информацию) в некотором стандартном формате или кодировке. Используемые кодировки включают XML , YAML , JSON , а также двоичные формы, такие как BSON .
Документы в хранилище документов примерно эквивалентны программной концепции объекта. Они не обязаны придерживаться стандартной схемы, и у них не будут все те же разделы, слоты, части или ключи. Как правило, программы, использующие объекты, имеют много разных типов объектов, и эти объекты часто имеют много необязательных полей. Каждый объект, даже принадлежащий к одному классу, может выглядеть очень по-разному. Хранилища документов похожи тем, что они допускают разные типы документов в одном хранилище, допускают, чтобы поля в них были необязательными, и часто допускают их кодирование с использованием разных систем кодирования. Например, ниже приведен документ, закодированный в JSON:
{ "firstName" : "Боб" , "lastName" : "Смит" , "адрес" : { "тип" : "Главная" , "street1" : "5 Oak St." , "город" : "Мальчики" , "государство" : "АР" , "почтовый индекс" : "32225" , "страна" : "США" }, "хобби" : "парусный спорт" , "телефон" : { "тип" : "Ячейка" , "номер" : "(555)-123-4567" }}
Второй документ может быть закодирован в XML следующим образом:
<contact> <firstname> Боб </firstname> <lastname> Смит </lastname> <phone type= "Сотовый" > (123) 555-0178 </phone> <phone type= "Рабочий" > (890) 555-0133 </phone> <address> <type> Домашний </type> <street1> 123 Back St. </street1> <city> Бойс </city> <state> AR </state> <zip> 32225 </zip> <country> США </country> </address> </contact>
Эти два документа разделяют некоторые структурные элементы друг с другом, но каждый также имеет уникальные элементы. Структура, текст и другие данные внутри документа обычно называются содержимым документа и могут быть использованы с помощью методов поиска или редактирования (см. ниже). В отличие от реляционной базы данных, где каждая запись содержит одни и те же поля, оставляя неиспользуемые поля пустыми; в приведенном выше примере нет пустых «полей» ни в одном документе (записи). Такой подход позволяет добавлять новую информацию в некоторые записи, не требуя, чтобы все остальные записи в базе данных имели ту же структуру.
Базы данных документов обычно предусматривают дополнительные метаданные , которые должны быть связаны и сохранены вместе с содержимым документа. Эти метаданные могут быть связаны с возможностями, которые хранилище данных предоставляет для организации документов, обеспечения безопасности или других особенностей реализации.
Основные операции, которые поддерживает документоориентированная база данных для документов, аналогичны операциям других баз данных, и хотя терминология не полностью стандартизирована, большинство специалистов распознают их как CRUD :
Документы адресуются в базе данных с помощью уникального ключа , который представляет этот документ. Этот ключ является простым идентификатором (или ID), обычно строкой , URI или путем . Ключ может использоваться для извлечения документа из базы данных. Обычно база данных сохраняет индекс по ключу для ускорения извлечения документа, а в некоторых случаях ключ требуется для создания или вставки документа в базу данных.
Другой определяющей характеристикой документоориентированной базы данных является то, что помимо простого поиска ключа к документу, который может быть использован для извлечения документа, база данных предлагает API или язык запросов, который позволяет пользователю извлекать документы на основе содержимого (или метаданных). Например, вам может понадобиться запрос, который извлекает все документы с определенным полем, установленным на определенное значение. Набор доступных API запросов или функций языка запросов, а также ожидаемая производительность запросов значительно различаются от одной реализации к другой. Аналогично, конкретный набор доступных параметров индексации и конфигурации сильно различаются в зависимости от реализации.
Именно здесь хранилище документов больше всего отличается от хранилища «ключ-значение». Теоретически значения в хранилище «ключ-значение» непрозрачны для хранилища, по сути, это черные ящики. Они могут предлагать поисковые системы, похожие на системы хранилища документов, но могут иметь меньшее понимание организации контента. Хранилища документов используют метаданные в документе для классификации контента, что позволяет им, например, понимать, что одна серия цифр — это номер телефона, а другая — почтовый индекс. Это позволяет им выполнять поиск по этим типам данных, например, по всем номерам телефонов, содержащим 555, что будет игнорировать почтовый индекс 55555.
Базы данных документов обычно предоставляют некоторый механизм для обновления или редактирования содержимого (или метаданных) документа, позволяя либо заменять весь документ, либо отдельные структурные части документа.
Реализации баз данных документов предлагают различные способы организации документов, включая понятия
Иногда эти организационные понятия различаются по степени их логического и физического (например, на диске или в памяти) представления.
База данных, ориентированная на документы, представляет собой специализированное хранилище ключей и значений , которое само по себе является еще одной категорией баз данных NoSQL. В простом хранилище ключей и значений содержимое документа непрозрачно. База данных, ориентированная на документы, предоставляет API или язык запросов/обновлений, который предоставляет возможность запрашивать или обновлять данные на основе внутренней структуры документа . Эта разница может быть незначительной для пользователей, которым не нужны более сложные API запросов, поиска или редактирования, которые обычно предоставляются базами данных документов. Современные хранилища ключей и значений часто включают функции для работы с метаданными, стирая границы между хранилищами документов.
Некоторые поисковые системы (также известные как системы поиска информации ), такие как Apache Solr и Elasticsearch, предоставляют достаточно базовых операций с документами, чтобы соответствовать определению документоориентированной базы данных.
В реляционной базе данных данные сначала классифицируются по ряду предопределенных типов, и таблицы создаются для хранения отдельных записей или записей каждого типа. Таблицы определяют данные в полях каждой записи , что означает, что каждая запись в таблице имеет одинаковую общую форму. Администратор также определяет связи между таблицами и выбирает определенные поля, которые, по его мнению, будут чаще всего использоваться для поиска, и определяет индексы для них. Ключевая концепция в реляционной конструкции заключается в том, что любые данные, которые могут повторяться, обычно помещаются в свою собственную таблицу, и если эти экземпляры связаны друг с другом, выбирается столбец для их группировки вместе, внешний ключ . Такая конструкция известна как нормализация базы данных . [3]
Например, приложению адресной книги обычно требуется хранить имя контакта, необязательное изображение, один или несколько номеров телефонов, один или несколько почтовых адресов и один или несколько адресов электронной почты. В канонической реляционной базе данных таблицы будут созданы для каждой из этих строк с предопределенными полями для каждого бита данных: таблица CONTACT может включать столбцы FIRST_NAME, LAST_NAME и IMAGE, в то время как таблица PHONE_NUMBER может включать столбцы COUNTRY_CODE, AREA_CODE, PHONE_NUMBER и TYPE (домашний, рабочий и т. д.). Таблица PHONE_NUMBER также содержит столбец внешнего ключа «CONTACT_ID», который содержит уникальный идентификационный номер, назначенный контакту при его создании. Чтобы воссоздать исходный контакт, ядро базы данных использует внешние ключи для поиска связанных элементов в группе таблиц и восстановления исходных данных.
Напротив, в ориентированной на документы базе данных может не быть внутренней структуры, которая напрямую отображается на концепцию таблицы, а поля и отношения, как правило, не существуют как предопределенные концепции. Вместо этого все данные для объекта помещаются в один документ и хранятся в базе данных как одна запись. В примере с адресной книгой документ будет содержать имя контакта, изображение и любую контактную информацию, все в одной записи. Доступ к этой записи осуществляется через ее ключ, что позволяет базе данных извлекать и возвращать документ приложению. Для извлечения связанных данных не требуется никаких дополнительных действий; все это возвращается в одном объекте.
Ключевое различие между документно-ориентированной и реляционной моделями заключается в том, что форматы данных не предопределены в случае документа. В большинстве случаев любой вид документа может храниться в любой базе данных, и эти документы могут изменяться по типу и форме в любое время. Если кто-то хочет добавить COUNTRY_FLAG к CONTACT, это поле можно добавлять к новым документам по мере их вставки, это не повлияет на базу данных или существующие уже сохраненные документы. Чтобы облегчить извлечение информации из базы данных, документно-ориентированные системы обычно позволяют администратору давать подсказки базе данных для поиска определенных типов информации. Они работают аналогично индексам в реляционном случае. Большинство также предлагают возможность добавлять дополнительные метаданные вне содержимого самого документа, например, помечая записи как часть адресной книги, что позволяет программисту извлекать связанные типы информации, например, «все записи адресной книги». Это обеспечивает функциональность, похожую на таблицу, но отделяет концепцию (категории данных) от ее физической реализации (таблицы).
В классической нормализованной реляционной модели объекты в базе данных представлены в виде отдельных строк данных без внутренней структуры, помимо той, которая им дана при извлечении. Это приводит к проблемам при попытке трансляции объектов программирования в связанные с ними строки базы данных и из них, проблема, известная как несоответствие объектно-реляционного импеданса . [4] Хранилища документов более тесно, а в некоторых случаях и напрямую, отображают объекты программирования в хранилище. Они часто рекламируются с использованием термина NoSQL .
Большинство баз данных XML являются документоориентированными.
Документно-ориентированные базы данных, или хранилища документов, — это базы данных NoSQL, которые хранят данные в форме документов. Хранилища документов — это тип хранилища «ключ-значение»: каждый документ имеет уникальный идентификатор — свой ключ — и сам документ служит значением.