导入Neo4j最快的方法是什么?

2024-10-01 09:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JSON文档列表,格式如下:

[{a:1, b:[2,5,6]}, {a:2, b:[1,3,5]}, ...]

我需要做的是用参数a生成节点,并将它们连接到列表b中具有a值的所有节点。所以第一个节点将连接到节点2、5和6。现在我正在使用Python的neo4jrestclient进行填充,但这需要很长时间。有没有更快的方法来填充?在

目前这是我的脚本:

^{pr2}$

Tags: 方法文档脚本json列表参数节点格式
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:34

您可能需要考虑将JSON转换为CSV(使用类似于jq)的方法,然后可以使用^{}Cypher工具进行导入。LOAD CSV针对数据导入进行了优化,因此使用此方法将获得更好的性能。在您的示例中,LOAD CSV脚本如下所示:

您的JSON转换为CSV:

"a","b"
"1","2,5,6"
"2","1,3,5"

首先创建唯一性约束/索引。这将确保只为任何“名称”创建一个节点,并创建索引以提高查找性能。在

^{pr2}$

可以有效地使用上述cyp文件导入CSV数据:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///path/to/file.csv" AS row
MERGE (a:Person{name: row.a})
WITH a,row
UNWIND split(row.b,',') AS other
MERGE (b:Person {name:other})
CREATE UNIQUE (a)-[:CONNECTED_TO]->(b);

其他选项

另一个选择是在Cypher查询中使用JSON作为参数,然后使用UNWIND遍历JSON数组的每个元素。在

WITH {d} AS json
UNWIND json AS doc
MERGE (a:Person{name: doc.a})
WITH doc, a
UNWIND doc.b AS other
MERGE (b:Person{name:other})
CREATE UNIQUE (a)-[:CONNECTED_TO]->(b); 

尽管非常大的JSON数组可能存在一些性能问题。请参阅这个herehere的一些示例。在

相关问题 更多 >