我有一个大图(1,068,029个节点和2,602,897个关系),我通过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
当我尝试执行大小为75,000的id_list的第一个查询时,它可以通过并返回所需的输出,但是当我尝试执行第二个查询时-即使我将id_list减小到20,000,图也会卡住。 / p>
id_list甚至大于75,000,但我将其拆分为多个块以使图的响应时间更快,但是如果将其拆分为太多的块,则会增加对图的请求数量,并增加程序运行时。
我的问题是-是否存在某种图书馆功能(APOC或类似的东西)可以执行相同的操作但所需的时间更少?或者,也许您有另一种可以解决此问题而又不将id_list减少到50,000以下的解决方案?
答案 0 :(得分:1)
(start_node)
模式中的MATCH
应该指定标签(如(start_node:Foo)
),以避免必须扫描数据库中的every
节点。另外,您应该为该起始节点创建一个index(或唯一性约束)。MATCH
模式directional
建立所有关系。也就是说,在任一端都放一个箭头。()-[:BAR]->()
),以便不会强制查询评估所有 all 关系类型。