Веб-разработка - Object db vs Relational db - PullRequest
11 голосов
/ 19 марта 2011

Какие плюсы и минусы использования объектной базы данных или реляционной базы данных для обычной веб-разработки, которая включает в себя много CRUD?

ОБНОВЛЕНИЕ: я снова открыл награду за награду, чтобы дать Невиллу ее.

Ответы [ 8 ]

19 голосов
/ 19 марта 2011

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

Реляционная модель является более мощной, чем объектные модели, с точки зрения видов вопросов, которые вы можете задать своим данным. К сожалению, SQL отбросил большую часть выразительных возможностей, на которые способна реляционная модель, но даже в этой разбавленной форме все еще проще выражать запросы в SQL, чем в обычной базе данных OO (будь то ORM или OODBMS).

Запросы в OODBMS в основном выполняются навигационными операторами, а это означает, что если в вашей базе данных по продажам есть продавцы, владеющие своими продажами, то запросы о ежемесячных продажах для определенного SKU будут не только крайне медленными, но и очень неудобными. выражать. Рассмотрим также модель безопасности, которая предоставляет сотрудникам доступ к зданиям. Какой правильный способ выразить это? Должны ли сотрудники иметь набор зданий, к которым у них есть доступ, или здания должны содержать набор сотрудников, которые имеют к ним доступ? Более конкретно, почему один класс должен иметь коллекцию другого, включенного в его дизайн? И какой бы вы ни выбрали, как бы вы спросили, какие пары сотрудников имеют более одного здания, к которому они могут получить доступ совместно? Не существует простой навигационной схемы, которая могла бы ответить на такой вопрос. Разумное решение - объект «Доступ» - это, по сути, возврат к правильно нормализованной реляционной схеме, и для этого требуется некоторый язык запросов, который в значительной степени заимствует из реляционной алгебры, чтобы ответить на вопрос без значительных перерасходов. проводная передача данных.

Также рассмотрим еще одну важную силу, о которой говорят в OODBMS: методы, особенно наследование виртуальными методами. Спортивная клиника может иметь разные показатели риска получения травмы для разных видов спортсменов. В мире ORM это будет автоматически выражаться в виде иерархии классов с Athlete в корне и виртуальным методом int InjuryRiskScore(), реализуемым каждым производным классом. Проблема заключается в том, что этот метод неизменно реализуется на клиенте, а не на бэкэнде, поэтому, если вы хотите найти 10 спортсменов с самым высоким риском по всем видам спорта в вашей клинике, единственный способ сделать это - собрать всех спортсменов через провод и передать их через очередь приоритетов на стороне клиента. Я также не знаком с миром OODBMS, но думаю, что возникает та же проблема, так как механизмы хранения обычно хранят достаточно данных для регидратации объектов на языке программирования клиента. В реляционной модели или SQL вы можете выразить оценку риска травмы как представление, которое может быть просто объединением представлений для каждого спортсмена. Тогда вы просто задаете вопрос. Или вы можете задать более сложные вопросы, такие как: «У кого был самый большой рост риска травм со времени проверки в прошлом месяце?» или даже «Какой показатель риска оказался лучшим предиктором травмы за последний год?». Самое главное, что на все эти вопросы можно получить ответы внутри СУБД, причем не более, чем вопрос и ответ, передаваемый по проводам.

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


На историческом примечании реляционная модель возникла в ответ на катастрофическое состояние дел с существующими сетевыми и иерархическими СУБД того времени и в значительной степени (и справедливо) вытеснила их для всех, кроме небольшой ниши прикладных областей (и даже они, вероятно, остались в основном из-за того, что SQL не смог обеспечить питание RM). Глубоко иронично то, что большая часть индустрии сейчас тоскует по «старым добрым временам» теоретических сетевых баз данных, а это, по сути, то, к чему стремятся OODBMS и текущий набор баз данных NoSQL. Эти усилия справедливо критикуют SQL за его неспособность удовлетворить сегодняшние потребности, но, к сожалению, они предположили (ошибочно и, вероятно, из-за чистого невежества), что SQL является высокоточным выражением реляционной модели. Следовательно, они пренебрегали даже рассмотрением самой реляционной модели, которая практически не имеет ограничений, которые уводят многих от SQL, часто к OODBMS.

14 голосов
/ 08 апреля 2011

Реляционная база данных:

