Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

As Will descibes from another angle, graphdb будет хранить ваши данные отдельно от ваших классов приложений и объектов. Graphdb также имеет более встроенную функциональность для обработки графиков, очевидно - как кратчайший путь или глубокие обходы.

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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