Документно-ориентированная база данных - Википедия - Document-oriented database

А документно-ориентированная база данных, или же хранилище документов, это компьютерная программа и система хранения данных, предназначенная для хранения, извлечения и управления документально-ориентированной информацией, также известной как полуструктурированные данные.[1]

Документно-ориентированные базы данных - одна из основных категорий NoSQL базы данных, и популярность термина "документно-ориентированная база данных" выросла[2] с использованием самого термина NoSQL. Базы данных XML являются подклассом документно-ориентированных баз данных, оптимизированных для работы с XML документы. Графические базы данных похожи, но добавьте еще один слой, отношение, что позволяет им связывать документы для быстрого просмотра.

Документно-ориентированные базы данных по своей сути являются подклассом хранилище ключей и значений, еще одна концепция базы данных NoSQL. Разница заключается в способе обработки данных; в хранилище "ключ-значение" данные считаются непрозрачными для базы данных, тогда как ориентированная на документы система полагается на внутреннюю структуру в документ чтобы извлечь метаданные который ядро ​​базы данных использует для дальнейшей оптимизации. Хотя разница часто незначительна из-за инструментов в системах,[а] концептуально хранилище документов разработано, чтобы предложить более богатый опыт работы с современными методами программирования.

Базы данных документов[b] сильно контрастируют с традиционными реляционная база данных (РБД). Реляционные базы данных обычно хранят данные в отдельных столы которые определены программистом, и один объект может быть распределен по нескольким таблицам. Базы данных документов хранят всю информацию для данного объекта в единственном экземпляре в базе данных, и каждый хранимый объект может отличаться от любого другого. Это устраняет необходимость в объектно-реляционное отображение при загрузке данных в базу данных.

Документы

Центральным понятием документально-ориентированной базы данных является понятие документ. Хотя каждая реализация базы данных, ориентированной на документы, отличается деталями этого определения, в целом все они предполагают, что документы инкапсулируют и кодируют данные (или информацию) в некотором стандартном формате или кодировке. Используемые кодировки включают XML, YAML, JSON, а также двоичные формы, такие как BSON.

Документы в хранилище документов примерно эквивалентны программной концепции объекта. От них не требуется придерживаться стандартной схемы, и при этом они не будут иметь одинаковые разделы, слоты, части или ключи. Как правило, программы, использующие объекты, имеют много разных типов объектов, и эти объекты часто имеют много необязательных полей. Каждый объект, даже принадлежащий к одному классу, может выглядеть по-разному. Хранилища документов похожи в том, что они позволяют хранить разные типы документов в одном хранилище, допускают, чтобы поля в них были необязательными, и часто позволяют их кодировать с использованием разных систем кодирования. Например, это документ, закодированный в JSON:

{    "Имя": "Боб",     "Адрес": "Дубовая 5 ул.",     "Хобби": "парусный спорт"}

Второй документ может быть закодирован в XML как:

  <contact>    <firstname>Боб</firstname>    <lastname>Смит</lastname>    <телефон type ="Клетка">(123) 555-0178</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 операции

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

  • Создание (или вставка)
  • Извлечение (или запрос, поиск, чтение или поиск)
  • Обновить (или отредактировать)
  • Удаление (или удаление)

Ключи

Документы адресуются в базе данных через уникальный ключ который представляет этот документ. Этот ключ - простой идентификатор (или ID), обычно нить, а URI, или дорожка. Ключ можно использовать для извлечения документа из базы данных. Обычно база данных сохраняет индекс на ключе для ускорения поиска документа, а в некоторых случаях ключ требуется для создания или вставки документа в базу данных.

поиск

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

Именно здесь хранилище документов больше всего отличается от хранилища "ключ-значение". Теоретически значения в хранилище ключей и значений непрозрачны для хранилища, они по сути являются черными ящиками. Они могут предлагать поисковые системы, аналогичные тем, что используются в хранилище документов, но могут иметь меньшее понимание организации контента. Хранилища документов используют метаданные в документе для классификации содержимого, позволяя им, например, понимать, что одна серия цифр - это номер телефона, а другая - почтовый индекс. Это позволяет им выполнять поиск по этим типам данных, например, по всем телефонным номерам, содержащим 555, при этом почтовый индекс 55555 игнорируется.

