使用Windows上的批量导入将数十亿个节点和关系导入Neo4j

时间:2017-08-19 11:05:18

标签: maven neo4j batch-processing

我想向Neo4j插入几十亿个节点和关系。使用" LOAD CSV"由于工作内存过载,浏览器(Chrome)30分钟后取消,但我有16GB RAM。

使用批量导入程序(Documentation & DownloadExplanation for Linux )显然可以将大型数据集导入Neo4j。

简单地使用它(不需要源/ git / maven):

1. download 2.2 zip
2. unzip
3. run import.sh test.db nodes.csv rels.csv (on Windows: import.bat)
4. after the import point your /path/to/neo4j/conf/neo4j-server.properties 
to this test.db directory, or copy the data over to your server cp -r 
test.db/* /path/to/neo4j/data/graph.db/

You provide one tab separated csv file for nodes and one for 
relationships (optionally more for indexes)

我很难在Windows上使用该插件。在Rik Van Bruggen的Linux-Video(上面的链接)中,他提到"安装批量导入器"。

我解压缩了文件"下载2.2 zip"。我在另一个文件夹中有我的CSV。我如何使用" import.bat"在WIndows文档中提到的命令?在cmd中,命令无法找到......

2 个答案:

答案 0 :(得分:4)

在将该工具用于巨大的数据集之前,我可以建议您在几分钟内学会导入数百万个节点的几件事(Neo4j Community Edition for Windows)。

关于Neo4j导入提示:

  • 不要使用网页界面来导入这样的大数据集,内存过载是不可避免的。

  • 相反,使用编程语言与Neo4j进行交互(我最近使用的是官方的 Python 模块,它只是为了学习,但你也可以这样做好老的Java)。

  • 在使用LOAD CSV之前,请记住编写USING PERIODIC COMMIT指令,以便每次迭代导入大量数据。

  • 在从CSV导入关系之前,请记住使用CREATE CONSTRAINT ON <...> ASSERT <...> IS UNIQUE作为标签的关键属性。它会对关系创建产生巨大的影响。

  • 使用MATCH(...)而不是CREATE(...)进行关系过程。它将避免重复。

关于Neo4j的表现:

我会发布用于配置的neo4j.conf自定义行(仅供参考,可能是 错误的 设置你的申请,要小心):

dbms.memory.pagecache.size=3g
dbms.jvm.additional=-XX:+UseG1GC
dbms.jvm.additional=-XX:-OmitStackTraceInFastThrow
dbms.jvm.additional=-XX:+AlwaysPreTouch
dbms.jvm.additional=-XX:+UnlockExperimentalVMOptions
dbms.jvm.additional=-XX:+TrustFinalNonStaticFields
dbms.jvm.additional=-XX:+DisableExplicitGC

我的neo4j-community.vmoptions自定义行(同样,仅供参考):

-Xmx1024m
-XX:+UseG1GC
-OmitStackTraceInFastThrow
-XX:+AlwaysPreTouch
-XX:+UnlockExperimentalVMOptions
-XX:+TrustFinalNonStaticFields
-XX:+DisableExplicitGC

我的测试机是配备Core i3(双核)的弱智能笔记本,配备8GB内存,Windows 10和Neo4j 3.2.1社区版。

我能够在不到3分钟的时间内导入 7百万个节点 在不到5分钟内完成3.5百万个关系 (没有递归关系)。

在功能更强大的机器中,使用特定的设置 Neo4j可以比这更好。希望它有所帮助。

答案 1 :(得分:2)

  1. 如果您使用带有PERIODIC COMMIT的LOAD CSV,则不应该遇到任何内存问题。几十亿个节点(如此令人愉快的模糊:-)可能需要一段时间来加载。
  2. https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/说明了如何在脱机模式下加载数据库。您可以使用 neo4j-import neo4j-admin import (两者都是命令行,第二个替换第一个)来执行此操作。根本不需要插件。确保您使用的是Windows zip安装(CE或EE),exe安装(仅限CE)可能不包含这些工具
  3. 如果您正在进行任何形式的大规模更新,浏览器永远不是一个好的选择。认真。这意味着要做可视化,如果你给它任何机会你的语法,它会尝试这样做。对于长时间运行的批量更新,这真的是您想要的吗?请改用 cypher-shell (命令行)。 Stackoverflow上的许多问题实际上并不是Neo4j问题,而是人们超载了浏览器的dom结构(所以它实际上是Firefox或Chrome问题)
  4. 希望这有帮助。

    此致 汤姆