如何在neo4j中加速大数据导入

时间:2016-05-28 22:45:39

标签: csv import neo4j graph-databases

我正在使用neo4j-import命令行将大型csv文件加载到neo4j中。我已经使用数据子集测试了命令行,它运行良好。 csv文件的大小约为200G,包含~10M节点和~B关系。目前,我正在使用默认的neo4j配置,并且创建节点需要数小时,并且它被卡在[*SORT:20.89 GB-------------------------------------------------------------------------------] 0我担心创建关系需要更长的时间。因此,我想知道加速数据导入的可能方法。

  1. 这是一台16GB的机器,neo4j-import输出消息显示如下。 free machine memory: 166.94 MB Max heap memory : 3.48 GB我应该更改neo4j配置以增加内存吗?会有帮助吗?

  2. 我正在设置neo4j-import --processes = 8。但是,JAVA命令的CPU使用率仅约为1%。它看起来不错吗?

  3. 根据我的数据集的大小,有人可以给我一个大概的加载时间吗?它是一款8核16GB内存独立机器。

  4. 我应该考虑加速数据导入的其他任何事情吗?

  5. 更新:

    1. 本机没有SSD磁盘

    2. 我运行top命令,它显示JAVA进程正在使用85%的RAM,我认为这属于neo4j-import命令。

    3. 导入命令为:neo4j-import --into /var/lib/neo4j/data/graph.db/ --nodes:Post Posts_Header.csv,posts.csv --nodes:User User_Header.csv,likes.csv --relationships:LIKES Likes_Header.csv,likes.csv --skip-duplicate-nodes true --bad-tolerance 100000000 --processors 8

    4. 4. Posts_Header Post_ID:ID(Post),Message:string,Created_Time:string,Num_Of_Shares:int,e:IGNORE, f:IGNORE User_Header a:IGNORE,User_Name:string,User_ID:ID(User) Likes_Header: :END_ID(Post),b:IGNORE,:START_ID(User)

      我运行了示例数据导入,它非常快,就像几秒钟一样。由于我使用默认的neo4j堆设置和默认的Java内存设置,如果我配置这些数字会有帮助吗?

1 个答案:

答案 0 :(得分:2)

有些问题:

  • 您拥有什么样的磁盘(最好是SSD)。
  • 你的所有RAM似乎都已经用完了,用top或ps检查其他进程使用内存并杀死它们。
  • 你能分享完整的neo4j-import命令吗?
  • 您的CSV样本和标题行是什么样的?

看来你有很多属性?它们都被正确引用了吗?你真的在图表中需要所有这些吗?

首先尝试使用示例,例如create-or-extend-tables

通常它可以使用快速磁盘导入1M记录/秒。 这包括节点,属性和关系记录。