Редактирование

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

Организация

Реализации базы данных документов предлагают множество способов организации документов, включая понятия

  • Коллекции: группы документов, в которых в зависимости от реализации документ может быть принудительно размещен внутри одной коллекции или может быть разрешен для существования в нескольких коллекциях.
  • Теги и невидимые метаданные: дополнительные данные вне содержимого документа
  • Иерархии каталогов: группы документов, организованные в древовидную структуру, обычно на основе пути или URI.

Иногда эти организационные понятия различаются по степени логического и физического представления (например, на диске или в памяти).

Связь с другими базами данных

Связь с хранилищами ключей и значений

Документно-ориентированная база данных - это специализированная хранилище ключей и значений, которая сама по себе является еще одной категорией баз данных NoSQL. В простом хранилище "ключ-значение" содержимое документа непрозрачно. Документно-ориентированная база данных предоставляет API или язык запросов / обновлений, который предоставляет возможность запроса или обновления на основе внутренней структуры в документ. Это различие может быть незначительным для пользователей, которым не нужны более расширенные API запросов, извлечения или редактирования, которые обычно предоставляются базами данных документов. Современные хранилища ключей и значений часто включают функции для работы с метаданными, стирающие границы между хранилищами документов.

Отношение к поисковым системам

Некоторые поисковые системы (также известные как поиск информации ) такие системы, как 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.

Реализации

