ArangoDB是一个文档数据库,同时也是一个图形数据库吗?这怎么可能?

12

有人能否解释一下文档数据库如何作为图数据库工作吗?

ArangoDB和Neo4j之间有什么区别?


据我所知,Arango DB是一种面向文档的数据库,可以以某种方式操作图形。但是,关系型数据库也可以“操作”图形,所以我认为这只是营销手段。 - fbiville
1个回答

13
免责声明:我是ArangoDB的Max,其中一位核心开发者。
首先,更详细的讨论和其他相关问题可以在我的文章数据建模中的图形-皇帝赤裸裸吗?中找到,但我会在这里简洁地回答这两个问题。
(1)将图形存储在文档存储中相对容易(就像在关系数据库中一样),例如可以简单地为“顶点集合”中的每个顶点存储一个文档,并为“边缘集合”中的每个边缘存储一个文档。只需确保每条边缘存储从哪个顶点出发和到达哪个顶点。在ArangoDB中,我们使用边缘文档中的_from和_to属性来实现此目的。
然而,图数据库的关键功能在于需要高效地回答有关图的查询。典型的图查询包括(a)“顶点在图中的邻居是什么?”或(b)“从顶点A到顶点B的最短路径是什么?”或(c)“按照边的方向,我可以从顶点A到达哪些顶点?”其中,(a)只需要对边集合建立良好的索引,而(b)和(c)涉及到先验未知数量的图步骤。因此,(b)和(c)不能用传统的数据库查询语言(如SQL)高效地完成,因为它们将涉及大量客户端和服务器之间的通信,或至少是一个具有可变联接数量的非常复杂的表达式。我称这样的查询为“graphy”,但没有严格定义。

因此,“文档存储如何成为图数据库?”我的简短回答是:像上面一样存储图,并在数据库服务器中实现graphy查询,这些查询可以从数据存储的查询语言中访问。原则上,使用关系数据库和一些相当扩展的SQL也可以做到同样的事情。

使用ArangoDB,我们成功地将文档、图形和键/值功能合并到一个统一的查询语言中。因此,我们称ArangoDB为“多模型数据库”,因为它无缝地组合了这三个数据模型。你甚至可以在单个查询中混合使用这些数据模型!
这将导致我对问题(2)的答案有点偏见:
与上述意义下的分布式多模型数据库ArangoDB相比,Neo4j是一种传统的图形数据库。它存储图形,允许使用“图形查询”查询它们,并具有针对此进行优化的存储和查询引擎。Neo4j特别擅长使用内置查询语言Cypher匹配路径。它确实允许将属性附加到顶点和边缘,但它不是一个完整的特色文档存储库。它没有针对使用多个二级索引处理文档查询的优化,也不执行连接。此外,Neo4j不是分布式的。
Neo4j是用Java编写的,而ArangoDB是用C++编写的,并嵌入了Google的V8来执行JavaScript扩展。
有关性能比较,请参见this post

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