Neo4j 匹配/检索查询花费太多时间 25 秒
Neo4j Match / Retrieving Query taking too much time 25 sec
我的系统是 8 核和 16 GB RAM。但仍然遍历:用户节点花费太多时间大约 25 秒。
我在 neo4j 中设置了 2 个属性-wrapper.conf :
wrapper.java.initmemory = 6144
wrapper.java.maxmemory = 12288
- :用户返回字段 15-20;
- 2-3个索引(created_at有索引)
- 在 created_at DESC
上完成排序
- 总共 500 万个节点,数据库大小接近 8GB
- :用户节点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可以减少执行时间?
Neo4j 中的索引用于查找节点而不是用于排序。如果要对 4M 节点的排序列表进行分页,则需要一些时间。
解决这个问题的方法是通过适当的数据建模。当添加一个新的 User
时,请考虑与在当前创建的之前创建的那个建立 :PREV_USER
关系,您系统中的用户将形成一个链表,以及时的顺序保存用户。
这个链表的遍历速度快,容易
我运气不错,将初始内存和最大内存都设置为相同的值(这样 jvm 就不必调整大小)并且还设置了垃圾回收。
在您的 conf 文件中试一试这些值:
-Xmx4g #max
-Xms4g #init
-XX:+UseConcMarkSweepG #garbage collector
我的系统是 8 核和 16 GB RAM。但仍然遍历:用户节点花费太多时间大约 25 秒。
我在 neo4j 中设置了 2 个属性-wrapper.conf :
wrapper.java.initmemory = 6144
wrapper.java.maxmemory = 12288
- :用户返回字段 15-20;
- 2-3个索引(created_at有索引)
- 在 created_at DESC 上完成排序
- 总共 500 万个节点,数据库大小接近 8GB
- :用户节点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可以减少执行时间?
Neo4j 中的索引用于查找节点而不是用于排序。如果要对 4M 节点的排序列表进行分页,则需要一些时间。
解决这个问题的方法是通过适当的数据建模。当添加一个新的 User
时,请考虑与在当前创建的之前创建的那个建立 :PREV_USER
关系,您系统中的用户将形成一个链表,以及时的顺序保存用户。
这个链表的遍历速度快,容易
我运气不错,将初始内存和最大内存都设置为相同的值(这样 jvm 就不必调整大小)并且还设置了垃圾回收。 在您的 conf 文件中试一试这些值:
-Xmx4g #max
-Xms4g #init
-XX:+UseConcMarkSweepG #garbage collector