我想加载一个 csv,其中包含维基百科类别 rels.csv 之间的关系(类别之间有 400 万个关系)。我尝试通过更改以下参数值来修改设置文件:
dbms.memory.heap.initial_size=8G
dbms.memory.heap.max_size=8G
dbms.memory.pagecache.size=9G
我的查询如下:
USING PERIODIC COMMIT 10000
LOAD CSV FROM
"https://github.com/jbarrasa/datasets/blob/master/wikipedia/data/rels.csv?raw=true" AS row
MATCH (from:Category { catId: row[0]})
MATCH (to:Category { catId: row[1]})
CREATE (from)-[:SUBCAT_OF]->(to)
此外,我在 catId 和 catName 上创建了索引。
尽管进行了所有这些优化,查询仍在运行(从昨天开始)。
您能否告诉我是否需要进行更多优化来加载此 CSV 文件?
这太花时间了。 4 百万关系应该需要几分钟甚至几秒钟。
我刚刚在 321 秒内加载了您共享的链接中的所有数据(Cats-90 和 Rels-231),而我的个人笔记本电脑上的内存设置还不到您的一半。
dbms.memory.heap.initial_size=1G
dbms.memory.heap.max_size=4G
dbms.memory.pagecache.size=1512m
And this is not the limit, Can be improved further.
稍微修改一下查询:LIMIT 增加 10 倍
USING PERIODIC COMMIT 100000
LOAD CSV FROM
"https://github.com/jbarrasa/datasets/blob/master/wikipedia/data/rels.csv?raw=true" AS row
MATCH (from:Category { catId: row[0]})
MATCH (to:Category { catId: row[1]})
CREATE (from)-[:SUBCAT_OF]->(to)
一些建议:
在用于搜索节点的字段上创建索引。 (加载数据时无需在其他字段上建立索引,可以稍后完成,它会消耗不必要的内存)
不要将最大堆大小设置为充满系统 RAM。将其设置为 RAM 的 50%。
- 增加
LIMIT
:如果增加堆(RAM),除非使用它,否则不会提高性能。当你设置LIMIT
到 10,000 则堆的大部分将是空闲的。我能够使用 4G 堆加载限制为 100,000 的数据。您可以设置 200,000 或更多。如果它导致任何问题,请尝试减少它。
-
重要的确保在更改/设置配置后重新启动 Neo4j。 (如果尚未完成)。
下次运行加载 CSV 查询时,不要忘记删除以前的数据,因为它会创建重复项。
NOTE:我将文件下载到笔记本电脑并使用相同的文件,因此没有下载时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)