Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Csv 我应该使用Neo4j';使用“导入工具”或“加载”命令插入数百万行?_Csv_Neo4j_Graph Databases - Fatal编程技术网

Csv 我应该使用Neo4j';使用“导入工具”或“加载”命令插入数百万行?

Csv 我应该使用Neo4j';使用“导入工具”或“加载”命令插入数百万行?,csv,neo4j,graph-databases,Csv,Neo4j,Graph Databases,我有几个大小在25-100MB之间的CSV文件。我已经在neo4j-wrapper.conf和neo4j.properties中创建了约束,创建了索引,使用了周期提交,并增加了分配的内存 neo4j.特性: neostore.nodestore.db.mapped_memory=50M neostore.relationshipstore.db.mapped_memory=500M neostore.propertystore.db.mapped_memory=100M neostore.pro

我有几个大小在25-100MB之间的CSV文件。我已经在neo4j-wrapper.conf和neo4j.properties中创建了约束,创建了索引,使用了周期提交,并增加了分配的内存

neo4j.特性:

neostore.nodestore.db.mapped_memory=50M
neostore.relationshipstore.db.mapped_memory=500M
neostore.propertystore.db.mapped_memory=100M
neostore.propertystore.db.strings.mapped_memory=100M
neostore.propertystore.db.arrays.mapped_memory=0M
neo4j-wrapper.conf更改:

wrapper.java.initmemory=5000
wrapper.java.maxmemory=5000
但是,我的加载仍然需要很长时间,我正在考虑使用最近发布的导入工具()。在我转向它之前,我想知道我是否可以做些别的事情来提高我的导入速度

我首先创建几个约束,以确保我使用的ID是唯一的:

CREATE CONSTRAINT ON (Country) ASSERT c.Name IS UNIQUE;
//and constraints for other name identifiers as well..
然后我使用定期提交

USING PERIODIC COMMIT 10000
然后加载CSV,忽略几个字段

LOAD CSV WITH HEADERS FROM "file:/path/to/file/MyFile.csv" as line
WITH line
WHERE line.CountryName IS NOT NULL AND line.CityName IS NOT NULL AND line.NeighborhoodName IS NOT NULL
然后根据数据创建必要的节点

WITH line
MERGE(country:Country {name : line.CountryName})
MERGE(city:City {name : line.CityName})
MERGE(neighborhood:Neighborhood {
     name : line.NeighborhoodName,
     size : toInt(line.NeighborhoodSize),
     nickname : coalesce(line.NeighborhoodNN, ""),
     ... 50 other features
    })

MERGE (city)-[:IN]->(Country)
CREATE (neighborhood)-[:IN]->(city)
//Note that each neighborhood only appears once
使用CREATE UNIQUE而不是将MERGE应用于任何国家/地区引用有意义吗?这会加速吗


一个250000行的CSV文件需要12个多小时才能完成,而且速度似乎太慢了。我还能做些什么来加快速度?还是说使用看起来很烦人的导入工具才有意义?

有几件事。首先,我建议阅读马克·李约瑟的“避免急切”博客:

基本上它说的是,您应该在每个查询的开头添加一个
配置文件
,以查看其中是否有人使用
Eager
操作符。如果他们这样做,您可能会损失性能,您可能应该将查询拆分为单独的
MERGE
s

其次,您的邻居
MERGE
包含许多属性,因此每次在决定是否创建属性之前,它都会尝试匹配这些属性中的每一个。我的建议是:

MERGE (neighborhood:Neighborhood {name: line.NeighborhoodName})
ON CREATE SET
     neighborhood.size = toInt(line.NeighborhoodSize),
     neighborhood.nickname = coalesce(line.NeighborhoodNN, ""),
     ... 50 other features
    })

嗨,布莱恩,非常感谢你给我指出那篇精彩的文章。你介意在你的回答中加上一句吗?我应该分析每一个命令,并根除所有渴望的行为?然后我可以选择你的答案