имяИздательЛицензияПоддерживаемые языкиЗаметкиRESTful API
АллегроГрафFranz, Inc.ПроприетарныйЯва, Python, Common Lisp, Рубин, Scala, .СЕТЬ, PerlПлатформа базы данных поддерживает хранилище документов и модели данных графов в единой базе данных. Поддерживает JSON, JSON-LD, RDF, полнотекстовый поиск, КИСЛОТА, двухфазная фиксация, Репликация с несколькими мастерами, Пролог и SPARQL.да[5]
ArangoDBArangoDBЛицензия ApacheC, .СЕТЬ, Ява, Python, Node.js, PHP, Scala, Идти, Рубин, ЭликсирСистема базы данных поддерживает хранилище документов, а также модели данных «ключ-значение» и графы с одним ядром базы данных и унифицированным языком запросов AQL (ArangoDB Query Language).да[6]
BaseXКоманда BaseXЛицензия BSDЯва, XQueryПоддержка XML, JSON и бинарных форматов; архитектура на основе клиент / сервер; одновременный структурный и полнотекстовый поиск и обновления.да
CachéInterSystems КорпорацияПроприетарныйЯва, C #, Node.jsОбычно используется в приложениях для здравоохранения, бизнеса и правительства.да
CloudantCloudant, Inc.ПроприетарныйErlang, Ява, Scala, и CСлужба распределенной базы данных на основе BigCouch, компания Открытый исходный код вилка Apache -поддержанный CouchDB проект. Использует модель JSON.да
База данных ClusterpointClusterpoint Ltd.Проприетарный с бесплатной загрузкойJavaScript, SQL, PHP, .СЕТЬ, Ява, Python, Node.js, C, C ++,Распределенная документно-ориентированная платформа баз данных XML / JSON с КИСЛОТА -соответствующий сделки; высокая доступность репликация данных и шардинг; встроенный полнотекстовый поиск двигатель с актуальность рейтинг; JS / SQL язык запросов; ГИС; Доступен с оплатой по факту использования база данных как услуга или как бесплатное программное обеспечение для локальной загрузки.да
Сервер CouchbaseCouchbase, Inc.Лицензия ApacheC, .СЕТЬ, Ява, Python, Node.js, PHP, SQL, Идти, Spring Framework, LINQРаспределенная база данных документов NoSQL, модель JSON и язык запросов на основе SQL.да[7]
CouchDBФонд программного обеспечения ApacheЛицензия ApacheЛюбой язык, который может делать HTTP-запросыJSON через REST / HTTP с Управление параллелизмом с несколькими версиями и ограниченный КИСЛОТА характеристики. Использует карта и уменьшать для просмотров и запросов.[8]да[9]
CrateIOCRATE Technology GmbHЛицензия ApacheЯваИспользуйте знакомый синтаксис SQL для распределенных запросов в реальном времени в кластере. На основе экосистемы Lucene / Elasticsearch со встроенной поддержкой двоичных объектов (BLOB).да[10]
Cosmos DBMicrosoftПроприетарный.СЕТЬ, Ява, Python, Node.js, JavaScript, SQLПредложение «Платформа как услуга», часть Microsoft Azure Платформа. Основывается на более ранней версии Azure DocumentDB и расширяет ее.да
DocumentDBВеб-сервисы AmazonСобственный онлайн-сервисразные, ОСТАЛЬНЫЕполностью управляемая служба базы данных, совместимая с MongoDB v3.6да
ElasticsearchШей БэнонЛицензия ApacheЯваJSON, Поисковый движок.да
существоватьсуществоватьLGPLXQuery, ЯваXML поверх REST / HTTP, WebDAV, полнотекстовый поиск Lucene, поддержка двоичных данных, проверка, управление версиями, кластеризация, триггеры, перезапись URL, коллекции, ACLS, обновление XQueryда[11]
InformixIBMСобственные, с бесплатными версиями[12]Различный (совместим с MongoDB API)СУБД с JSON, репликацией, сегментированием и соответствием ACID.да
ЗайчикФонд ApacheЛицензия ApacheЯваРепозиторий содержимого Java выполнение?
Примечания к HCL (HCL Domino )HCLПроприетарныйLotusScript, Ява, Язык формул заметокMultiValueда
MarkLogicMarkLogic CorporationБесплатная лицензия разработчика или коммерческая[13]Ява, JavaScript, Node.js, XQuery, SPARQL, XSLT, C ++Распределенная документно-ориентированная база данных для JSON, XML и RDF троек. Встроенный полнотекстовый поиск, КИСЛОТА транзакции, высокая доступность и аварийное восстановление, сертифицированная безопасность.да
MongoDBMongoDB, IncПубличная лицензия на стороне сервера для СУБД, Лицензия Apache 2 для клиентских драйверов[14]C, C ++, C #, Ява, Perl, PHP, Python, Идти, Node.js, Рубин, Ржавчина,[15] Scala[16]База данных документов с репликацией и сегментированием, BSON магазин (двоичный формат JSON ).да[17][18]
МАМПЫ База данных?Проприетарный и Афферо GPL[19]МАМПЫОбычно используется в приложениях для здоровья.?
ObjectDatabase ++Ekky SoftwareПроприетарныйC ++, C #, TScriptДвоичные структуры классов Native C ++?
OpenLink VirtuosoПрограммное обеспечение OpenLinkGPLv2 [1] и проприетарныйC ++, C #, Ява, SPARQLПромежуточное ПО и ядро базы данных гибридныйда
OrientDBOrient TechnologiesЛицензия ApacheЯваJSON через HTTP, поддержка SQL, КИСЛОТА сделкида
База данных Oracle NoSQLOracle Corp.Apache и проприетарныйC, C #, Java, Python, node.js, GoНичего не разделяемая, горизонтально масштабируемая база данных с поддержкой JSON без схемы, таблиц с фиксированной схемой и пар ключ / значение. Также поддерживает транзакции ACID.да
PostgreSQLPostgreSQLБесплатная лицензия PostgreSQL[20]CHStore, магазин JSON (9.2+), функция JSON (9.3+), HStore2 (9.4+), JSONB (9.4+)Нет
QizxQualcommПроприетарныйОСТАЛЬНЫЕ, Ява, XQuery, XSLT, C, C ++, PythonРаспределенный документ-ориентированный База данных XML со встроенным полнотекстовый поиск; Поддержка для JSON, текст и двоичные файлы.да
ReJSON[21]Redis LabsЛицензия на доступный исходный код RedisNode.js, Ява, Python, Идти и все Redis клиентов.[22]Собственный тип данных в памяти, упакованный как модуль Redis.?
RethinkDB?Лицензия Apache[23]C ++, Python, JavaScript, Рубин, ЯваРаспределенный документ-ориентированный JSON база данных с репликацией и шардингом.Нет
SAP HANASAPПроприетарныйSQL -подобный языкКИСЛОТА транзакция поддерживается, JSON толькода
Седнаsedna.orgЛицензия ApacheC ++, XQueryБаза данных XMLНет
SimpleDBВеб-сервисы AmazonСобственный онлайн-сервисErlang?
SolrApacheЛицензия ApacheЯваПоисковый движокда
TokuMXТокутекСтандартная общественная лицензия GNU AfferoC ++, C #, ИдтиMongoDB с Индексирование фрактального дерева?

