基于图形的数据库和面向对象的数据库有什么区别?

时间:2010-02-07 20:04:16

标签: database db4o neo4j graph-databases object-oriented-database

基于图形的数据库(http://neo4j.org/)和面向对象的数据库(http://www.db4o.com/)之间有什么区别?

6 个答案:

答案 0 :(得分:37)

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

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

图形数据库的主要数据元素是节点和边缘。

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

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

我认为不同工作的不同工具。

答案 1 :(得分:15)

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

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

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

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

答案 2 :(得分:8)

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

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

this blogpost的评论中提出了同样的问题。

答案 3 :(得分:1)

快速浏览两个网站:

主要区别在于API的结构方式,而不是您可以使用它们构建的自由格式数据库。

db4o使用对象映射 - 您创建一个Java / C#类,它使用反射将其持久保存在数据库中。

neo4j有一个明确的操作API。

Neo4j在我的拙见中似乎更善于与之互动。

您可能还会考虑一个键值存储 - 您可以使用其中一个来创建完全相同的自由格式数据库。

答案 4 :(得分:1)

低级别的差异并不是很大。两者都将关系作为直接链接进行管理,而无需进此外,两者都有一种方法来遍历与Query语言的关系,但是图形数据库的运算符在第N级递归。

但最大的区别在于域:在图形数据库中,所有都基于2种类型:顶点和边缘,即使通常您可以将自己的类型定义为Vertex或Edge的一种子类型。

在ODBMS中,您没有Vertex和Edge概念,除非您自己编写。

答案 5 :(得分:-2)

对于图形数据库,您有一种基于数学图论的可能性。使用面向对象的数据库,您可以确定它基于什么都没有(当然,根本没有数学理论)。

相关问题