如何通过pyorient优化将具有十万个顶点和五十万个边的大图导入Orientdb的过程?

时间:2016-05-16 11:55:21

标签: orientdb graph-databases pyorient

Orientdb : 2.1.3
Pyorient : 1.4.7

我需要通过pyorient将带有十万个顶点和五十万个边的图导入Orientdb。

db.command逐一

首先,我只使用db.command(“创建顶点V set a = 1”)逐个插入所有顶点和边。

但这需要我两个小时左右。

所以我想找到一种方法来优化这个过程。

大量插入?

然后我发现Orientdb支持 Massive Insert ,但不幸的是,问题here中的pyorient的作者提到了

  

在bynary协议中(当然在pyorient中)没有大量的插入意图。

SQL批次

Pyorient支持massive insertion: no transacations? 。也许这是一个机会!

我只是将所有插入命令放在一起并通过db.batch()运行它。

我拍摄了一个包含5000个顶点和20000个边缘的图表,例如

  • sql batch

    vertexs : 25.1708816278 s
    edges : 254.248636227 s
    
  • 原创

    constrct vertexs : 19.5094766904 s
    construct edges : 147.627924276 s
    

..似乎sql批处理花费的时间要多得多。

所以我想知道是否有办法做到这一点。

感谢。

1 个答案:

答案 0 :(得分:0)

当您逐个输入时,您已经尝试过使用Transactional Graph获得更好的性能并提交每个X项目?通常这是插入大量数据的正确方法。不幸的是,使用pyorient,正如你也指出的那样,Massive Insert你不能使用它,而且多进程方法也无法利用(套接字连接只有一个,所有并发对象都将被序列化(如管道),因为驱动程序中未实现连接池。因此,您可以放弃多处理的性能优势)。