Graph数据库中搜索查询的时间复杂度是多少?

时间:2017-11-04 08:50:18

标签: neo4j relational-database time-complexity graph-databases query-performance

Graph数据库中搜索查询的时间复杂度是多少(特别是 Neo4j )?

我和我有关系数据。我很难使用关系数据库图表数据库来存储该数据。因此,我希望根据特定数据库的查询的性能和时间复杂性来存储数据。但是,我无法找到Graph数据库查询的性能和时间复杂度。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

答案并非如此简单,因为时间复杂性通常取决于您在查询中所做的事情(查询计划器的结果),并非所有时间的复杂性都适用于所有人查询。

我可以为Neo4j说些话(免责声明:我是Neo4j员工)。

我不会对Neo4j中的Lucene索引查找说太多,因为这些通常仅用于按索引查找起始节点,并且表示查询执行时间的一小部分。关系遍历往往是真正的差异表现出来的地方。

一旦找到了起始节点,Neo4j就会通过关系遍历来遍历图形,对于Neo4j来说,它基本上是通过内存追逐指针,这往往是本机图形dbs优于关系dbs的地方:每次遍历追逐指针的成本是恒定的。

对于关系dbs(包括在关系dbs之上构建的图层),关系遍历通常由各种表连接算法完成,这些算法具有自己的时间复杂度(不是O(1)),但通常不能很好地扩展随着连接数的增加(特别是自我/递归连接)。

这使得像Neo4j这样的原生图形数据库可以很好地处理对连接数据的查询,特别是对于非平凡或越来越多的关系遍历(或者如果遍历是无界的,例如对于可达性查询,最短路径,和别的)。查询的成本与查询触摸或遍历的图形部分相关联,而不是数据库中节点的总数,因此当您可以充分约束查询以触及数据库中最小的子图时,它会有所帮助。 / p>

至于您是否使用关系数据库或图表数据库的问题,这取决于数据的连接性和您计划运行的查询。

如果您确定了图形数据库,那么您也可以选择一组不同的标准,例如本机与非本机实现(Neo4j是本机图形数据库并利用无索引邻接对于关系遍历),是否需要ACID(Neo4是ACID数据库),如果需要丰富且富有表现力的查询语言(Cypher是Neo4j的查询语言,请随时学习并与其他人进行比较)。

有关更深入的信息,请参阅Why Graph Databases Outperfrom RDBMS on Connected Data上的DZone文章,以及Neo4j首席科学家Jim Webber撰写的Explaining Graph Databases to a Developer文章。

答案 1 :(得分:2)

实际上,最可能的情况是使用两者 Neo4j 一些DBMS(像Mongo这样的关系或nosql)。因为在Neo4j中存储所有数据集太难了。

DBMS中的速度遍历节点比Neo4j慢10-100 ++倍。此外,Neo4j还内置了shortestPath(以及许多其他方法)。

此外,可以提到混合解决方案,如ArangoDB。它有图形引擎+基于文档的引擎。但在引擎盖下它是两个独立的表,所以它几乎和Neo4j + DBMS一样不方便。

答案 2 :(得分:0)

实际上取决于数据的大小和复杂程度。

在像neo4j这样的Graph数据库中,时间复杂度取决于查询的类型以及查询后面的planners(执行程序)。图数据库特别是Neo4j执行更简单的JOINS,这使我们可以清楚地看到数据。

有关详细信息,请访问Neo4j的此参考blog。 您也可以参考此question,因为它与您的相似。

希望这有帮助!