【发布时间】:2015-03-27 11:50:36
【问题描述】:
我正在评估用图形数据库替换关系数据库。我正在尝试将数据从原始数据库复制到 OrientDB(2.0 版)。
我通过OServer server = OServerMain.create(); 创建了一个嵌入式服务器,将false 传递给storage.useWAL。
然后我创建一个非事务图:
OrientBaseGraph graph = new OrientGraphNoTx("plocal:"+db);
graph.declareIntent(new OIntentMassiveInsert());
graph.getRawGraph().declareIntent(new OIntentMassiveInsert());
graph.getRawGraph().setValidationEnabled(false);
我为所有表创建顶点类型。我首先为每个顶点创建所有顶点及其属性:
OrientVertex node = graph.addVertex("class:"+lbl, properties);
然后我在这些顶点之间创建边。这些边中的一些(但不是全部)具有属性。
if (props!=null){
nfrom.addEdge(linkName, nto,null,null,props);
} else {
nfrom.addEdge(linkName, nto);
}
我尝试过使用和不使用边缘类,没有发现任何性能改进。 总而言之,我有 328822 个顶点和 831293 个边。总运行时间最多25分钟左右!!大部分时间(至少 20 分钟)用于插入边,而不是顶点。
在同一台机器上,从同一个关系数据库中读取相同的数据并用 BerkeleyDB 后端将其写入 Titan,我在 2 分钟内传输数据!
是什么让 OrientDB 比竞争对手慢了大约 10 倍?我做错了什么?
谢谢!
【问题讨论】:
-
你也可以分享泰坦代码(骨架)吗?然后我会有一个有效的参考。我对 OrientDB(作为嵌入式数据库)的体验就其性能而言非常好。