Lin*_*ina 4 neo4j spring-data-neo4j spring-data-neo4j-4 neo4j-ogm
我有一个大图模型,我需要将以下查询的结果写入csv.
Match (u:USER)-[r:PURCHASED]->(o:ORDER)-[h:HAS]->(i:ITEM) return u.id as userId,i.product_number as itemId
Run Code Online (Sandbox Code Playgroud)
它表明估计结果约为9M.我的问题是:
1)获得响应需要很多时间.从neo4j-shell开始需要38分钟!这是正常的吗?顺便说一下,我有所有的模式索引,它们都是在线的.
2)当我使用SpringDataNeo4j获取结果时,它会抛出"java.lang.OutOfMemoryError:GC开销超出限制"错误,当SDN尝试将加载的数据转换为@QueryResult对象时会发生这种情况.
我尝试以各种方式优化查询,但没有任何改变!我的印象是我做错了什么.有谁知道如何解决这个问题?我应该去批量读/写吗?
PS我正在使用Neo4j社区版本:3.0.1,这些是我的sysinfos:

这些是我的服务器配置.
dbms.jvm.additional=-Dunsupported.dbms.udc.source=tarball
use_memory_mapped_buffers=true
neostore.nodestore.db.mapped_memory=3G
neostore.relationshipstore.db.mapped_memory=4G
neostore.propertystore.db.mapped_memory=3G
neostore.propertystore.db.strings.mapped_memory=1000M
neostore.propertystore.db.index.keys.mapped_memory=500M
neostore.propertystore.db.index.mapped_memory=500M
Run Code Online (Sandbox Code Playgroud)
虽然Neo4j会在匹配它们时将结果传输给您,但是当您使用SDN时,它必须将输出收集到单个@QueryResult对象中.要避免OOM问题,您需要确保应用程序有足够的堆内存可用于加载所有9m响应,或使用neo4j-shell,或使用专用流媒体接口,例如https://www.npmjs. com/package/cypher-stream.(告诫者:我没试过这个,但看起来应该这样做)