【问题标题】:Load a large csv file into neo4j将一个大的 csv 文件加载到 neo4j
【发布时间】:2019-10-26 02:19:22
【问题描述】:

我想加载一个 csv,其中包含 Wikipedia 类别 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 文件?

【问题讨论】:

标签: neo4j cypher database-performance load-csv


【解决方案1】:

这花费了太多时间。 400 万条关系需要几分钟甚至几秒钟。

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

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

这不是限制,可以进一步改进。

略微修改查询:将 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:如果您增加堆(RAM),除非使用它,否则不会提高性能。当您将LIMIT 设置为 10,000 时,堆的大部分将是空闲的。我能够使用 4G 堆加载限制为 100,000 的数据。您可以设置 200,000 或更多。如果它导致任何问题,请尝试减少它。
  4. 重要 确保在更改/设置配置后重新启动 Neo4j。 (如果尚未完成)。

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

注意:我将文件下载到笔记本电脑并使用相同的文件,因此没有下载时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2017-12-30
    • 2022-01-09
    相关资源
    最近更新 更多