在Neo4j中无法导入超过10000个节点

时间:2014-07-09 02:59:56

标签: java neo4j

我试图将数据从Twitter的用户和关注者的50MB文本文件导入到Neo4j。但是我的代码只运行到大约10000个节点并抛出错误:" java.lang.OutOfMemoryError:GC开销限制超过"。这是我的代码,我不知道我哪里做错了?

        BufferedReader br = new BufferedReader(new FileReader(inputFile));
    String currentLine;
    String token[] = null;

    try (Transaction tx = graphDb.beginTx()) {
        Label userLabel = DynamicLabel.label("User");

        while((currentLine = br.readLine()) != null) {
            if(!currentLine.equals("\n")) token = currentLine.split("\t");
            if(token.length > 2) {

                userNode = graphDb.createNode(userLabel);
                userNode.setProperty("username", token[2]);
                userNode.setProperty("id", token[1]);
                userNode.setProperty("cookie", token[0]);
                System.out.println("Insert user: " + token[0] + " " + token[1] + " " + token[2]);
                System.out.println("Insert follower...");

                for(int i=3;i<token.length;i++) {
                    followerNode = graphDb.createNode(userLabel);
                    followerNode.setProperty("id", token[i]);
                    relationship = userNode.createRelationshipTo(followerNode, RelTypes.FOLLOWED_BY);

                }
                System.out.println("Insert follower: done! - " + (token.length-3));

            }
        }

        tx.success();
    }

    br.close();

1 个答案:

答案 0 :(得分:1)

你的问题不是neo4j,而是java。具体来说,您的堆超过了最大大小。

你可以:

a)优化你的代码,使你的堆不会变得越来越大(我通常不会谈论优化,直到开发的后期阶段,但你必须浪费大量的在某处堆积空间,特别是如果您的输入文件只有50 MB)

b)使用以下命令行参数运行java,这允许您覆盖最大堆大小:-Xmx1024m。这将设置为1024 MB,但您可以用您需要的任何内容替换1024

相关问题