apoc.periodic.repeat过程
|
此过程不适用于集群环境,可能会产生不可预知的行为。它会持续在启动它的同一数据库上执行,这意味着在集群环境中,它仅在主节点(leader)上执行。如果发生主节点切换,该过程可能会报错并停止运行。 |
语法 |
|
||
描述 |
运行一个重复调用的后台作业。要停止此过程,请使用 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
任务名称。 |
|
|
|
要执行的 Cypher 语句。 |
|
|
|
每次作业执行之间的等待延迟(以秒为单位)。 |
|
|
|
|
|
返回参数 |
名称 |
类型 |
描述 |
|
|
任务名称。 |
|
|
|
任务的延迟时间。 |
|
|
|
任务的速率。 |
|
|
|
任务是否已完成。 |
|
|
|
任务是否已取消。 |
|
使用示例
我们可以通过运行以下查询,每秒创建 10 个 Person 节点
CALL apoc.periodic.repeat(
"create-people",
"UNWIND range(1,10) AS id CREATE (:Person {uuid: apoc.create.uuid()})",
1
);
| 名称 (name) | delay | rate | done | cancelled |
|---|---|---|---|---|
"create-people" |
0 |
1 |
FALSE |
FALSE |
我们可以通过运行以下查询来检查已创建了多少节点
MATCH (:Person)
RETURN count(*) AS count;
| count |
|---|
110 |
如果您想取消此作业,可以使用 apoc.periodic.cancel 过程,并将作业名称作为参数指定。
错误处理Cypher 25引入于 2025.08
默认情况下,如果通过 apoc.periodic.repeat 运行的查询返回错误,任务将被取消且不再运行。此行为可以通过配置参数 cancelOnError 进行覆盖。
以下查询将创建一个带有随机 id 属性的 Person 节点。然而,当表达式 toInteger(3 * rand()) 的计算结果为 0 时,会抛出除以零的错误。通过将 cancelOnError 设置为 false,此错误将被忽略,任务将在持续一秒后重试。
CALL apoc.periodic.repeat(
"sometimes-create-people",
"CREATE (:Person {id: 1 / toInteger(3 * rand())})",
1,
{ cancelOnError: false }
);
| 名称 (name) | delay | rate | done | cancelled |
|---|---|---|---|---|
"sometimes-create-people" |
0 |
1 |
FALSE |
FALSE |