Реализации базы данных XML

Большинство баз данных XML являются базами данных, ориентированными на документы.

Смотрите также

Заметки

  1. ^ До такой степени, что в работе системы, ориентированные на документы и системы "ключ-значение", можно часто менять местами.
  2. ^ И хранилища "ключ-значение" в целом.

Рекомендации

  1. ^ Дрейк, Марк (9 августа 2019 г.). «Сравнение систем и моделей управления базами данных NoSQL». DigitalOcean. Архивировано из оригинал 13 августа 2019 г.. Получено 23 августа 2019. Документно-ориентированные базы данных или хранилища документов - это базы данных NoSQL, которые хранят данные в форме документов. Хранилища документов - это тип хранилища "ключ-значение": каждый документ имеет уникальный идентификатор - свой ключ, а сам документ служит значением.
  2. ^ «Рейтинг DB-Engines по категории модели базы данных».
  3. ^ «Описание основ нормализации базы данных». Microsoft.
  4. ^ Вамблер, Скотт. "Объектно-реляционное несоответствие импеданса". Гибкие данные.
  5. ^ «Протокол HTTP для AllegroGraph».
  6. ^ «Многомодельная высокодоступная база данных NoSQL». ArangoDB.
  7. ^ Документация В архиве 2012-08-20 на Wayback Machine. Диван. Проверено 18 сентября 2013.
  8. ^ "Apache CouchDB". Apache Couchdb. Архивировано из оригинал 20 октября 2011 г.
  9. ^ "HTTP_Document_API - Couchdb Wiki". Архивировано из оригинал на 2013-03-01. Получено 2011-10-14.
  10. ^ «Создать контейнер конечной точки HTTP HTTP (заархивированная копия)». Архивировано из оригинал на 2015-06-22. Получено 2015-06-22.
  11. ^ eXist-db База данных XML с открытым исходным кодом. Exist-db.org. Проверено 18 сентября 2013.
  12. ^ «Сравните редакции Informix версии 12». 22 июля 2016 г.
  13. ^ «Лицензирование MarkLogic». Архивировано из оригинал на 2012-01-12. Получено 2011-12-28.
  14. ^ «Лицензирование MongoDB».
  15. ^ "Новый драйвер MongoDB Rust". MongoDB. Получено 2018-02-01.
  16. ^ «Справочник по драйверам, поддерживаемым сообществом».
  17. ^ «Интерфейс HTTP - экосистема MongoDB». Документы MongoDB.
  18. ^ «GitHub - mongodb / docs-экосистема: документация по экосистеме MongoDB». 27 июня 2019 г. - через GitHub.
  19. ^ "GT.M Высокопроизводительный механизм базы данных TP".
  20. ^ «PostgreSQL: Лицензия». PostgreSQL.
  21. ^ Хуанг, Пэнчэн; Ван, Цзуофей (28.02.2018). Поваренная книга Redis 4.x: более 80 тщательно подобранных рецептов для эффективной разработки и администрирования Redis. С. 316–318. ISBN  9781783988174.
  22. ^ «RedisJSON - тип данных JSON для Redis». oss.redislabs.com. Получено 18 июля 2019.
  23. ^ «Передача авторских прав The Linux Foundation, перелицензирование RethinkDB под ASLv2». github.com. Получено 27 января 2020.

дальнейшее чтение


внешняя ссылка