我是neo4j的新手。在在这里发布这个问题之前,我已经做了一些研究,但找不到适合我的解决方案。我有一个 32GB RAM 的 ubuntu 虚拟机。我目前正在使用 neo4j-community 版本 4.0.2 并在我的 neo4j.conf 文件中获得以下配置。
dbms.memory.heap.initial_size=5120m
dbms.memory.heap.max_size=5120m
dbms.memory.pagecache.size=10g
我正在尝试使用 cypher-shell 将 CSV 文件导入默认的 neo4j 数据库。它适用于小文件,但我对大小 > 1GB 的 csv 文件有疑问。它失败并出现以下错误
由于超出内存限制,无法分配 524288 字节;使用=2147266560,最大值=2147483648
我尝试设置 JAVA_OPTS=-Xmx4G 来增加java堆空间,但它仍然失败并出现同样的错误。有人可以帮忙吗?cypher-shell 实用程序是在寻找更多的堆空间,还是 neo4j 数据库在寻找额外的堆空间?如果无法使用 cypher-shell 导入大文件,我还有哪些其他选项可以导入大文件?
编辑:我每 200 行使用一次定期提交,我在 .cypher 文件中有以下密码脚本,并使用 cypher-shell 运行 .cypher 文件
CREATE INDEX ON:Review (nr);
USING PERIODIC COMMIT 200 LOAD CSV WITH HEADERS FROM "file:///12Review.csv" AS row
MERGE (R:Review {nr: toInteger(row.nr)})
WITH row, R
FOREACH(ignoreMe in CASE WHEN row.reviewDate IS NULL THEN [] ELSE [1] END| SET R.reviewDate =row.reviewDate)
FOREACH(ignoreMe in CASE WHEN row.title IS NULL THEN [] ELSE [1] END| SET R.title = row.title)
FOREACH(ignoreMe in CASE WHEN row.rating1 IS NULL THEN [] ELSE [1] END| SET R.rating1 =row.rating1)
FOREACH(ignoreMe in CASE WHEN row.rating2 IS NULL THEN [] ELSE [1] END| SET R.rating2 =row.rating2)
FOREACH(ignoreMe in CASE WHEN row.rating3 IS NULL THEN [] ELSE [1] END| SET R.rating3 =row.rating3)
FOREACH(ignoreMe in CASE WHEN row.rating4 IS NULL THEN [] ELSE [1] END| SET R.rating4 =row.rating4)