我需要将大约50亿个顶点加载到OrientDB中。
OrientDB文档声称每个群集可以容纳超过90亿个顶点,一天内可以插入多达100亿个文档。但是我现在已经运行了几天,并且只创建了一小部分数据。
我的模型非常简单......
Person
-> Name STRING
-> Score DECIMAL
我已经离开了OrientDB oetl工具,它已经在一周内插入了5亿条记录。记录仍然(非常缓慢地)以大约每秒100行的速率加载。它开始于每秒1500个节点,但逐渐减慢。目前的估计表明加载所有数据需要几个月(!)
与此同时,我编写了一个单独的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程序远不如此。
这是预期的表现还是我误解了一些事情。我很高兴等待几天来加载我的数据,但不是几周(/月!!)
答案 0 :(得分:0)
对于要优化的NoTx中的java导入程序,可以将addVertex与此类内联属性一起使用。
OrientVertex v = graph.addVertex("class:person", "Name","test" + i,"Score", 100 * i);
这将只调用一次保存。
提高速度的下一步是使用多线程