提问者:小点点

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


我的系统是8核和16 GBRAM。但仍在遍历:用户节点花费太多时间,大约25秒。

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

wrapper.java.initmemory = 6144
wrapper.java.maxmemory = 12288
  • :用户返回字段15-20;
  • 2-3个索引(created_at有索引)
  • 在created_atDESC上完成排序
  • 数据库大小接近8GB的500万节点总数
  • :用户节点400万。
  • 分页完成。每页获取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个答案

匿名用户

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

解决这个问题的方法是通过适当的数据建模。当添加一个新的User时,考虑在当前关系之前创建一个:PREV_USER关系,系统中的用户将形成一个链表,及时排列用户。

这个链表快速且易于遍历。

匿名用户

我很幸运地将init内存和max内存设置为相同的值(因此jvm不必进行任何大小调整)并设置垃圾回收机制。

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