Почему OODBMS не так широко распространены, как RDBMS? - PullRequest
34 голосов
/ 29 августа 2009

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

Если парадигма объектно-ориентированного программирования так широко распространена, разве мы не видим много OODBMS? Разве они не будут работать лучше, чем RDBMS + OR / M?

Ответы [ 7 ]

37 голосов
/ 29 августа 2009

Одной из причин того, что СУБД сохранила популярность, является то, что она является признанной технологией, хорошо понятой и имеет стандартный язык (SQL), который поддерживают несколько поставщиков. У него также есть несколько хороших интерфейсов, таких как ODBC и JDBC, которые очень хорошо связывают его с разными языками. Стабильный API - важный фактор сохранения доминирующей технологии.

В отличие от этого, для OODBMS нет четкой модели, нет ни стандартного языка, ни стандартного API. Нет даже стандарта де-факто, имеющего реализацию от ведущего поставщика.

Концепция OODBMS может работать лучше, чем RDBMS + ORM. Это полностью зависит от реализации. Но также верно и то, что OODBMS не решают тот же набор проблем, который хорошо решают RDBMS. Некоторые задачи управления данными намного проще, если у вас есть референтная целостность и реляционные заголовки, обеспечиваемые решением для управления данными. Эти функции отсутствуют в модели OODBMS (по крайней мере, пока).

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

21 голосов
/ 15 ноября 2009

Самая большая проблема, которую я видел, - это отсутствие стандартизации. В мире RDBMS вы можете продвинуться далеко вперед с любой случайной базой данных, если знаете SQL. Они в основном все это реализуют, с небольшими изменениями. Я не знаю ни одной существующей СУБД, которая не поддерживает SQL: вы можете почти взаимозаменяемо использовать «СУРБД» и «SQL».

Ближайшая вещь для OODBMS - это, возможно, OQL, который был полным провалом.

Ни одна база данных никогда не реализовывала большую ее часть. Я использовал довольно хорошую коммерческую OODBMS пару лет назад, но (по состоянию на 2007 год или около того, и это было на основной версии 8 или 9), он даже не поддерживал запросы к объекту по его имени. В руководстве просто сказано, что до этой части OQL они еще не дошли. (Я не уверен, но вы могли бы сделать это в нативном вызове).

Большинство объектных баз данных, которые я видел недавно, имеют интерфейсы на родном языке, а не язык запросов, такой как OQL. Система, которую я использовал, например, поддерживала (только!) Perl и VB, IIRC. Ограничение вашей аудитории только парой языков (или принуждение их писать обертки, как мы это делали) не способ завоевать друзей.

Из-за этого нет конкуренции и, следовательно, нет простого плана резервного копирования. Если вы поместите свои данные в MS-SQL, и Microsoft перестанет их поддерживать, вы, вероятно, сможете сбросить свои данные в Postgres и перенести свои запросы без особых проблем. (Это может быть много работы, если у вас много запросов, но я не сомневаюсь, что вы могли бы сделать это. Это боль, но технически не сложно.) Или Oracle, или MySQL, или многие другие, оба коммерческие и бесплатно.

С OODBMS такого не существует: если тот, который вы используете, обанкротился, или он идет в направлении, которое вам не полезно, или вам не хватает ключевой функции, которая вам нужна, вы можете ' просто скопируйте ваши данные в конкурирующую OODBMS и перенесите ваши запросы. Вместо этого вы говорите об изменении основной библиотеки и внесении значительных изменений в архитектуру. На самом деле, вы ограничены коммерческой OODBMS, которой вы действительно доверяете (вы можете назвать хотя бы одну?), Или OODBMS с открытым исходным кодом, которой вы доверяете свою команду, чтобы поддерживать ее, когда дела идут плохо.

Если это звучит как FUD, извините, я не собирался этого делать. Но я был там, и с точки зрения управления проектами я не решался бы вернуться, хотя среда программирования может быть прекрасной. Еще один способ думать об этом: посмотрите, насколько популярно функциональное программирование сегодня, несмотря на то, что это хорошая идея. OODBMS такие же, но хуже, так как это не просто ваш код, но ваш код и ваши данные. Я бы с удовольствием начал сегодня крупный проект в Эрланге, но все же не решался бы использовать OODBMS.

