图形数据库(http://neo4j.org/)和面向对象数据库(http://www.db4o.com/)的区别是什么?
是的,API似乎是主要的区别,但并不是一个表面的区别。概念上,一组对象将形成一个图形,您可以考虑一个以统一方式处理此图形的API。相反,您可以理论上从通用图结构中挖掘模式,并将它们映射到通过某些API公开的对象。但实际产品的API设计通常会对数据实际存储方式和查询方法产生影响,因此创建包装器并使其看起来像其他内容远非易事。此外,面向对象数据库必须提供一些完整性保证和类型结构,而图形数据库通常不会这样做。实际上,严肃的面向对象数据库远非“自由格式”:)
看看HyperGraphDB-它既是完整的面向对象数据库(例如db4o),又是非常先进的图形数据库,无论是在表示和查询能力方面都如此。它能够存储广义超图(其中边缘可以指向多个节点,也可以指向其他边缘),具有完全可扩展的类型系统作为图形等。
与其他图形数据库不同,HyperGraphDB中的每个对象都成为图形中的节点或边缘,并且没有或最小程度的API干扰,并且您可以选择将您的对象表示为图形或将其视为正交于图形结构的方式(作为您节点或边缘的“有效载荷”值)。您可以进行复杂的遍历,定制的索引和查询。
有关HyperGraphDB实际上是ODMS的解释,请参阅Kobrix网站上的博客文章Is HyperGraphDB an OO Database?
另一个重要的区别是,在像neo4j这样的图形数据库中,您可以根据关系(边缘)类型和方向遍历图形,而无需加载完整的节点(包括节点属性/属性)。还可以选择使用neo4j作为对象db的后端,仍然能够使用所有图形内容,请参见:jo4neo此项目采用了一种不同的方法,也可以视为neo4j之上的对象db:neo4j.rb。新选项是使用Spring Data Graph,它通过注释提供了graphdb支持。
相同的问题在此博客文章的评论中提出。
从他们的网站快速浏览:
主要区别在于API的结构方式,而不是您可以使用它们构建的自由形式数据库类型。
db4o使用对象映射-您创建一个Java/C#类,并使用反射将其持久化到数据库中。
neo4j具有明确的操作API。
在我看来,Neo4j更易于交互。
您还可以考虑键值存储-您可以使用其中之一完全相同的自由形式数据库。
在低层次上的差异并不是很大。两者都通过直接链接来管理关系,而不需要昂贵的连接操作。此外,两者都有通过查询语言遍历关系的方法,但图数据库还具有用于递归到第N层的运算符。
但最大的区别在于领域:在图数据库中,一切都基于两种类型:顶点和边,尽管通常您可以将自定义类型定义为顶点或边的子类型。
在面向对象数据库管理系统中,除非您自己编写,否则没有顶点和边的概念。
使用图形数据库,你有一点点的机会它是基于数学图论的。而使用面向对象的数据库,你可以确定它根本不基于任何东西(尤其不是数学理论)。