OrientDB缓慢插入



我需要将大约50亿个顶点加载到OrientDB中。

OrientDB文档声称,每个集群可以容纳超过90亿个顶点,一天可以插入多达100亿个文档。然而,我已经运行了几天,只创建了一小部分数据。

我的模型很简单。。。

Person
-> Name   STRING
-> Score  DECIMAL

1

我已经让OrientDB oetl工具运行,它在一周内插入了5亿条记录。记录仍然(非常缓慢)以每秒大约100行的速率加载。它开始时大约每秒1500个节点,但速度逐渐放缓。目前的估计建议在几个月内加载所有数据(!)

2

同时,我编写了一个单独的java应用程序来测试批量插入

final OrientGraphFactory factory = new OrientGraphFactory("plocal:C:/orientdb/databases/test", "X", "X");
factory.declareIntent(new OIntentMassiveInsert());
OrientGraphNoTx graph = factory.getNoTx();
for (int i= 0; i < NUM_INSERTLOOPS; i++)
{                       
    OrientVertex v = graph.addVertex("person", "12");
    v.setProperty("Name", "test" + i);
    v.setProperty("Score", 100 * i);
}
graph.commit();

这也开始得很好,大约8秒内有10万个节点,但在1000万左右之后,这似乎突然慢到了5分钟以上。我在24小时和5000万个节点后停止了它。

我正在一台性能良好的Windows机器上运行一个本地数据库。运行任一进程时,CPU使用率约为1%。oetl使用了大约15B的20GB RAM,而java程序则要少得多。

这是意料之中的表现,还是我误解了什么。我很乐意等待几天来加载我的数据,但不是几周(/月!!)

对于NoTx中的java导入程序,要进行优化,可以使用具有类似内联属性的addVertex。

OrientVertex v = graph.addVertex("class:person", "Name","test" + i,"Score", 100 * i);

这将只调用一次save。

提高速度的下一步是使用多线程

最新更新