我有一个系统,在部署它时,它会运行许多脚本来填充Neo4J数据库。没有CSV导入,只有创建大量节点和关系的常规查询。
我经常(但并非总是)在某个特定脚本中遇到错误,我不知道为什么。在那个文件里没有什么不寻常的事情。
错误:
| { Neo4jError: Connection was closed by server
|
| at captureStacktrace (/code/node_modules/neo4j-driver/lib/v1/result.js:200:15)
| at new Result (/code/node_modules/neo4j-driver/lib/v1/result.js:73:19)
| at Session._run (/code/node_modules/neo4j-driver/lib/v1/session.js:173:14)
| at Session.run (/code/node_modules/neo4j-driver/lib/v1/session.js:154:19)
| at Object.complete (/code/datamigrations/003/0007_yet_another_script.js:34:17)
| at ReadableStreamStreamer.ChunkStreamer.parseChunk (/code/node_modules/papaparse/papaparse.js:548:18)
| at ReadableStreamStreamer.<anonymous> (/code/node_modules/papaparse/papaparse.js:857:11)
| at ReadableStreamStreamer._streamData (/code/node_modules/papaparse/papaparse.js:1817:25)
| at ReadableStreamStreamer.<anonymous> (/code/node_modules/papaparse/papaparse.js:876:9)
| at IconvLiteEncoderStream.<anonymous> (/code/node_modules/papaparse/papaparse.js:1817:25) code: 'ServiceUnavailable', name: 'Neo4jError' }脚本本身并没有什么异常之处。错误发生在脚本的第一个session.run处:
session.run(
`UNWIND {batch} as row
MATCH (e:Episode {issueKey: row.issueKey})
WITH e,row
UNWIND row.otherIds as otherId
MATCH (a:OtherElement {id: otherId})
CREATE (e)-[:ENABLES]->(a)
`,
{ batch: elements },无可否认,这是我在这里创建的一个大批量。超过30k个节点。这会导致错误吗?将其分成10k或其他部分会不会更好呢?
发布于 2020-05-30 00:37:50
是的,使用较小的批次可能会有所帮助。
此外,您的查询还可以简化:
UNWIND $batch as row
MATCH (e:Episode {issueKey: row.issueKey}), (a:OtherElement)
WHERE a.id IN row.otherIds
CREATE (e)-[:ENABLES]->(a)此外,在:Episode(issueKey)和:OtherElement(id)上安装indexes可以提高性能。
https://stackoverflow.com/questions/62086335
复制相似问题