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

Database 基于图形的数据库和面向对象数据库之间有什么区别?,database,db4o,neo4j,graph-databases,object-oriented-database,Database,Db4o,Neo4j,Graph Databases,Object Oriented Database,基于图形的数据库()和面向对象的数据库()之间有什么区别?快速浏览这两个数据库的网站: 主要区别在于API的结构方式,而不是可以使用它们构建的自由格式数据库 db4o使用对象映射——创建一个Java/C#类,并使用反射将其持久化到数据库中 neo4j有一个显式的操作API 依我拙见,Neo4j似乎更适合与之互动 你也可以考虑一个键值存储——你可以用相同的一个来创建完全相同的自由形式的数据库。将从另一个角度解析,一个图形数据库将把你的数据与你的应用程序类和对象分开。graphdb还有更多的内置功能

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

快速浏览这两个数据库的网站:

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

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

neo4j有一个显式的操作API

依我拙见,Neo4j似乎更适合与之互动


你也可以考虑一个键值存储——你可以用相同的一个来创建完全相同的自由形式的数据库。

将从另一个角度解析,一个图形数据库将把你的数据与你的应用程序类和对象分开。graphdb还有更多的内置功能来处理图形,很明显,比如最短路径或深度遍历

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


在对的评论中也提出了同样的问题。

对于图形数据库,您有一点可能认为它是基于数学图论的。对于面向对象的数据库,您可以确定它根本没有任何基础(最肯定的是根本没有数学理论)。

我的回答不同:对象和图形数据库在两个不同的抽象级别上运行

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

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

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

就模式而言,对象数据库的模式是应用程序中的任何类集。图形数据库的模式(无论是隐式的,根据字符串标签的含义的约定,还是显式的,通过声明为模型,例如我们在中所做的),都独立于应用程序。例如,这使得使用图形数据库而不是对象数据库针对同一数据编写多个应用程序变得更加简单,因为模式是独立于应用程序的。另一方面,使用图形数据库不能简单地获取任意对象并将其持久化


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

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

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

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


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

低级别的差异并没有那么大。两者都将关系管理为直接链接,而无需昂贵的连接。此外,两者都有一种方法可以遍历与查询语言的关系,但图形数据库中的运算符必须在第n级递归进行

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


在ODBMS中,你们并没有顶点和边的概念,除非你们自己编写。

我会用不同的方式说:你们可以用面向对象的数据库做任何事情,就像用图形数据库一样,而且更高效,但通常面向对象的数据库更复杂。图形数据库可以用类/对象来模拟(节点)和使用面向对象数据库抽象的关联/引用/指针(边)。