Joh*_*nst 38

我的回答方式不同:对象和图形数据库在两个不同的抽象层次上运行.

对象数据库的主要数据元素是对象,我们从面向对象的编程语言中了解它们的方式.

图数据库的主要数据元素是节点和边.

对象数据库没有具有自动引用完整性等的两个事物之间的(双向)边缘的概念.图形数据库没有可以为NULL的指针的概念.(当然可以想象混合动力车.)

在模式方面,对象数据库的模式是应用程序中的一组类.图形数据库的模式(无论是隐式的,通过String标签的含义,还是显式的,通过声明作为模型,就像我们在InfoGrid所做的那样)独立于应用程序.这使得使用图形数据库而不是对象数据库针对相同数据编写多个应用程序变得更加简单,因为该模式与应用程序无关.另一方面,使用图形数据库,您不能简单地采用任意对象并持久化它.

我会想到不同工作的不同工具.


小智 15

是的,API似乎是主要的区别,但并不是一个肤浅的.从概念上讲,一组对象将形成一个图形,您可以想到一个以统一的方式处理该图形的API.相反,您可以在理论上挖掘模式的通用图形结构,并将它们映射到通过某些API公开的对象.但是实际产品的API设计通常会对数据的实际存储方式,如何查询数据产生影响,因此创建一个包装器并使其看起来像是其他东西也是微不足道的.此外,面向对象的数据库必须提供一些完整性保证和图形数据库通常不会执行的类型结构.事实上,严肃的OO数据库远非"自由形式":)

看一下[HyperGraphDB] [1] - 它既是一个完整的面向对象数据库(如db4o),也是一个非常高级的图形数据库,无论是代表性还是查询功能.它能够存储广义超图(其中边可以指向多个节点,也可以指向其他边),它具有嵌入为图形等的完全可扩展类型系统.

与其他图形数据库不同,在HyperGraphDB中,每个对象都成为图形中的节点或边缘,具有非最小的API入侵,您可以选择将对象表示为图形或以与图形正交的方式处理它们.图结构(作为节点或边的"有效负载"值).您可以执行复杂的遍历,自定义索引和查询.

为什么HyperGraphDB实际上是一个ODMS的解释,请参阅博客文章是HyperGraphDB是一个OO数据库吗?在Kobrix的网站上.


naw*_*oth 8

从另一个角度来看,graphdb会将您的数据与应用程序类和对象分开.graphdb还具有更多内置功能来处理图形,显然 - 如最短路径或深度遍历.

另一个重要区别是,在像neo4j这样的graphdb中,您可以根据关系(边缘)类型和方向遍历图形,而无需加载完整节点(包括节点属性/属性).还可以选择使用neo4j作为对象db的后端,仍然能够使用所有图形内容,请参阅:jo4neo这个项目有一个不同的方法,也可以算作neo4j上的对象db:neo4j.rb.一个新选项是使用Spring Data Graph,它通过注释提供graphdb支持.

这篇博客文章的评论中提出了同样的问题.