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

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

6 ответов


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

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

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

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

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

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


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

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

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

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


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

другое важное отличие состоит в том, что в graphdb, таком как neo4j, вы можете пересекать график на основе типов отношений (ребер) и направлений без загрузки полных узлов (включая свойства/атрибуты узлов). Также есть выбор использование neo4j в качестве бэкэнда объектной БД, по-прежнему имея возможность использовать все графические материалы, см.:jo4neo этот проект имеет другой подход, который также может считаться объектом db поверх neo4j:СУБД Neo4j.. Новая опция-использовать График Весенних Данных, что дает поддержку graphdb через аннотации.

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


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

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

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

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

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

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


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

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

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


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