Neo4j StatementResult太慢

时间:2018-09-19 09:23:08

标签: java performance neo4j

我使用Java驱动程序连接Neo4j数据库。我写了下面的代码来查询和获取结果。

StatementResult response = session.run("MATCH (a:File {id:'" + file + "'}) RETURN a.pagerank");
while(response.hasNext())
    sumPageRank += response.next().get("a.pagerank").asDouble();

但是这太慢了。分析后,我看到第一条语句运行良好,但是hasNext()方法使它变慢,这与我的预期相反。因为看起来响应很快,但解析响应却很慢。然后,我尝试了list()方法:

StatementResult response = session.run("MATCH (a:File {id:'" + file + "'}) RETURN a.pagerank");
List<Record> records = response.list();
for(Record r : records)                    
    sumPageRank += r.get("a.pagerank").asDouble();

那也很慢。使速度变慢的是list()方法。因此,我正在寻找一种从cypher查询中获取响应的快速方法。

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试对所有结果的pagerank进行求和运算。如果您在查询本身中执行此操作(并在此处使用参数,在参数映射中传递fileId,而不是在ID后面附加字符串),效率会更高:

MATCH (a:File {id:$fileId}) 
RETURN sum(a.pagerank) as sumPageRank