我使用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
查询中获取响应的快速方法。
答案 0 :(得分:1)
您似乎正在尝试对所有结果的pagerank进行求和运算。如果您在查询本身中执行此操作(并在此处使用参数,在参数映射中传递fileId
,而不是在ID后面附加字符串),效率会更高:
MATCH (a:File {id:$fileId})
RETURN sum(a.pagerank) as sumPageRank