将较大的csv文件加载到neo4j中

时间:2019-06-11 15:48:37

标签: neo4j cypher database-performance load-csv

我想加载一个包含Wikipedia类别rels.csv之间的关系的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文件吗?

1 个答案:

答案 0 :(得分:1)

这花费了太多时间。数百万的关系应该花费几分钟甚至几分钟的时间。

我刚刚在321秒内从您共享的链接(Cats-90和Rels-231)中加载了所有数据,而我的笔记本电脑上的内存设置还不到一半。

dbms.memory.heap.initial_size=1G  
dbms.memory.heap.max_size=4G 
dbms.memory.pagecache.size=1512m
  

这不是限制,可以进一步改进。   enter image description here

稍作修改的查询: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)

一些建议:

  1. 在用于搜索节点的字段上创建索引。 (加载数据时无需在其他字段上建立索引,以后可以完成,它会消耗不必要的内存)

  2. 不要将最大堆大小设置为已满系统RAM。将其设置为RAM的50%。

  3. 增加LIMIT:如果要增加Heap(RAM),除非使用,否则不会提高性能。当您将LIMIT设置为10,000时,大部分堆将是免费的。我能够使用4G堆加载限制为100,000的数据。您可以设置200,000或更多。如果它引起任何问题,请尝试减少它。
  4. 重要:请确保在更改/设置配置后重新启动Neo4j。 (如果尚未完成)。
  

下次运行加载CSV查询时,请不要忘记删除以前的数据,因为它将创建重复项。

注意::我将文件下载到便携式计算机上并使用了,因此没有下载时间。