这是我在stackoverflow中的第一个问题。
我想在Neo4j数据库中导入一个700万行的文件。
每行包含节点信息,时间值(已在数据库中)。 对于每一行,我需要找到一个现有节点和数据库中的现有时间值,然后在它们之间创建一个关系,并相应地在其中添加值。
我想要一些提高进口速度的建议。架构是:
ON :Day(value) ONLINE
ON :Month(value) ONLINE
ON :SEGMENT(LinkName) ONLINE
ON :Timeperiod(value) ONLINE
ON :Year(value) ONLINE
导入约200万行需要24小时。 (1/3)我希望导入50个类似的文件因此我认为我需要更好的代码来提高速度。 分配的内存为1GB(默认设置),硬盘为SSD。
非常感谢!
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///../../Python/MAR15.csv" AS row WITH row
WHERE row.LinkRef IS NOT NULL
WITH row, toInt(SUBSTRING(row.Date, 0, 4)) AS y
MATCH (year:Year {value: y})
WITH row, year, toInt(SUBSTRING(row.Date, 5, 2)) AS m
MATCH (year)-[:CONTAINS]->(month:Month {value: m})
WITH row, month, toInt(SUBSTRING(row.Date, 8, 2)) AS d
MATCH (month)-[:CONTAINS]->(day:Day {value: d})
WITH row, day, toInt(row.TimePeriod) AS t
MATCH (day)-[:CONTAINS]->(timeperiod:Timeperiod {value: t})
##96 period per day, each period is 15 minutes
WITH row, timeperiod
MATCH(segment:SEGMENT {LinkRef: row.LinkRef})
CREATE (segment)-[trafficdata:TrafficData {
AverageJT: row.AverageJT,
AverageSpeed: row.AverageSpeed,
Flow: row.Flow,
DataQuality: row.DataQuality
}]->(timeperiod)
SET segment.LinkLength = row.LinkLength;
答案 0 :(得分:2)
正如Ryan所说,我通过以下代码提高了查询速度:
NameExist > 0
由于每个SEGMENT都有一个唯一标识符(LinkRef),因此系统能够更快地执行MATCH检查。 添加此约束后,系统每分钟可处理10,000多个输入。