在Neo4J中加载大密码文件

时间:2019-01-16 19:45:13

标签: performance neo4j cypher

我在Windows 10中将Cypher文件加载到Neo4J时遇到了一些困难。该文件是175 Mb .cql文件,其中充满了使用Cypher语言的一百万行以上的节点和边线(由分号分隔) -创建[node],诸如此类。对于较小的物品,我一直在Web浏览器中使用APOC命令:

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

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

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

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

另外,请注意,我使用的是最新的ONGDB构建,而不是直接的Neo4J。我认为这不会带来任何实质性的改变。

3 个答案:

答案 0 :(得分:2)

如果非常大的CQL文件的目的只是为了摄取数据,那么仅在Cypher中进行处理将非常缓慢(甚至可能导致内存不足错误)。

如果要导入新的neo4j DB,则应考虑从中重构数据,并使用import command of neo4j-admin工具有效地吸收数据。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

query.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 < queries.cypher