我想向Neo4j插入几十亿个节点和关系。使用" LOAD CSV"由于工作内存过载,浏览器(Chrome)30分钟后取消,但我有16GB RAM。
使用批量导入程序(Documentation & Download,Explanation 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中,命令无法找到......
答案 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页面以了解优化效果:https://neo4j.com/docs/operations-manual/current/performance/
为Windows机器设置正确的内存配置:如有必要,手动配置dbms.memory.pagecache.size
参数(在neo4j.conf
文件中)。
请记住: Java虚拟机不是黑盒子;您可以专门为您的应用程序改进其性能(编辑neo4j-community.vmoptions文件)。
例如,您可以设置JVM的最大内存使用量(-Xmx
参数),也可以将-XX:+UseG1GC
参数设置为使用G1垃圾收集器(高性能,Oracle建议用于生产环境) (https://docs.oracle.com/cd/E40972_01/doc.70/e40973/cnf_jvmgc.htm#autoId0)
我会发布用于配置的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)
希望这有帮助。
此致 汤姆