需要帮助减少大型关系数据集的neo4j查询延迟问题。
系统配置8内核,云端32 GB虚拟机
Neo4J配置页缓存- 20 GB堆-8 GB
ObjectModel节点与关系属性“时间戳”共享关系"COMMUNICATING_TO“。
查询查找给定时间段内节点间的所有通信,删除两个给定节点之间的重复通信。
MATCH (n1)-[r:COMMUNICATING_TO]->(n2)
WHERE r.timestamp >= <fromTimestamp> AND r.timestamp <= <toTimestamp>
RETURN {id:id(n1)} as fromNode, COLLECT(DISTINCT {id:id(n2)}) as toNodeData 100 K节点,它们之间有五亿个关系。
挑战对于给定的一天,存在200万关系,查询时间为~50秒。
任何有助于优化查询、系统参数和对象模型的建议都将得到赞赏。
发布于 2018-02-07 13:04:58
您可以使用APOC为您的关系创建手动索引。
这是填充索引的查询:
MATCH ()-[r:COMMUNICATING_TO]->()
CALL apoc.index.addRelationship(r,['timestamp'])
RETURN count(*)然后,您可以检索您的关系,如:
CALL apoc.index.relationships('COMMUNICATING_TO','timestamp:[<fromTimestamp> TO <toTimestamp>]') YIELD rel, start , end
RETURN rel, start, end链接到文档:properties
另一种解决方案是通过将日期添加到COMMUNICATING_TO关系类型中来更改模型化。例如:20180205_COMMUNICATING_TO,20180206_COMMUNICATING_TO,20180207_COMMUNICATING_TO .
https://stackoverflow.com/questions/48662539
复制相似问题