OrientDB慢插入

时间:2015-04-07 09:28:10

标签: java performance 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秒内有100k节点,但是在1000万左右之后,这突然似乎慢到超过5分钟。我在24小时后停止了它,并且有5000万个节点。

我在一台规格良好的Windows机器上运行本地数据库。在运行任一过程时,CPU使用率约为1%。 oetl使用大约15B的20GB RAM,java程序远不如此。

这是预期的表现还是我误解了一些事情。我很高兴等待几天来加载我的数据,但不是几周(/月!!)

1 个答案:

答案 0 :(得分:0)

对于要优化的NoTx中的java导入程序,可以将addVertex与此类内联属性一起使用。

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

这将只调用一次保存。

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