将大量边插入OrientDB会导致崩溃(ODatabaseException)

将大量边插入OrientDB会导致崩溃(ODatabaseException),database,insert,bulkinsert,orientdb,Database,Insert,Bulkinsert,Orientdb,我在OrientDB中插入大量(几百万)边时遇到问题。在java中,我有一个大约5000行和5000列的矩阵,其中每个条目表示对象之间的相似性值。我想将此信息插入OrientDB 但是在创建了200k和400k之间的边之后,发生了ODatabaseException,我还没有找到解决这个问题的方法 我用以下方式创建边:使用,我将SQL查询添加到字符串中,并对每100条边执行批处理。每个SQL行如下所示: CEATE EDGE similarity FROM #10:0 TO #10:1 SET

我在OrientDB中插入大量(几百万)边时遇到问题。在java中,我有一个大约5000行和5000列的矩阵,其中每个条目表示对象之间的相似性值。我想将此信息插入OrientDB

但是在创建了200k和400k之间的边之后,发生了ODatabaseException,我还没有找到解决这个问题的方法

我用以下方式创建边:使用,我将SQL查询添加到字符串中,并对每100条边执行批处理。每个SQL行如下所示:

CEATE EDGE similarity FROM #10:0 TO #10:1 SET score = 0.5
我应该用另一种方式来做吗?这是一个缺乏记忆的问题吗?我还没有找到解决这个问题的办法

谢谢

编辑:

我正在更新问题,但有一个例外和一点代码:

代码:

public void saveHouseCharacteristicsSimilarities(double[][] houseSim,
        ArrayList<OHouse> houseList) {

    OrientGraphFactory factory = new OrientGraphFactory("plocal:/directory");
    OrientGraphNoTx graph = factory.getNoTx();

    int counter=0;
    String query = "BEGIN\n";
    for (int h1 = 0; h1 < (houseList.size() - 1); h1++) {
        for (int h2 = (h1 + 1); h2 < houseList.size(); h2++) {
            counter++;

            query += "create edge similarity from "
                    + houseList.get(h1).getRid() + " to "
                    + houseList.get(h2).getRid() + " SET score = "
                    + houseSim[h1][h2] + "\n";

            if (counter % 100 == 0
                    || ((h1 == (houseList.size() - 1)) && (h2 == (houseList
                            .size() - 1)))) {
                query += "COMMIT";
                graph.command(new OCommandScript("sql", query)).execute();
                query = "BEGIN";
            }
        }
    }
    graph.shutdown();
}

尝试类似这样的方法来创建边

OrientVertex vertex = graph.getVertex(houseList.get(h1).getRid());
OrientVertex vertex2 = graph.getVertex(houseList.get(h2).getRid());
vertex.addEdge("similarity",vertex2,new Object[]{"score",houseSim[h1][h2]});

看来问题不在于Orient本身,而在于运行程序的glassfish服务器。Glassfish出于某种原因终止了与Orient的连接。无论如何,在服务器之外运行程序解决了这个问题。谢谢

你能发布一些代码和例外情况吗?我用你询问的信息更新了这个问题。你为什么不使用java api而不是sql来创建边缘?我一直倾向于使用sql,除非java api有更好的性能,否则我认为没有理由使用它。但这只是个人偏好。给出了几乎相同的结果,性能方面与使用SQL几乎相同。java而不是SQL会出现异常吗?
OrientVertex vertex = graph.getVertex(houseList.get(h1).getRid());
OrientVertex vertex2 = graph.getVertex(houseList.get(h2).getRid());
vertex.addEdge("similarity",vertex2,new Object[]{"score",houseSim[h1][h2]});