Поставщики OODBMS: чтобы изменить это, вам нужно , чтобы было проще оставить вас для ваших конкурентов . Вы могли бы выкопать OQL и фактически реализовать это, или сделать это на уровне API, как ODBC, или как угодно. Даже стандартный формат дампа (использующий JSON?) И инструменты для импорта / экспорта в / из этого для нескольких OODBMS, были бы отличным началом.

16 голосов
/ 29 августа 2009

Данные часто живут дольше и важнее программных. Таким образом, даже если вы начинаете разработку новых месторождений сегодня, вы должны рассмотреть общую картину. Есть больше инструментов, процессов и опытных людей, работающих с системами RDBM. Не только в рамках программы, но и в плане планирования мощностей, интеллектуального анализа данных, создания отчетов, ETL, интеграции с другими источниками данных и т. Д. СУБД и связанные с ней инструменты настолько укоренились, проверены и мощны, что я не вижу никакого стратегического смысла в использовании чего-либо еще. Может быть, в какой-то маленькой нише, но не в целом.

6 голосов
/ 29 августа 2009

Объектные базы данных имеют очень хорошую нишу для таких задач, как представление геометрии, например. САПР, где графы объектов могут быть очень глубокими. В большинстве реляционных систем быстродействие JOIN быстро снижается примерно до 7 таблиц, поэтому глубоко САПР в CAD лучше работают в объектных базах данных.

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

5 голосов
/ 03 декабря 2012

Для триальных примеров OODB и RDB могут сильно различаться. Особенно, если вы работаете с небольшим количеством данных, которые вы можете тривиально прочитать сразу в память и записать все сразу. Но в конечном итоге OODB необходимо сохранять данные в очень похожем на RDB формате - они не так уж отличаются.

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

Далее представьте, что мы хотим сохранить список объектов (A1, A2, A3 ...), связанных с другим объектом (B). Мы уже установили, что будем хранить ключи вместо того, чтобы сохранять сами объекты дважды. Но храните ли вы ключи от объектов A1, A2, A3 ... на объекте B, или вы храните ключ для объекта B на A? Если вы храните их первым способом, и у вас есть все, что вы хотите, вы можете быстро получить соответствующие B. Второй способ - обратное. Но в любом случае это односторонняя сделка. Если вы хотите сделать запрос на обратную запись того, что вы сохранили, а ваши объекты хранятся в формате XML или JSON, это неэффективный синтаксический анализ самой ненужной информации, чтобы найти ключ в каждом файле. Не лучше ли хранить их в формате, где каждое поле было разделено, как столбцы в таблице?

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

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

Вот почему существует нечто вроде Hibernate - поместить объектно-ориентированный интерфейс в эффективную систему хранения СУБД. Там, где вы видите другие виды хранилищ, действительно сияют различные проблемные области:

  • Для любого вида неструктурированного хранилища документов (блоги, системы контроля версий или чего-либо, что не может быть сопоставлено со строками и столбцами), идеально подходят различные базы данных NoSQL
  • Хранение простой в запросе, но значимой истории изменений (например, различий в управлении исходным кодом) не очень красиво в RDB. Что-то вроде Datomic может создавать здесь новую территорию.
  • Каждый раз, когда ваш граф объектов прост или мал, накладные расходы на базу данных могут не потребоваться.

OODB не могут работать лучше, чем RDB, потому что они принципиально не отличаются.
RDB здесь и останутся, потому что сохранение больших графов объектов таким образом, чтобы оно занимало мало места и занимало много времени как для сохранения, так и для извлечения, а также отказоустойчиво и имело некоторую гарантию целостности данных, является проблемой, для решения которой RDB были предназначены для решения. первое место. Вот почему JPA и Hibernate также остаются здесь - потому что они ликвидируют разрыв между объектной и реляционной моделями данных. Объектная модель для простоты манипулирования в памяти и реляционная для постоянства.

3 голосов
/ 29 августа 2009

Одним словом Совместимость (громкое слово в пятницу вечером )

Большинству предприятий приходится работать с устаревшими системами, работающими на СУБД. Если бы они использовали OODBMS, им все равно был бы необходим доступ к RDBMS для определенных функций. Проще поддерживать один способ доступа к данным, чем два.

Когда у вас есть такие громкие имена, как Oracle и SQL Server в мире OODBMS, и проверенная производительность в различных средах, ТОГДА вы увидите больше проектов, использующих их.

0 голосов
/ 29 августа 2009

Я думаю, что это случай

Если оно не сломано, не меняйте его.

Реляционные базы данных чрезвычайно укоренились.

...