使用提交将更新操作拆分为块

时间:2018-05-04 11:26:18

标签: neo4j cypher

我正在运行一个像这样的

返回列表的进程
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中做类似的事情?

1 个答案:

答案 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