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

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

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

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

graphics数据库的主要数据元素是节点和边。

对象数据库不具有在具有自动参照完整性的两件事物之间的(双向)边的概念。图数据库不具有可以为NULL的指针的概念。 (当然可以想象混合动力车。)

就架构而言,对象数据库的模式是应用程序中的任何类的集合。 一个graphics数据库的模式(无论是按照String标签的意义来说是隐含的,还是明确的,例如通过在InfoGrid中声明为模型),独立于应用程序。 这使得它更简单,例如,使用graphics数据库而不是对象数据库来针对相同的数据编写多个应用程序,因为该模式与应用程序无关。 另一方面,使用一个graphics数据库,你不能简单地采取一个任意的对象,并坚持下去。

不同的工具不同的工具,我会想。

是的,API似乎是主要的区别,但并不是真正的肤浅。 从概念上讲,一组对象将形成一个graphics,你可以想象一个统一处理这个graphics的API。 相反,理论上你可以为模式挖掘一个通用的graphics结构,并将它们映射到通过某些API公开的对象。 但是实际产品的API的devise通常会对数据如何被实际存储以及如何被查询产生影响,所以如果要创build一个包装并使其看起来像是其他东西,那将是微不足道的。 另外,面向对象的数据库必须提供一些完整性保证和graphics数据库通常不会做的打字结构。 事实上,严重的面向对象数据库远非“自由格式”:)

看看[HyperGraphDB] [1] – 它既是一个完整的面向对象的数据库(如db4o),也是一个非常先进的graphics数据库,在表示和查询能力方面。 它能够存储广义超图(其中边可以指向多个节点,也可以指向其他边),它具有embedded式graphics等完全可扩展的types系统。

与其他graphics数据库不同的是,在HyperGraphDB中,每个对象都成为graphics中的一个节点或一个边缘,并且没有最小的API入侵,您可以select将对象表示为graphics,或者以与graphics正交的方式对待它们图结构(作为节点或边的“有效载荷”值)。 您可以进行复杂的遍历,自定义索引和查询。

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

正如Will从另一个angular度描述的,graphdb将保持你的数据与你的应用程序类和对象分离。 graphdb还具有更多的内置function来处理graphics,显然 – 就像最短path或深度遍历一样。

另一个重要的区别是,在类似于neo4j的graphdb中,可以基于关系(边)types和方向遍历图,而无需加载完整节点(包括节点属性/属性)。 也可以select使用neo4j作为对象数据库的后端,仍然可以使用所有graphy的东西,请看: jo4neo这个项目有一个不同的方法,也可以作为neo4j: neo4j.rb之上的对象数据库。 一个新的select是使用Spring Data Graph ,它通过注释给出graphdb支持。

在这个博客的评论中也提出了同样的问题。

从他们的网站快速浏览:

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

db4o使用对象映射 – 您创build一个Java / C#类,并使用reflection将其保存在数据库中。

neo4j有一个明确的操作API。

Neo4j在我看来,似乎更好地互动。

您也可以考虑一个键值存储 – 您可以使用其中的一个创build完全相同的自由格式数据库。

低级别的差别并不大。 两者都将关系作为直接链接进行pipe理,而无需昂贵的连接 此外,两者都有一种方式来遍历与查询语言的关系,但graphics数据库有运算符recursion在第N级。

但是最大的区别在于:在Graph数据库中,所有的都是基于顶点和边的两种types,即使通常您可以将自己的types定义为顶点或边的一种子types。

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

对于graphics数据库,你有一个基于math图论的机会。 使用面向对象的数据库,你可以确定它完全不依赖于任何math理论(当然也没有math理论)。

Interesting Posts