Плюсы:

  • Отработанные технологии - множество инструментов, разработчиков, ресурсов
  • Широкий выбор открытых и коммерческих продуктов
  • Известен для масштабирования до очень больших сайтов и очень высокой пропускной способности.
  • Выражает многие проблемные области логическим и "программируемым" способом.
  • Довольно стандартный язык (SQL)
  • Несоответствие импеданса понятиям ОО - моделирование "наследования" в базе данных не является естественным
  • Иерархические структуры обычно требуют специфических для поставщика расширений для языка
  • Нереляционные данные (например, документы) не подходят естественным образом
  • Изменения в бизнес-сфере могут быть трудноосуществимыми после определения схемы

OOBDMS

Плюсы:

  • Приспособление к концепциям ОО
  • Теоретически, разработчик должен работать только на одном языке - детали персистентности абстрагируются.Это должно повысить производительность

Минусы:

  • Значительно меньше доступных инструментов / ресурсов / разработчиков.
  • Нет общепринятых стандартов
  • "«черный ящик»: подход к постоянству может усложнить настройку производительности
4 голосов
/ 08 апреля 2011

Я могу ответить на ваш вопрос относительно одной базы данных объектов, которую я хорошо знаю: ZODB .

ZODB позволяет вам сохранять свои модели данных почти полностью прозрачно. Его использование составляет что-то вроде:

 # 'Persistent' allows us to save things transparently
 class Car(Persistent):
   def set_wheels(number)
      self.wheels = number

 # 'database' is a ZODB database
 database.car = Car()
 database.car.set_wheels(3)

Вам придется долго смотреть, чтобы найти такую ​​читаемость с помощью RDMBS. Что есть большой плюс в использовании ZODB в веб-приложении.

Большим недостатком, как подчеркивает Марчелло, является отсутствие мощных запросов. Отчасти это побочный эффект удобства идиомы выше. Следующее полностью нормально, и все будет сохранено в базе данных:

 database.car.colour = "yellow"
 database.car.owner = "Trotter"
 database.car.neighbour = Car()

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

Итак, все зависит от того, что вы подразумеваете под «обычной веб-разработкой». Многие веб-сайты на самом деле не требуют сложных многомерных запросов, и поиск за линейное время не представляет никакой проблемы. В этих случаях использование СУБД может, по моему мнению, усложнить ваш код. Я написал много приложений типа CMS, использующих исключительно объектную базу данных. Много CRUD не особенно вступает в это; ZODB очень зрелый, хорошо масштабируется и кэшируется.

Однако, если вы пишете веб-приложение, которое должно составлять сложные бизнес-отчеты в соответствии с требованиями Google Analytics, или какую-то систему управления складскими запасами со многими терабайтами данных, то вы определенно захотите СУРБД.

Подводя итог, можно сказать, что объектная база данных может обеспечить удобочитаемость и удобство обслуживания за счет производительности сложных запросов. Конечно, читаемость - это вопрос мнения, и вы не можете игнорировать тот факт, что гораздо больше разработчиков знают SQL, чем диалекты различных объектных баз данных.

2 голосов
/ 16 апреля 2011

Относительная дБ

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

Против

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

Объект БД

  • Высокая производительность
  • Быстрее, не требуется никаких соединений
  • Механизм управления версиями
  • Навигационный интерфейс для операций (например, обход графика)
  • Object Query Language извлекает объекты декларативно
  • сложные типы данных
  • идентификатор объекта, т.е. equals (), в котором идентичность объекта не зависит от значения и обновлений
  • облегчает совместное использование объектов
  • классы и иерархии (наследование и инкапсуляция)
  • поддержка отношений
  • интегрирован с постоянным языком, таким как ODL
  • поддержка атомарности
  • поддержка вложенных отношений
  • семантическое моделирование

Против

  • Нет математического обоснования как RDB (см. Кодд)
  • минусы ориентации объекта
  • постоянство трудно для сложных структур, некоторые данные должны быть переходными

Объектно-реляционные базы данных (Возможно, вы видели UDT!)

  • поддержка сложных типов данных, таких как сбор, мультимножества и т. Д.
  • объектно-ориентированное моделирование данных
  • расширенный SQL и расширенные типы
  • поддержка наследования UDT
  • мощный язык запросов

Различные подходы (OO, Relational DB или OODB) могут быть необходимы для различных приложений

Ссылки

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

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

