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