4.2 按照条件循环执行 - commit 4.2.1 定义
ommit()过程包含两个子操作: 1) 第一个是查询操作,返回指定数量的、符合条件的数据库对象; 2) 第二个是更新操作,对第一个查询中返回的每个对象进行相应的更新操作。第二个操作通常在不同的事务中执行。 上面的两个步骤重复执行,直到第一个查询操作返回空的结果集合。
为了控制每个事务的大小,commit()过程要求必须有一个limit参数,用来指定查询操作返回的对象的数目。
4.2.2 应用 commit()过程适用于对数据库进行大规模的更新操作,通过限制每次处理的对象数量来减小事务规模以及相应的系统资源消耗。 使用该过程事先可以不需要知道要更新的数据库对象的数量,而只需要设置什么时候更新操作结束,例如在所有节点都有了一个新属性score后结束运行。
4.2.3 过程调用接口 过程接口
CALL apoc.periodic.commit( statement, params )
参数名 类型 缺省值 可为空? 说明 statement 字符串 无 否 迭代执行的Cypher查询,需要返回一个非负的整数。 params MAP 无 否 statement中需要的参数,其中limit参数是必须的。
4.2.4 示例 以下的例子每次从数据库中搜索10个“人物”节点(由limit参数决定),判断节点是否包含genre属性,如果没有,则创建该属性、并为其赋值;并在最后由count()返回实际更新的节点数量。当count()返回0时,整个过程结束。
// 4.2(1) 迭代执行数据库更新查询,直到所有节点都处理完成。 // 参数:- statement:执行的查询 // - params: {limit:10000} // 返回结果:任务执行用时和批次
CALL apoc.periodic.commit( “MATCH (n:人物) WHERE NOT exists(n.genre) WITH n LIMIT {limit} SET n.genre=‘男’ RETURN count(*)”, {limit:10} )
---- 待续 ---- (下一章:循环执行iterate)