|| apoc.cypher.runTimeboxed - APOC 核心文档 - Neo4j 文档

apoc.cypher.runTimeboxed

此过程不被认为是多线程安全运行的。因此,并行运行时不支持此过程。欲了解更多信息,请参阅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 中引入

返回参数

名称

类型

描述

value

MAP

从 Cypher 语句返回的结果。

配置参数

此过程支持以下配置参数

配置参数
名称 类型 默认值 描述

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

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

使用驱动

在使用驱动调用 Cypher 时,可以按事务设置超时。

例如,Java 驱动的 QueryConfig 可以通过使用 withTimeout() 方法来给定一个持续时间超时。

// 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 毫秒后消费完毕

© . This site is unofficial and not affiliated with Neo4j, Inc.