apoc.cypher.runTimeboxed

此过程不建议在多线程中运行,因此并行运行时(Parallel runtime)不支持该过程。有关更多信息,请参阅 Cypher 手册 → 并行运行时

详细信息

语法

apoc.cypher.runTimeboxed(statement, params, timeout, config) :: (value)

描述

如果在设定的超时时间(毫秒)内未完成,则终止 Cypher 语句。

输入参数

名称

类型

描述

statement

STRING

要执行的 Cypher 语句。

params

MAP

给定 Cypher 语句的参数。

timeout

INTEGER(整数)

语句可以运行的最长时间。

config

MAP

{ failOnError = false :: BOOLEAN, appendStatusRow = false :: BOOLEAN }。默认值为:{}引入于 APOC 2025.01

返回参数

名称

类型

描述

MAP

Cypher 语句返回的结果。

配置参数

此过程支持以下配置参数

配置参数
名称 (name) type 默认 description(描述)

failOnError

布尔值 (BOOLEAN)

false

如果遇到错误或达到超时时间,将抛出错误。

appendStatusRow

布尔值 (BOOLEAN)

false

返回的最后一行将是一个包含查询状态的映射:{ wasSuccessful :: BOOLEAN, wasTerminated :: BOOLEAN, failedWithError :: BOOLEAN, error :: STRING }

设置全局事务超时

要在 Neo4j 中为查询运行时间添加超时限制,可以使用配置参数设置查询超时。这有助于防止长时间运行的查询影响系统。您可以通过在 Neo4j 配置文件中将 db.transaction.timeout 属性设置为所需的超时值来配置此超时。

例如,要将查询超时设置为 5 秒,可以在 Neo4j 配置文件中添加以下行:

db.transaction.timeout=5s

您可以在 Neo4j 文档此处找到有关配置查询超时的更多信息。

使用驱动程序

在使用驱动程序调用 Cypher 时,可以为每个事务设置超时。

例如,可以使用 withTimeout() 方法为 Java 驱动程序的 QueryConfig 提供 Duration 超时。

// import org.neo4j.driver.QueryConfig;

var result = driver.executableQuery("MATCH (p:Person) RETURN p.name")
.withConfig(QueryConfig.builder().withTimeout(Duration.ofSeconds(3)).withDatabase("neo4j").build())
.execute();

使用示例

本节中的示例基于一个包含 10000 个节点的示例图,每个节点有 50 个标签为“Node”且类型为“CONNECTED_TO”的关系。

下面的查询计算每对节点之间最短路径的笛卡尔积。

MATCH (n:Node), (m:Node)
WHERE n <> m
MATCH path = shortestpath((n)-[:CONNECTED_TO*]-(m))
RETURN n, m, length(path) AS path;

此查询返回 999,000 行,但返回所有这些行需要一段时间。

我们可以使用 apoc.cypher.runTimeboxed 过程来返回在以毫秒为单位定义的阈值内计算出的路径。通过运行以下查询,我们可以返回 100 毫秒内计算出的结果:

CALL apoc.cypher.runTimeboxed("match (n:Node), (m:Node)
WHERE n <> m
MATCH path = shortestpath((n)-[:CONNECTED_TO*]-(m))
RETURN n, m, length(path) AS path", {}, 100)
YIELD value
RETURN value.n.uuid, value.m.uuid, value.path;
结果
value.n.uuid value.m.uuid value.path

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"62b0578a-cae5-4d45-8a47-5553692a6f22"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"9d910497-1aca-48e8-a14c-cd04528675ab"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"dde31015-73a9-4d22-bf57-ee13a8f7eeb0"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"6040453e-c705-4755-95f3-3b673d10ae54"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"bb2a9b42-71ab-4219-beae-a1e99353921f"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"856a4b54-d027-4438-bbee-fd34d9a6990d"

1

"67dd7a13-dc8d-4d82-9ab3-383d66c54fe4"

"d3e325b4-7691-400a-a819-787c065d537c"

1

…​.

9 毫秒后可用 1022 行,再过 1 毫秒后消费完成