В чем разница между базами данных на основе графов и объектно-ориентированными базами данных?

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


person Gili    schedule 07.02.2010    source источник


Ответы (6)


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

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

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

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

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

Думаю, разные инструменты для разных работ.

person Johannes Ernst    schedule 10.02.2010
comment
Я бы сказал по-другому: вы можете делать все с объектно-ориентированными базами данных, как с графическими базами данных, и многое другое более эффективным способом, но обычно объектно-ориентированные базы данных более сложны. - person Slider; 02.04.2018
comment
База данных графа может быть эмулирована с помощью классов / объектов (узлов) и ассоциаций / ссылок / указателей (ребер) с использованием объектно-ориентированных абстракций базы данных. - person Slider; 02.04.2018

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

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

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

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

person Boris    schedule 21.02.2010

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

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

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

person nawroth    schedule 08.02.2010

После быстрого просмотра обоих их веб-сайтов:

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

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

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

По моему скромному мнению, с Neo4j было гораздо приятнее общаться.

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

person Will    schedule 07.02.2010

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

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

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

person Lvca    schedule 12.08.2010

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

person Erwin Smout    schedule 08.02.2010