12

有人可以解释文档数据库如何作为图形数据库工作吗?

ArangoDB 和 Neo4j 有什么区别?

4

1 回答 1

12

免责声明:我是来自 ArangoDB 的 Max,核心开发人员之一。

首先,关于这个问题和其他相关问题的详细讨论可以在我的文章数据建模中的图表——皇帝是裸体的吗?,但我会在这里简明扼要地回答这两个问题。

(1) 将图存储在文档存储中相对容易(就像在关系数据库中一样),例如可以简单地将每个顶点的文档存储在“顶点集合”中,将每个边的文档存储在“边缘收集”。只需确保每条边存储它来自哪个顶点以及去往哪个顶点。在 ArangoDB 中,我们为此使用边缘文档中的 _from 和 _to 属性。

然而,图数据库的关键能力是它需要有效地回答有关图的查询。图的典型查询是(a)“图中顶点的邻居是什么?” 或(b)“图中从顶点 A 到顶点 B 的最短路径是什么?” 或(c)“给我所有我可以通过跟随边从顶点A到达的顶点”。而(a)只需要一个好的边缘集合索引,(b)和(c)涉及图中先验未知数量的步骤。因此,(b)和(c)不能用传统的数据库查询语言(如 SQL)有效地完成,因为它们会涉及客户端和服务器之间的大量通信,或者至少是一个非常复杂的表达式,具有可变数量的加入。因此,我将 (b) 和 (c) 之类的查询称为“图形”,

因此,我对“文档存储如何成为图形数据库”的简短回答 is:如上存储图形并在数据库服务器中实现图形查询,可从数据存储的查询语言访问。原则上,关系数据库和对 SQL 的一些相当大的扩展也可以做到这一点。

通过 ArangoDB,我们成功地将文档、图形和键/值特征组合成一个单一的、连贯的查询语言。因此,我们称 ArangoDB 为“多模型数据库”,因为它无缝地结合了这三种数据模型。您甚至可以在单个查询中混合数据模型!

这就引出了我对问题(2)的回答,这显然有点偏颇:

与上述意义上的分布式多模型数据库 ArangoDB 相比,Neo4j 是经典的图数据库。它存储图形,允许使用“图形查询”来查询它们,并具有为此优化的存储和查询引擎。Neo4j 特别擅长使用其内置的查询语言密码匹配路径。它确实允许将属性附加到顶点和边,但它不是一个功能齐全的文档存储。它没有针对使用多个二级索引处理文档查询进行优化,也没有进行连接。此外,Neo4j 不是分布式的。

Neo4j 是用 Java 编写的,ArangoDB 是用 C++ 编写的,并且嵌入了 Google 的 V8 来执行 JavaScript 扩展。

有关性能比较,请参阅这篇文章

于 2015-06-15T19:14:12.287 回答