我最近下载了neo4j 2.1.5。我正在使用webadmin(即浏览器界面)。现在我必须下载一个非常大的数据集,大约有2000万条记录。我能够以5毫升的速度喂食,没有任何问题。
但是,我无法使用更大的(2000万)数据集。我使用load csv命令,每次提交1000次(但我尝试过5,10,100,10000,100000)。我尝试了很多不同的设置(cache_type = none,weak;使用os缓冲区或使用neo4j自己的设置),但我只能得到“Java堆空间”或“无法将事务标记为仅回滚”错误。我也尝试过使用不同的ram初始值和最大值设置。我试图将文件分成5个块,但是当我尝试提供文件时,我得到了相同的错误(Java堆空间)。
然而,我注意到的一件事是,当我运行“free -h
”时,缓存部分开始快速增长,并且在2.5 Gb之后它会抛出错误。即使我告诉neo4j不要使用OS缓冲区和缓存,我使用的是linux ubuntu,jdk 1.8和64位,8Gb ram在机器上。
我能够将2000万条记录输入我的另一台机器(OS X Mavericks,jdk 1.8,64位,机器上有4b Ram)。所以我想知道Ubuntu出了什么问题?有谁遇到过这个问题?我似乎没有在互联网上找到任何类似的案例。如果您能指出可能的解决方案,或者提供有用的链接,我将非常感激。
答案 0 :(得分:1)
差点忘了!我能够解决这个问题
事实证明问题出现在格式错误的输入文件中,该文件在随机位置包含双引号(“)。例如,一条记录如下:name,surname,O”something,date。 Neo4j假设2个双引号之间的所有内容都是单个实体,甚至是新的线符号。因此,neo4j在遇到第二个“符号”之前会占用数百万行。因此,在创建节点时,它会尝试将数百万行放入节点中的单个字段中。如果它没有足够的堆空间来容纳所有引号之间的行,它将抛出一个错误:“Java堆空间”,“未能将事务标记为仅回滚”等。如果它有足够的堆空间,它将为节点创建一个巨大的字段。登记/>
如果你在csv文件的每一列周围加上双引号:“name”,“surname”,“O”某事“,”date“,你仍会遇到内存问题。正如你在前面的例子中看到的逗号和新行将会不生效,因为它们用引号括起来。
我已经浏览了文件,并使用sed命令将所有双引号替换为单引号。