Плюсы/минусы баз данных на основе документов и реляционных баз данных

Я пытался выяснить, могу ли я выполнить некоторые требования к базе данных на основе документов, в данном случае CouchDB. Два общих требования:

  • CRUD объектов с некоторыми полями, которые имеют уникальный индекс на нем
  • веб-приложение электронной коммерции, такое как eBay (лучшее описание здесь).

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

Можете ли вы объяснить мне, если я спрашиваю груши из вяза, когда я пытаюсь использовать базу данных, ориентированную на документы, для этих требований?

Ответ 1

Вам нужно подумать о том, как вы подходите к приложению с ориентацией на документ. Если вы просто попытаетесь воспроизвести, как вы могли бы моделировать проблему в РСУБД, тогда вы потерпите неудачу. Существуют также различные компромиссы, которые вы, возможно, захотите сделать. ([ed: не знаю, как это связано с аргументом, но:] Помните, что дизайн CouchDB предполагает, что у вас будет активный кластер из нескольких узлов, которые могут быть сбой в любое время. Как ваше приложение будет обрабатывать один из узлов базы данных, под ним?)

Один из способов подумать - представить себе, что у вас нет компьютеров, а только бумажных документов. Как бы вы создали эффективный бизнес-процесс с использованием битов бумаги? Как вы можете избежать узких мест? Что, если что-то пойдет не так?

Другим углом, о котором вы должны подумать, является возможная последовательность, когда вы в конечном итоге попадете в последовательное состояние, но в какой-то период вы можете быть несовместимы. Это анафема на земле РСУБД, но чрезвычайно распространена в реальном мире. Пример канонической транзакции - перевод денег с банковских счетов. Как это происходит на самом деле в реальном мире - через единую атомную транзакцию или через разные банки, выдающие кредитные и дебетовые уведомления друг другу? Что происходит, когда вы пишете чек?

Итак, давайте рассмотрим ваши примеры:

  • CRUD объектов с некоторыми полями с уникальным индексом на нем.

Если я правильно понимаю это в терминах CouchDB, вы хотите иметь коллекцию документов, в которых определенное имя будет гарантировано уникальным для всех этих документов? Этот случай обычно не поддерживается, поскольку документы могут создаваться на разных репликах.

Итак, нам нужно посмотреть на проблему реального мира и посмотреть, можем ли мы моделировать это. Вам действительно нужно, чтобы они были уникальными? Может ли ваше приложение обрабатывать несколько документов с одинаковым значением? Вам нужно назначить уникальный идентификатор? Можете ли вы сделать это детерминистически? Обычный сценарий, в котором это требуется, - это то, где вам нужен уникальный последовательный идентификатор. Это трудно решить в реплицируемой среде. Фактически, если уникальный идентификатор должен быть строго последовательным по времени, созданному, это невозможно, если вам нужен идентификатор сразу. Вам нужно расслабиться хотя бы одно из этих ограничений.

  • веб-приложение для электронной торговли, например ebay

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

Ответ 2

Нужно ли нормализовать данные?

  • Да: используйте реляционные.
  • Нет: используйте документ.

Ответ 3

Я нахожусь в одной лодке, сейчас я люблю куддб, и я думаю, что весь функциональный стиль велик. Но когда именно мы начинаем использовать их в ernest для приложений. Я имею в виду, да, мы все можем начать разрабатывать приложения чрезвычайно быстро, без проблем со всеми этими неприятными зависаниями, когда нормальная форма остается на обочине и не использует схемы. Но, чтобы выставить фразу "мы стоим на плечах гигантов". Существует хорошая причина использовать СУРБД и нормализовать и использовать схемы. Моя старая голова оракула, размышляя о данных без формы.

Мой главный фактор wow на couchdb - это материал репликации и система управления версиями, работающая в тандеме.

В прошлом месяце я пробовал свой мозг, пытаясь вырвать механизмы хранения couchdb, видимо, он использует деревья B, но не сохраняет данные на основе нормальной формы. Означает ли это, что он действительно очень умный и понимает, что бит данных реплицируется, поэтому позволяет просто сделать указатель на эту запись дерева B?

До сих пор я думаю о XML-документах, конфигурационных файлах, файлах ресурсов, передаваемых по строкам base64.

Но я бы использовал couchdb для структурных данных. Я не знаю, любая помощь очень ценится по этому поводу.

Может быть полезно хранить данные RDF или даже текст свободной формы.

Ответ 4

Возможность состоит в том, чтобы иметь основную реляционную базу данных, в которой хранятся определения элементов, которые могут быть получены по их идентификаторам, и база данных документов для описания и/или спецификаций этих элементов. Например, у вас может быть реляционная база данных с таблицей Products со следующими полями:

  • ProductID
  • Описание
  • UnitPrice
  • LotSize
  • Технические характеристики

И это поле спецификаций фактически содержит ссылку на документ с техническими характеристиками продукта. Таким образом, у вас есть лучшее из обоих миров.

Ответ 5

БД на основе документов лучше всего подходят для хранения, ну, документов. Lotus Notes является распространенной версией, а Notes - примером. Для того, что вы описываете, eCommerce, CRUD и т.д., Реальные БД лучше разработаны для хранения и извлечения элементов/элементов данных, которые индексируются (в отличие от документов).

Ответ 6

Re CRUD: вся парадигма REST отображается непосредственно на CRUD (или наоборот). Поэтому, если вы знаете, что можете моделировать свои требования с помощью ресурсов (идентифицируемых с помощью URI) и базового набора операций (а именно CRUD), вы можете быть очень близки к системе на основе REST, которую предоставляет довольно много документально ориентированных систем окна.