在neo4j中导入多个csv的有效方法

问题描述 投票:0回答:1

我正在用neo4j为CALL数据集创建图形数据库。数据集存储在csv文件中,其中包含以下列:Source,Target,Timestamp,Duration。这里的Source和Target是Person id的(数字),Timestamp是日期时间,持续时间以秒为单位(整数)。

我为我的图建模,其中人员是节点(person_id为属性),调用为关系(时间和持续时间为属性)。大约有2,00,000个节点和大约7,000万个关系。我有一个个人ID的单独的CSV文件,该文件用于创建节点。我还在Person ID上添加了唯一性约束。

CREATE CONSTRAINT ON ( person:Person ) ASSERT (person.pid) IS UNIQUE

我不完全了解批量导入的工作原理,因此我编写了一个python脚本,将我的csv拆分为70个csv,其中每个csv都有100万个节点(保存为calls_0,calls_1,.... calls_69)。我主动手动运行密码查询,每次都更改文件名。对于前几个文件(大约10个),它工作得很好(足够快),但是后来我注意到从文件中添加关系后,下一个文件的导入速度会变慢。现在,导入文件大约需要25分钟。有人可以将我链接到一种高效且简便的方法吗?

这里是密码查询:

:auto USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:///calls/calls_28.csv' AS line
WITH toInteger(line.Source) AS Source, 
datetime(replace(line.Time,' ','T')) AS time,
toInteger(line.Target) AS Target,
toInteger(line.Duration) AS Duration
MATCH (p1:Person {pid: Source})
MATCH (p2:Person {pid: Target})
MERGE (p1)-[rel:CALLS {time: time, duration: Duration}]->(p2)
RETURN count(rel)

我正在使用Neo4j 4.0.3

neo4j import-csv
1个回答
0
投票

您可能需要为index添加uniqueness constraint(或:Person(pid))。

这将加速您的MATCH子句,否则将不得不扫描所有Person节点(每个子句)。

© www.soinside.com 2019 - 2024. All rights reserved.