Neo4j匹配/检索查询花费了太多时间25秒

时间:2015-05-15 08:38:50

标签: performance configuration neo4j cypher

我的系统是8核和16 GB RAM。但仍在遍历:用户节点需要大约25秒的时间。

我在neo4j-wrapper.conf中设置了2个属性:

wrapper.java.initmemory = 6144
wrapper.java.maxmemory = 12288
  • :用户返回字段15-20;
  • 2-3索引(created_at具有索引)
  • 在created_at DESC上完成排序
  • 总计500万个节点,数据库大小几乎为8GB
  • :用户节点为4百万。
  • 分页完成。每页提取10条记录。
  • 没有ORDER By它以0.3秒的速度给出结果。
MATCH (u:User)
RETURN id(u) as id, u.username, u.email, (..15 More fields..), u.created_at as created_at
ORDER BY created_at desc 
SKIP 0 LIMIT 10

如何减少Neo4j服务器的响应时间?可以设置什么neo4j.properties来减少执行时间?

2 个答案:

答案 0 :(得分:3)

Neo4j中的索引用于查找节点而不用于排序。如果要对4M节点的已排序列表进行分页,则需要一些时间。

解决这个问题的方法是通过适当的数据建模。添加新User时,如果考虑与当前创建的:PREV_USER关系之间存在{{1}}关系,则系统中的用户将形成一个链接列表,以便及时按住用户。

此链接列表快速且易于遍历。

答案 1 :(得分:2)

通过将init内存和max memory设置为相同的值(因此jvm不必进行任何大小调整)以及设置垃圾收集,我已经有了一些运气。 在conf文件中给出这些值:

-Xmx4g #max
-Xms4g #init
-XX:+UseConcMarkSweepG #garbage collector