Neo4j-使用Java读取大量数据

时间:2018-07-11 10:40:22

标签: java neo4j cypher bolt

我目前正在尝试使用官方的Bolt驱动程序将大量数据读取到Java应用程序中。我遇到了问题,因为该图相当大(约有17k个节点,约有500k个关系),当然我想分块阅读以提高内存效率。我想要得到的是原始节点和目标节点之间的字段混合以及关系本身。我尝试编写分页查询:

MATCH (n:NodeLabel)-[r:RelationshipLabel]->(n:NodeLabel) 
WITH r.some_date AS some_date, r.arrival_times AS arrival_times,
     r.departure_times AS departure_times, r.path_ids AS path_ids,
     n.node_id AS origin_node_id, m.node_id AS dest_node_id
ORDER BY id(r)
RETURN some_date, arrival_times, departure_times, path_ids,
       origin_node_id, dest_node_id 
LIMIT 5000

(我更改了一些标签和字段命名,因此查询的目的并不明显)

我的想法是在后续查询中使用SKIP来读取更多数据。但是,以5000行/读取的速度,每次读取大约要花费7秒钟,这大概是由于ORDER BY的全面扫描所致;如果执行SKIP,则执行时间和内存使用量将大大增加。这太长了,无法阅读全部内容,有什么办法可以加快查询速度吗?还是将结果分块地流式传输到我的应用程序中?一般来说,读取大量数据的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

代替skip。从第二个调用中,您可以执行id(r)>“最后收到的id(r)”,这实际上可以减少您的处理时间。