apoc.cypher.runTimeboxed
|
此过程不被认为是多线程安全运行的。因此,并行运行时不支持此过程。欲了解更多信息,请参阅Cypher 手册 → 并行运行时。 |
语法 |
|
||
描述 |
如果在设定的超时时间 (毫秒) 内未完成,则终止 Cypher 语句。 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要运行的 Cypher 语句。 |
|
|
|
给定 Cypher 语句的参数。 |
|
|
|
语句可以运行的最大时间。 |
|
|
|
|
|
返回参数 |
名称 |
类型 |
描述 |
|
|
从 Cypher 语句返回的结果。 |
|
配置参数
此过程支持以下配置参数
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
failOnError |
BOOLEAN |
false |
如果遇到错误或达到超时,将抛出错误。 |
appendStatusRow |
BOOLEAN |
false |
返回的最后一行将是一个包含查询状态的映射: |
设置全局事务超时
要在 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 毫秒后消费完毕 |
||