В чем разница между графическими базами данных и объектно-ориентированными базами данных? - PullRequest
46 голосов
/ 07 февраля 2010

В чем разница между графическими базами данных (http://neo4j.org/) и объектно-ориентированными базами данных (http://www.db4o.com/)?

)

Ответы [ 6 ]

37 голосов
/ 10 февраля 2010

Я бы ответил по-другому: базы данных объектов и графов работают на двух разных уровнях абстракции.

Основными элементами данных объектной базы данных являются объекты, как мы их знаем из объектно-ориентированного языка программирования.

Основными элементами данных базы данных графа являются узлы и ребра.

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

С точки зрения схемы, схема объектной базы данных - это любой набор классов в приложении.Схема базы данных графа (неявная, согласно соглашению о том, что означают метки String, или явная, путем объявления в качестве моделей, как мы это делаем, например, в InfoGrid ) не зависит от приложения.Это значительно упрощает, например, написание нескольких приложений для одних и тех же данных с использованием базы данных графов вместо базы данных объектов, поскольку схема не зависит от приложения.С другой стороны, используя базу данных графов, вы не можете просто взять произвольный объект и сохранить его.

Различные инструменты для разных заданий, я бы подумал.

15 голосов
/ 21 февраля 2010

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

Взгляните на [HyperGraphDB] [1] - это как полноценная объектно-ориентированная база данных (например, db4o), так и очень продвинутая графовая база данных с точки зрения возможностей представления и запросов. Он способен хранить обобщенные гиперграфы (где ребра могут указывать более чем на один узел, а также на другие ребра), он имеет полностью расширяемую систему типов, встроенную в виде графа и т. Д.

В отличие от других графовых баз данных, в HyperGraphDB каждый объект становится узлом или ребром графа, с минимальным вмешательством API, и у вас есть выбор представления ваших объектов в виде графа или обработки их способом, который ортогонально структуре графа (как значения «полезной нагрузки» ваших узлов или ребер). Вы можете выполнять сложные обходы, индивидуальную индексацию и запросы.

Объяснение, почему HyperGraphDB на самом деле является ODMS, см. В блоге Является ли HyperGraphDB базой данных OO? на сайте Kobrix.

8 голосов
/ 08 февраля 2010

Как расскажет другой аспект, graphdb будет держать ваши данные отделенными от классов и объектов вашего приложения. GraphDB также имеет больше встроенных функций для работы с графами, очевидно - как кратчайший путь или глубокие обходы.

Другим важным отличием является то, что в графе типа DB, например, neo4j, вы можете перемещаться по графику на основе типов отношений (ребер) и направлений без загрузки полных узлов (включая свойства / атрибуты узлов). Существует также выбор использования neo4j в качестве бэкэнда объекта db, при этом все еще можно использовать все графические вещи, см .: jo4neo Этот проект имеет другой подход, который также может считаться объектом db поверх neo4j: neo4j.rb . Новым вариантом является использование Spring Data Graph , который обеспечивает поддержку graphdb посредством аннотаций.

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

1 голос
/ 13 августа 2010

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

Но самое большое различие заключается в домене: в базах данных Graph все основано на 2 типах: вершинах и ребрах, даже если обычно вы можете определить свои собственные типы как своего рода подтипы Vertex или Edge.

В ODBMS у вас нет концепций Vertex и Edge, если вы не пишете свои собственные.

1 голос
/ 07 февраля 2010

Из быстрого просмотра обоих их сайтов:

Основное различие заключается в том, как структурированы API, а не в виде базы данных произвольной формы, которую вы можете создать из них.

db4o использует сопоставление объектов - вы создаете класс Java / C # и используете отражение для сохранения его в базе данных.

neo4j имеет явный API манипулирования.

По моему скромному мнению, Neo4j гораздо приятнее взаимодействовать.

Вы также можете рассмотреть хранилище значений ключей - вы можете создать точно такую ​​же базу данных в свободной форме с одной из них.

0 голосов
/ 09 февраля 2010

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

...