Neo4j ArangoDB文档数据库和图形数据库?怎么可能呢?

Neo4j ArangoDB文档数据库和图形数据库?怎么可能呢?,neo4j,arangodb,multi-model-database,Neo4j,Arangodb,Multi Model Database,有人可以解释文档数据库是如何作为图形数据库工作的 ArangoDB和Neo4j之间有什么区别?免责声明:我是ArangoDB的Max,核心开发人员之一 首先,在我的文章中可以找到关于这一问题和其他相关问题的更长时间的讨论,但我将在这里简要地回答这两个问题 (1) 将图形存储在文档存储中相对容易(就像在关系数据库中一样),例如,可以简单地将每个顶点的文档存储在“顶点集合”中,将每个边的文档存储在“边集合”中。只需确保每条边都存储了它从哪个顶点来,到哪个顶点去。在ArangoDB中,我们使用edge

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


ArangoDB和Neo4j之间有什么区别?

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

首先,在我的文章中可以找到关于这一问题和其他相关问题的更长时间的讨论,但我将在这里简要地回答这两个问题

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

然而,图形数据库的关键功能是它需要高效地回答关于图形的查询。图的典型查询是(a)“图中某个顶点的邻域是什么?”或(b)“图中从顶点a到顶点b的最短路径是什么?”或(c)“给我所有可以从顶点a沿着边到达的顶点”。鉴于(a)只需要在边集合上建立一个好的索引,(b)和(c)在图中涉及一个先验未知的步骤数。因此,(b)和(c)不能用传统的数据库查询语言(如SQL)高效地完成,因为它们将涉及客户机和服务器之间的大量通信,或者至少是一个具有可变连接数的非常复杂的表达式。因此,我将(b)和(c)这样的查询称为“graphics”,而没有严格定义这一点

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

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

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

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

NeN4J是用java编写的,ArangoDB是C++编写的,嵌入谷歌的V8来执行JavaScript扩展。
有关性能比较,请参见。

Arango DB是一种面向文档的数据库,您可以使用它以某种方式操纵图形。但是,您可以在RDBMS中“操纵”图形,所以我认为这只是营销。