Почему я должен использовать базу данных на основе документов вместо реляционной базы данных?

Почему я должен использовать базу данных на основе документов, такую ​​как CouchDB, вместо реляционной базы данных. Существуют ли какие-либо типичные виды приложений или доменов, для которых база данных на основе документов более подходит, чем реляционная база данных?


person Bartosz Blimke    schedule 14.01.2009    source источник
comment
Возможно, документно-ориентированная база данных может быть в чем-то похожа на базу данных значения атрибута объекта (EAV).   -  person ChrisW    schedule 14.01.2009


Ответы (7)


Наверное, не стоит :-)

Второй наиболее очевидный ответ - вы должны использовать его, если ваши данные не реляционные. Обычно это проявляется в том, что у вас нет простого способа описать данные как набор столбцов. Хорошим примером является база данных, в которой вы фактически храните бумажные документы, например сканированием офисной почты. Данные представляют собой отсканированный PDF-файл, и у вас есть некоторые метаданные, которые всегда существуют (отсканированные, отсканированные, тип документа), и множество возможных полей метаданных, которые существуют когда-либо (номер клиента, номер поставщика, номер заказа, хранить в файле до тех пор, пока, OCRed fulltext и т. Д.). Обычно вы заранее не знаете, какие поля метаданных вы добавите в течение следующих двух лет. Такие вещи, как CouchDB, работают с такими данными намного лучше, чем реляционные базы данных.

Мне также лично нравится тот факт, что мне не нужны никакие клиентские библиотеки для CouchDB, кроме HTTP-клиента, который в настоящее время включен почти во все языки программирования.

Вероятно, наименее очевидный ответ: если вы не чувствуете боли при использовании СУБД, оставайтесь с ней. Если вам всегда приходится работать с реляционной СУБД, чтобы выполнить свою работу, возможно, стоит взглянуть на базу данных, ориентированную на документы.

Для получения более подробного списка просмотрите эту публикацию Ричарда Джонса.

person max    schedule 20.01.2009
comment
Я никогда не видел, чтобы какая-либо схема базы данных за два года напоминала исходную схему, с которой мы начали ... так что все равно (а это не так ...), вы всегда должны использовать базу данных без схемы = ориентированную на документы; которое я считаю довольно вводящим в заблуждение именем ... - person ᆼᆺᆼ; 06.01.2012
comment
@ int3 Если вы не можете описать свои данные как набор столбцов, как вы должны писать интеллектуальные запросы к этим данным? - person Clay Smith; 02.09.2015

CouchDB (с их веб-сайта)

  • Сервер базы данных документов, доступный через RESTful JSON API. Как правило, реляционные базы данных не просто доступны через службы REST, но требуют гораздо более сложного SQL API. Часто эти API (JDBC, ODBC и т. Д.) Довольно сложны. REST довольно прост.

  • Специально и без схемы с плоским адресным пространством. Реляционные базы данных имеют сложную фиксированную схему. Вы определяете таблицы, столбцы, индексы, последовательности, представления и прочее. Диван не требует такого сложного, дорогостоящего и хрупкого передового планирования.

  • Распределенный, с надежной инкрементальной репликацией с двунаправленным обнаружением конфликтов и управлением ими. Некоторые коммерческие продукты SQL предлагают это. Из-за SQL API и фиксированных схем это сложно, сложно и дорого. Для Дивана это кажется простым и недорогим.

  • С возможностью запросов и индексирования, с таблично-ориентированным механизмом отчетности, использующим Javascript в качестве языка запросов. То же самое и с SQL и реляционными базами данных. Здесь ничего нового.

Так. Почему CouchDB?

  • REST проще, чем JDBC или ODBC.
  • Нет схемы проще, чем схема.
  • Распространяется простым и недорогим способом.
person S.Lott    schedule 14.01.2009
comment
Хотя я большой поклонник баз данных NoSQL, первое утверждение (REST проще, чем JDBC) очень сомнительно. - person ᆼᆺᆼ; 06.01.2012
comment
Протокол REST мне кажется довольно простым, поскольку это всего лишь HTTP: без сохранения состояния, несколько методов и т. Д. это не кажется более простым, основанным только на сохранении состояния. - person S.Lott; 06.01.2012
comment
@ S.Lott Разве ответ не должен быть более общим, а не ориентированным только на CouchDb? - person Pacerier; 06.07.2012
comment
хрупкое перспективное планирование против чего? По моему опыту, альтернативой является отсутствие планирования, что приводит к спагетти-структуре данных, изменяемой по прихоти. - person Tejay Cardon; 01.05.2017

