问题描述
设置/简介
我的Neo4j图中有10k +个节点,需要在前端应用程序的2个开始/结束节点之间显示一个子图(100-500个节点),以及有关关键路径和所有依赖项的信息(上游) /每个节点的下游路径。
我有一个所有可能的开始/结束节点的列表,它很小(约10对)。
开始和结束节点是请求的参数。
我现在从中间件发送到UI的响应如下:
Nodes: [
{
Id: 4,downstreamIds: [5,6,7],//all nodes on the paths leading to end node
upstreamIds: [1,2,3],//all nodes on the paths coming from start node
...
},...
]
问题
问题在于,对于每个节点,我都有2个单独的查询来获取下游列表和上游列表...因此对于n个节点,我有1个节点查询+ 2n个下游+上游查询+ 1个关键路径查询(具有slack = 0的节点)。
需要502个查询才能获取其中包含500个节点的开始/结束子图。
关键路径查询很快,不是问题。
但是,在最坏的情况下,此请求总体上可能需要2分钟,即:每个节点都具有所有其他节点作为下游和上游依赖项。
可能的解决方案
-
返回2n²边的所有关系的列表(最坏情况为500 * 500 * 2),并使用Javascript计算UI中的下游/上游列表。我不太确定该如何使用Cypher。
同时存储500,000个对象并在UI中对其进行过滤听起来也不对。 -
对每个节点的下游/上游查询进行预处理,并将其缓存在单独的快速键值存储中。我在想nosql mongoDB。
因此,我从图请求节点,然后通过1个查询从键值存储中获取依赖项(快得多/没有图遍历)
哪个更好?还有其他解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)