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

52
6个回答

41
我会有不同的回答:对象数据库和图形数据库在抽象层面上运作不同。
对象数据库的主要数据元素是对象,就像我们从面向对象编程语言中所知道的那样。
图形数据库的主要数据元素是节点和边。
对象数据库没有双向边的概念,也没有自动引用完整性等。图形数据库没有指针可以为NULL的概念。(当然,可以想象混合体。)
在模式方面,对象数据库的模式是应用程序中的类集合。图形数据库的模式(无论是隐式地,通过字符串标签意味着什么的约定,还是显式地,通过声明为模型,例如我们在InfoGrid中所做的)独立于应用程序。这使得使用图形数据库而不是对象数据库编写多个应用程序来处理相同的数据更加简单,因为模式是与应用程序无关的。另一方面,使用图形数据库,您不能简单地取一个任意对象并将其持久化。
我认为不同的工具适用于不同的工作。

我会用不同的方式来说:你可以用面向对象数据库做任何图形数据库能做的事情,而且更加高效,但通常面向对象数据库更加复杂。 - Slider
可以使用面向对象的数据库抽象来模拟图形数据库,其中类/对象(节点)和关联/引用/指针(边)被表示为对象。 - Slider
对象数据库肯定可以具有双向关系和引用完整性。Objectivity/DB自1989年以来一直支持这两个功能。我不确定为什么您决定将对象数据库的模式与应用程序绑定,而图形数据库的模式独立于任何应用程序。它们都只是包含持久化数据的数据库。可能存在与任何一种数据库相关联的应用程序,也可能在无代码环境中运行。 - djhallx

14

是的,API似乎是主要的区别,但并不是一个表面的区别。概念上,一组对象将形成一个图形,您可以考虑一个以统一方式处理此图形的API。相反,您可以理论上从通用图结构中挖掘模式,并将它们映射到通过某些API公开的对象。但实际产品的API设计通常会对数据实际存储方式和查询方法产生影响,因此创建包装器并使其看起来像其他内容远非易事。此外,面向对象数据库必须提供一些完整性保证和类型结构,而图形数据库通常不会这样做。实际上,严肃的面向对象数据库远非“自由格式”:)

看看HyperGraphDB-它既是完整的面向对象数据库(例如db4o),又是非常先进的图形数据库,无论是在表示和查询能力方面都如此。它能够存储广义超图(其中边缘可以指向多个节点,也可以指向其他边缘),具有完全可扩展的类型系统作为图形等。

与其他图形数据库不同,HyperGraphDB中的每个对象都成为图形中的节点或边缘,并且没有或最小程度的API干扰,并且您可以选择将您的对象表示为图形或将其视为正交于图形结构的方式(作为您节点或边缘的“有效载荷”值)。您可以进行复杂的遍历,定制的索引和查询。

有关HyperGraphDB实际上是ODMS的解释,请参阅Kobrix网站上的博客文章Is HyperGraphDB an OO Database?


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

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

相同的问题在此博客文章的评论中提出。


1

从他们的网站快速浏览:

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

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

neo4j具有明确的操作API。

在我看来,Neo4j更易于交互。

您还可以考虑键值存储-您可以使用其中之一完全相同的自由形式数据库。


1

在低层次上的差异并不是很大。两者都通过直接链接来管理关系,而不需要昂贵的连接操作。此外,两者都有通过查询语言遍历关系的方法,但图数据库还具有用于递归到第N层的运算符。

但最大的区别在于领域:在图数据库中,一切都基于两种类型:顶点和边,尽管通常您可以将自定义类型定义为顶点或边的子类型。

在面向对象数据库管理系统中,除非您自己编写,否则没有顶点和边的概念。


在对象数据库中,每个类类型都是节点、边或两者兼备。一个名为“Person”的类,其中包含一个名为“friends”的属性,该属性是指向“FriendOf”类的引用列表,该类包含两个对“Person”类型的引用和一个日期属性“metOn”,将被视为一条边。Person类的实例既是数据库中的对象又是节点,而FriendOf的实例既是对象又是边。 - djhallx

-3

使用图形数据库,你有一点点的机会它是基于数学图论的。而使用面向对象的数据库,你可以确定它根本不基于任何东西(尤其不是数学理论)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接