我正在运行一个像这样的
返回列表的进程MATCH p=(Item{name:'x'})-[r:RELATED_TO]->(w:item)
where r.relatedness > 0.25
[PERFORM CALCS AND UPDATE w]
初始MATCH
仅返回约100个节点,但执行计算步骤是n ^ 2操作,具有相当大的n。每个[PERFORM...]
步骤可以独立执行。整个事情可能需要一天才能完成。
我想打破这一点,以便在每个[PERFORM... ]
步骤之后提交。这样,如果发生故障,我可以从我离开的地方开始。
在SQL服务器中,我可能会将初始MATCH
的结果存储到表中,然后使用CURSOR
处理它,在我去的时候标记已完成的行
我怎样才能在Neo4J中做类似的事情?
答案 0 :(得分:1)
作为一个概念:
1)保存第一个查询的结果:
<body></body>
2)并执行一系列查询:
WITH 'x' as itemName
MERGE (T:SavedQueryResult {name: itemName})
WITH itemName, T
MATCH (:item {name: itemName})-[r:RELATED_TO]->(w:item) WHERE r.relatedness > 0.25
MERGE (I:SavedID {id: ID(w), processed: false})
MERGE (T)-[:hasResult]->(I)
3)要处理保存的结果,您可以使用apoc.periodic.commit
中的APOC library
。