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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам