【问题标题】:Running "MATCH (n) DETACH DELETE n" via "neo4j-driver" doesn't work通过“neo4j-driver”运行“MATCH (n) DETACH DELETE n”不起作用
【发布时间】:2019-12-29 05:07:37
【问题描述】:

我正在测试 neo4j-driver package 以通过 JavaScript/TypeScript 运行 Cypher 查询。

我可以很好地运行大多数查询,但每次我尝试运行命令 MATCH (n) DETACH DELETE n 时,我的程序都会一直挂起,没有任何反应。

我的代码:

// main.ts

import neo4j from "neo4j-driver"

const main = async () => {
  const driver = neo4j.driver("bolt://localhost:7687",
    neo4j.auth.basic("neo4j", "telmo"))

  const session = driver.session()

  console.log("This command works fine")
  await session.run(`CREATE (n:Person {name: "Bob"}) RETURN n.name`)

  console.log("This one does not")
  await session.run("MATCH (n) DETACH DELETE n")

  console.log("The code never even gets here")

  session.close()
  driver.close()
}

main()

有谁知道为什么程序会在MATCH (n) DETACH DELETE n 上挂起,我能做些什么来解决它?请注意,我的数据库仅用于测试,数据量非常少。

【问题讨论】:

    标签: javascript typescript neo4j bolt neo4j-driver


    【解决方案1】:

    当您执行 match(n) detach delete n ..它会加载图中的所有关系和节点,并且您的堆大小可能不足以一次加载所有数据。尝试以下查询,而不是按批处理方式完成工作, CALL apoc.periodic.iterate( "MATCH (n) RETURN n", "DETACH DELETE n", {batchSize:10000, parallel:false})

    在这里http://neo4j-contrib.github.io/neo4j-apoc-procedures/3.5/cypher-execution/commit-batching/阅读更多关于apoc.iterate的信息

    【讨论】:

    • 补充一下,这是 Neo4j 是 ACID db 的结果。事务必须是原子的,但事务状态可以超过堆,因此建议最好批量处理大型事务以缓解堆压力。
    猜你喜欢
    • 2014-03-06
    • 2018-03-09
    • 2010-12-21
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多