Манифест ООДМС

ODMG * ​​1124 *

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

Манифест объектно-ориентированной базы данных

Объектно-ориентированные базы данных

Объектные реляционные базы данных в СУБД

Критерии полноты для объектно-реляционных систем баз данных

Сравнения

http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

http://en.wikipedia.org/wiki/Comparison_of_object_database_management_systems

http://en.wikipedia.org/wiki/Comparison_of_object-relational_database_management_systems

2 голосов
/ 09 апреля 2011

В обычной веб-разработке я использую Seaside на Gemstone. Для большинства приложений это означает, что я пишу нулевой код подключения к базе данных. Он работает, масштабируется, разработка идет в пять раз быстрее.

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

Преимущества:

  • меньше кода, более быстрая разработка;
  • гораздо лучшая масштабируемость;
  • может работать с более сложными моделями;
  • намного лучшая ловкость проекта;
  • я упомянул гибкость;
  • может обрабатывать изменения в моделях классов, не только данных, но и кода;

Недостатки:

  • вам, вероятно, придется самостоятельно обучать разработчиков;
  • тот, который вам нужен (драгоценный камень), стоит больших денег для больших систем
1 голос
/ 07 апреля 2011

В контракте с подробным и хорошо продуманным ответом Марсело я бы сказал, что, исходя из формулировки вашего вопроса "регулярная веб-разработка", я бы сказал, что вам будет трудно сказать,найдите достаточно профессионалов, чтобы оправдать использование объектной БД над традиционной реляционной БД, для простого факта, что больше ресурсов / разработчиков / учебных пособий / и т. д., которые более знакомы с традиционной реляционной моделью, и как использовать это для достижения «обычной веб-разработки»".

Тем не менее, я думаю, что с некоторыми из современных ORM вы получаете немного лучшего из обоих миров, поскольку ваши базовые данные хранятся в хорошо понятной RDBMS (которая, вероятно, стабильна,поддерживается и т. д.), но вы все равно можете абстрагироваться от некоторых возможностей моделирования объектов, которые (возможно) могут быть более подходящими для разработки приложений CRUD.

Я признаю, что не очень хорошо разбираюсь в текущемвозможности современных OODBMS, однако, если вы не находитесь в области, которая полностьюподходящий для достижения идеального объектного представления вашего домена (и у вас есть талант к объектному моделированию), я бы остановился на РСУБД для вашего постоянного хранилища.

Надеюсь, это поможет!

1 голос
/ 04 апреля 2011

Я думаю, что все зависит от специфики вашего вопроса. (Я действительно иду на конечности здесь, я знаю.)

Все, что мы знаем, это то, что вы хотите использовать БД для веб-разработки, и вы будете выполнять множество операций с данными.

Один из важных вопросов, который следует задать себе: насколько важно, чтобы БД была тесно интегрирована с объектами, которыми вы управляете? Чем больше это необходимо, тем больше объектно-ориентированная БД рекомендует себя.

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

Подумайте об операциях, которые вам понадобятся. Вам понадобится анализ всех видов предметов с разными атрибутами? Сколько вам понадобится, чтобы ваша БД соответствовала будущему?

Я должен добавить, что если ваша БД, скорее всего, будет довольно маленькой, производительность не будет главной проблемой. Но если производительность, на самом деле, является проблемой, у вас есть много поводов для беспокойства, помимо ОО или реляционных БД. (Просто чтобы выбрать один пример из мира реляционных БД, какую форму нормализации следует использовать? Это чрезвычайно важный и сложный вопрос. Поддерживаете ли вы операционную систему или хранилище данных? Знаете ли вы заранее, что определенные запросы первостепенной важности или незначительной важности? & c.)

Помимо вопроса производительности БД и интеграции с вашей объектной моделью, есть и другие реальные вопросы, которые нужно задать. Есть ли у вас ограничения дискового пространства / сервера / пропускной способности? Будете ли вы предлагать веб-пользователям лишь небольшое количество операций, или люди, которых вы даже не знаете, будут создавать свои собственные запросы / правки?

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

Если вы сможете ответить на эти и аналогичные вопросы, даже если ответ «Я не знаю», вы сможете получить намного лучшее направление в том, как действовать.

0 голосов
/ 19 марта 2011

Это в значительной степени объясняет плюсы и минусы:

http://en.wikipedia.org/wiki/Object_database

...