将大量边插入OrientDB会导致崩溃(ODatabaseException)
我在OrientDB中插入大量(几百万)边时遇到问题。在java中,我有一个大约5000行和5000列的矩阵,其中每个条目表示对象之间的相似性值。我想将此信息插入OrientDB 但是在创建了200k和400k之间的边之后,发生了ODatabaseException,我还没有找到解决这个问题的方法 我用以下方式创建边:使用,我将SQL查询添加到字符串中,并对每100条边执行批处理。每个SQL行如下所示:将大量边插入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
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]});