【问题标题】:How to optimize the process of importing a large graph with one hundred thousand vertexes and half a million edges into Orientdb by pyorient?如何优化pyorient将十万个顶点和半百万条边的大图导入Orientdb的过程?
【发布时间】:2016-05-16 11:55:21
【问题描述】:
Orientdb : 2.1.3
Pyorient : 1.4.7

我需要通过 pyorient 将一个包含十万个顶点和 50 万条边的图导入 Orientdb。

db.command 一个一个

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

但这需要我大约两个小时。

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

大量插入?

然后发现Orientdb支持Massive Insert,可惜pyorient的作者在一个issuemassive insertion: no transacations? 提到了

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

SQL 批处理

Pyorient 支持sql batch。也许这是一个机会!

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

我以一个包含 5000 个顶点和 20000 个边的图为例

  • sql批处理

    vertexs : 25.1708816278 s
    edges : 254.248636227 s
    
  • 原创

    constrct vertexs : 19.5094766904 s
    construct edges : 147.627924276 s
    

..似乎 sql 批处理需要更多时间。

所以我想知道有没有办法。

谢谢。

【问题讨论】:

    标签: orientdb graph-databases pyorient


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多