0
Orientdb : 2.1.3
Pyorient : 1.4.7

我需要通过 pyorient 将具有十万个顶点和一百万条边的图导入 Orientdb。

db.command 一一

首先,我只是使用 db.command("create vertex V set a=1") 将所有顶点和边一一插入。

但是我大概需要两个小时。

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

大量插入?

然后我发现 Orientdb 支持Massive Insert,但不幸的是 pyorient 的作者在一个问题中大量插入:没有事务?提到过

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

SQL 批处理

Pyorient 支持sql 批处理。也许这是一个机会!

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

我以 5000 个顶点和 20000 个边为例

  • sql批处理

    vertexs : 25.1708816278 s
    edges : 254.248636227 s
    
  • 原来的

    constrct vertexs : 19.5094766904 s
    construct edges : 147.627924276 s
    

..似乎sql批处理花费了更多时间。

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

谢谢。

4

1 回答 1

0

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

于 2016-05-16T15:58:27.983 回答