【问题标题】:Import billions of nodes and relationships to Neo4j using Batch Import on Windows在 Windows 上使用批量导入将数十亿个节点和关系导入 Neo4j
【发布时间】:2018-01-27 23:22:10
【问题描述】:

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

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

简单地使用它(不需要 source/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 视频(上面的链接)中,他提到了“安装批量导入器”。

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

【问题讨论】:

    标签: maven neo4j batch-processing


    【解决方案1】:

    在使用该工具处理庞大的数据集之前,我可以向您推荐一些我刚刚学到的在几分钟内导入数百万个节点的东西(Neo4j 社区版 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 RAM、Windows 10 和 Neo4j 3.2.1 社区版。

    我能够在不到 3 分钟的时间内导入 700 万个节点在不到 5 分钟的时间内导入 350 万个关系 em>(没有递归关系)。

    在功能更强大的机器中,通过特定精心设计的设置Neo4j 可以做得比这更好。希望它有所帮助。

    【讨论】:

      【解决方案2】:
      1. 如果您将 LOAD CSV 与 PERIODIC COMMIT 一起使用,您应该不会遇到任何内存问题。几十亿个节点(非常模糊:-)可能需要一段时间才能加载。
      2. https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/ 解释了如何在离线模式下加载数据库。您可以使用 neo4j-importneo4j-admin import (两者都是命令行,第二个替换第一个)来做到这一点。根本不需要插件。确保您使用的是 Windows zip 安装(CE 或 EE),exe 安装(仅限 CE)可能不包含这些工具
      3. 如果您要进行任何形式的大规模更新,浏览器绝不是一个好的选择。严重地。它旨在进行可视化,如果您在语法中给它任何机会,它会尝试这样做。对于长期运行的批量更新,这真的是您想要的吗?请改用 cypher-shell(命令行)。 Stackoverflow 上的许多问题实际上并不是 Neo4j 问题,而只是人们重载了浏览器的 dom 结构(因此它实际上是 Firefox 或 Chrome 问题)

      希望这会有所帮助。

      问候, 汤姆

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        相关资源
        最近更新 更多