获取大型图中特定路径的起始节点和结束节点



我有一个大型图(1068029个节点和2602897个关系(,我通过python API使用它,并在程序流中向图发出请求。

我有以下问题-

第一个查询

MATCH 
(start_node)--(o:observed_data)--(i:indicator)--(m:malware)--(end_node:attack_pattern)
WHERE start_node.id in [id_list] 
RETURN start_node.id, end_node.name

第二个查询

MATCH 
(start_node)--(o1:observed_data)--(h:MD5)--(o2:observed_data)--(i:indicator)--(m:malware)--(end_node:attack_pattern)
WHERE start_node.id in [id_list] 
RETURN start_node.id, end_node.name

当我试图用75000大小的id_list预处理第一个查询时,它通过了OK并返回所需的输出,但当我试图预处理第二个查询时——即使我将id_list减少到20000,图形也会卡住。

id_list甚至大于75000,但为了使图形的响应时间更快,我将其拆分为块,但如果将其拆分成太多块,我将增加对图形的请求数量,并增加程序运行时间。

我的问题是——是否有某种库的函数(APOC或类似的函数(可以在更短的时间内执行相同的操作?或者,您可能有另一种解决方案,可以在不将id_list减少到50000以下的情况下解决此问题?

  1. MATCH模式中的(start_node)应该指定一个标签(如(start_node:Foo)(,以避免必须扫描DB中的every节点。此外,还应该为该起始节点创建一个索引(或唯一性约束(
  2. 如果合适的话,您应该将MATCH模式中的所有关系设置为directional。也就是说,在两端各放一支箭
  3. 您还应该在模式中指定关系类型(如()-[:BAR]->()(,这样查询就不会被迫计算所有关系类型

最新更新