Neo4j简单的Cypher查询需要30到60分钟或永远不会完成?

时间:2014-11-28 22:23:32

标签: neo4j

我有3种类型的节点(都带有标签O,PI,P)。只有O和PI节点可以相互连接,PI可以连接到P.我的数据库中有大约10,000个节点和13,000个关系。

我为每个成员的每个字段创建了索引,但是如果我运行下面的查询,则第一个查询需要30分钟,否则第二个查询永远不会返回。 Neo4j不能这么慢吗?我的数据库大小不到4MB,我想添加5 GB的数据,但我甚至无法获得良好的性能。谁能告诉我这是什么问题?我查看了类似的StackOverflow问题,但他们都没有创建索引或使用标签。是什么给了什么?

此查询需要30多分钟

MATCH  (oj:O {name:"blah")-->(mpi:PI)-->(x:P {sys:"foo"})   ,  mpi-->(z:O ) 
RETURN oj,mpi,x LIMIT 100

这一个永远运行,似乎:

MATCH (oj:O {name:"blah")-->(mpi:PI)-->(x:P {sys:"foo"})  ,  mpi-->(z:O )  
, oj-->(pii:PI)-->(pp:P {name:"fubar"} ) , pii-->(lo:O {text:"something"})
return oj,mpi,pii,lo LIMIT 100

2 个答案:

答案 0 :(得分:0)

当使用Cypher查询Neo4j API时,通过提取查询的参数来缓存查询执行计划。查询本身只需要构建一次执行计划。这是一个因素,就像浏览器一样,您没有参数化查询。第二个因素是浏览器和Neo4j之间的数据传输。

这些因素中的任何一个都不足以解释数据集上这些查询的30分钟响应时间。 4MB的数据可以合理地加载到内存中。您的查询不是我所说的复杂或非线性缩放。

这很可能是浏览器内存使用率的问题。我会尝试返回对象的属性而不是图形数据。 LIMIT 100不会阻止加载节点之间存在的关系,因此即使对于100行节点,也可以有更多的关系。

答案 1 :(得分:0)

问题原因是由Neo4j浏览器引起的。由于某种原因,查询花费了很长时间。