Для тупого хранения и обслуживания данных других серверов.

Последние пару недель я играл с приложением Lifestream, которое опрашивает мои ленты (Delicious, flickr, github, twitter ...) и сохраняет их в couchdb. Прелесть couchdb в том, что она позволяет мне сохранять исходные данные в их исходной структуре без дополнительных затрат. Я добавил поле «класс» к каждому документу, в котором хранится исходный сервер, и написал класс рендеринга javascript для каждого источника.

Обобщая, всякий раз, когда ваш сервер связывается с другим сервером, лучше всего использовать хранилище без схемы, поскольку вы не можете контролировать схему. В качестве бонуса couchdb использует собственные протоколы серверов и клиентов - JSON для представления и HTTP REST для транспорта.

person daonb    schedule 15.02.2009
comment
Почему бы просто не сохранить их в файле или в файле для каждого канала? - person j_random_hacker; 24.05.2010
comment
потому что couchdb также позволяет создавать интересные представления с помощью map / reduce. Например, я могу создать представление на основе источника данных или могу вычислить итоги для каждого источника. - person daonb; 01.06.2010
comment
Это замечательный момент ... если вы потребляете данные и не контролируете схему входящих данных - используйте хранилище документов. - person Joshua Robinson; 19.09.2016
comment
Это первый действительно убедительный аргумент, который я слышал в пользу ценности баз данных NoSQL. - person Caleb McNevin; 29.01.2020

На ум приходит быстрая разработка приложений.

Когда я постоянно развиваю свою схему, меня постоянно расстраивает необходимость поддерживать схему в MySQL / SQLite. Хотя я еще не слишком много работал с CouchDB, мне нравится, насколько просто развить схему в процессе RAD.

Случай, когда вы, возможно, не захотите использовать нереляционную базу данных, - это когда у вас много отношений «многие ко многим»; Мне еще предстоит сообразить, как создавать хорошие функции MapReduce для таких отношений, особенно если вам нужны метаданные в отношении присоединения. Я не уверен, но я не думаю, что функции CouchDB Map могут вызывать свои собственные запросы к базе данных, поскольку это потенциально может вызвать бесконечные циклы.

person pixelcort    schedule 22.01.2009
comment
Отличный момент. Хранилища данных с документами (и другими схемами) отлично подходят для быстрой разработки на ранней стадии. Однако по тем же причинам они отлично подходят для прототипирования на ранней стадии, они проблематичны для надежных производственных приложений. - person Tejay Cardon; 01.05.2017

Используйте базу данных на основе документов, когда вам не нужно хранить данные в таблицах с полями одинакового размера для каждой записи. Вместо этого вам необходимо сохранить каждую запись как документ с определенными характеристиками. Любое количество полей любой длины может быть динамически добавлено в документ в любое время без необходимости предварительного «изменения таблицы». Поля в документах также могут содержать несколько фрагментов данных.

person smdelfin    schedule 27.01.2010

Чтобы подробнее рассказать о smdelfin: гибкость. Вы можете хранить данные в любой структуре (неструктурированной и все такое), и каждый документ может быть совершенно другим. CouchDB особенно полезен, потому что с их индексами «представления» вы можете отфильтровывать определенные документы и запрашивать только это представление, когда вам нужны эти подмножества вашей базы данных.

Моя самая большая победа в базах данных документов, которые хранят данные в формате JSON: это собственный формат для JavaScript. Таким образом, веб-приложения JavaScript невероятно хорошо работают с CouchDB. Недавно я сделал веб-приложение, которое использует CouchDB, и оно очень быстрое, а также способно обрабатывать постоянно меняющуюся структуру данных.

person MitchB    schedule 31.10.2019

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

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

Еще одно преимущество - простота использования баз данных на основе документов в веб-разработке. Более подробное сравнение моделей баз данных NoSQL можно найти в этом источнике: https://arxiv.org/ftp/arxiv/papers/1509/1509.08035.pdf

person Ecaterina Vidrascu    schedule 03.05.2020