【问题标题】:Loading large cypher file in Neo4J在 Neo4J 中加载大型密码文件
【发布时间】:2019-01-16 19:45:13
【问题描述】:

我在 Windows 10 中将 Cypher 文件加载到 Neo4J 时遇到了一些困难。该文件是一个 175 Mb 的 .cql 文件,其中包含超过一百万行的 Cypher 语言节点和边(用分号分隔) -- CREATE [node],诸如此类。对于较小的项目,我一直在 Web 浏览器中使用 APOC 命令:

call apoc.cypher.runFile('file:///<file path>')

但这对于一百万个以上的查询文件来说太慢了。我已经为节点创建了索引,目前正在通过命令运行它:

neo4j-shell -file <file path> -path localhost

但这仍然很慢。我想知道,有什么方法可以加快摄入量?

另外,请注意我使用的是最近的 ONGDB 版本,而不是直接的 Neo4J;我认为这不会产生任何实质性的影响。

【问题讨论】:

    标签: performance neo4j cypher ongdb


    【解决方案1】:

    如果您的超大 CQL 文件的目的只是提取数据,那么纯粹在 Cypher 中执行此操作将会非常缓慢(甚至可能导致内存不足错误)。

    如果您要摄取到新的 neo4j 数据库中,您应该考虑重构其中的数据并使用import command of neo4j-admin 工具来有效地摄取数据。

    如果您要摄取到现有数据库中,您应该考虑从 CQL 文件中重构数据和逻辑并使用LOAD CSV

    【讨论】:

      【解决方案2】:

      我最终使用 cypher-shell 摄取了它。它仍然很慢,但至少它确实完成了。使用它需要先打开一个 Neo4J 控制台,然后在第二个命令行中使用:

      type <filepath>\data.cql | bin\cypher-shell.bat -a localhost -u <user> -p <password> --fail-at-end
      

      这适用于 Windows 10,尽管需要一段时间。

      【讨论】:

        【解决方案3】:

        在事务之外运行查询时,neo4j will automatically start and commit a separate transaction for every query。您可以通过在开始时启动事务来加快速度,每隔几千个查询提交并启动一个新事务(内存使用会随着事务大小而增加,因此这是事务大小的限制因素)。

        示例 queries.cypher(事务大小为 3):

        :begin
        CREATE(n:PERSON { name: "Homer Simpson" })  
        CREATE(n:PERSON { name: "Marge Simpson" })
        CREATE(n:PERSON { name: "Abe Simpson" })    
        :commit
        :begin
        CREATE(n:PERSON { name: "Bart Simpson" })
        CREATE(n:PERSON { name: "Lisa Simpson" })
        CREATE(n:PERSON { name: "Maggie Simpson" })
        :commit
        

        然后像往常一样运行cypher-shell &lt; queries.cypher

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-11
          • 1970-01-01
          • 1970-01-01
          • 2015-05-20
          • 2015-10-22
          • 1970-01-01
          • 2019-10-26
          • 1970-01-01
          相关资源
          最近更新 更多