linux - neo4j webser 无法将事务标记为仅回滚

标签 linux ubuntu neo4j webserver

我最近下载了 neo4j 2.1.5。我正在使用 webadmin(即浏览器界面)。现在我必须将一个相当大的数据集下载到其中,大约有 2000 万条记录。我能够毫无问题地喂养 500 万只。

但是,对于更大的(2000 万)数据集,我无法做到这一点。我使用加载 csv 命令,每次提交 1000 个(但我尝试了 5、10、100、10000、100000)。我尝试了许多不同的设置(cache_type = none,weak;使用操作系统缓冲区或使用 neo4j 自己的缓冲区),但我只能得到“Java 堆空间”或“无法将事务标记为仅回滚”错误。我也尝试了不同的初始设置和要使用的 ram 的最大值。我试图将文件分成 500 万个部分,但是当我尝试提供文件时,我遇到了同样的错误(Java 堆空间)。

但是,我注意到的一件事是,当我运行“free -h”时,缓存部分开始快速增长,在达到 2.5 Gb 后它会抛出错误。即使我告诉 neo4j 不要使用操作系统缓冲区和缓存,我也在机器上使用 linux ubuntu,64 位的 jdk 1.8,8Gb ram。

我能够将 2000 万条记录输入我的另一台机器(OS X Mavericks,64 位 jdk 1.8,机器上的 4b Ram)。所以我想知道 Ubuntu 出了什么问题?有人遇到过这个问题吗?我似乎没有在互联网上找到任何类似的案例。如果您能指出可能的解决方案或提供有用的链接,我将不胜感激。

最佳答案

差点忘了!我能够解决问题。
事实证明,问题出在格式错误的输入文件中,该文件在随机位置包含双引号 (")。一个示例是这样的记录:name、surname、O"something、date。 Neo4j 假定 2 个双引号之间的所有内容都是一个实体,甚至是换行符。因此,neo4j 在遇到第二个 "符号之前会消耗数百万行。因此,在创建节点时,它会尝试将数百万行放入节点的单个字段中。如果它没有足够的堆空间来容纳所有引号之间的行,它将抛出错误:“Java 堆空间”、“无法将事务标记为仅回滚”等。如果它有足够的堆空间,它将为节点创建一个巨大的字段。
< br/> 如果您在 csv 文件的每一列周围加上双引号:“name”、“surname”、“O”something、“date”,您仍然会遇到内存问题。正如您在前面的示例中看到的那样,逗号和新行将不生效,因为它们被引号括起来。
我已经通过文件并使用 sed 命令将所有双引号替换为单引号。

关于linux - neo4j webser 无法将事务标记为仅回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338856/

相关文章:

linux - 确定/dev/random 是否减慢进程

linux - unix 使用以下命令列出文件

linux - Siege 启动错误 - 无法连接到套接字

php - 修复损坏的 libsodium php 安装 Ubuntu Xenial

我可以在没有 fork 的情况下执行 shell 或系统调用吗?

linux - Elixir:在 Ubuntu 上安装 Elixir 会终止正在运行的 Couch DB 实例

linux - 仅安装手册页和文档?

java - Neo4j java 驱动程序的 Cypher 查询执行时间

neo4j - 如何删除一个节点和所有关系,以及在 Neo4j 中连接到它的节点

python - py2neo 不在 Neo4j 数据库中强制执行唯一性约束