如何优化pyorient将具有十万个顶点和五十万个边的大图导入Orientdb的过程?
How to optimize the process of importing a large graph with one hundred thousand vertexes and half a million edges into Orientdb by pyorient?
Orientdb : 2.1.3
Pyorient : 1.4.7
我需要通过 pyorient 将具有十万个顶点和五十万个边的图导入 Orientdb。
db.command一一
首先,我只是使用db.command("create vertex V set a=1") 将所有的顶点和边一一插入。
但这需要我大约两个小时。
所以我想找到一种方法来优化这个过程。
大量插入 ?
然后我发现Orientdb支持Massive Insert,可惜pyorient的作者在一个issue中massive insertion: no transacations? 提到
in the bynary protocol ( and in pyorient of course ) there is not the massive insert intent.
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 批处理花费了更多时间。
所以我想知道有没有办法做到。
谢谢。
当您逐一输入时,您已经尝试查看使用事务图是否获得更好的性能并提交每 X 个项目?通常这是插入大量数据的正确方法。不幸的是,正如您还指出的那样,使用 pyorient 时,您不能使用 Massive Insert,而且多进程方法也无法利用(套接字连接只有一个,所有并发对象都将被序列化(对于管道),因为连接池未在驱动程序中实现。因此您可以失去多处理的性能优势)。
Orientdb : 2.1.3
Pyorient : 1.4.7
我需要通过 pyorient 将具有十万个顶点和五十万个边的图导入 Orientdb。
db.command一一
首先,我只是使用db.command("create vertex V set a=1") 将所有的顶点和边一一插入。
但这需要我大约两个小时。
所以我想找到一种方法来优化这个过程。
大量插入 ?
然后我发现Orientdb支持Massive Insert,可惜pyorient的作者在一个issue中massive insertion: no transacations? 提到
in the bynary protocol ( and in pyorient of course ) there is not the massive insert intent.
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 批处理花费了更多时间。
所以我想知道有没有办法做到。
谢谢。
当您逐一输入时,您已经尝试查看使用事务图是否获得更好的性能并提交每 X 个项目?通常这是插入大量数据的正确方法。不幸的是,正如您还指出的那样,使用 pyorient 时,您不能使用 Massive Insert,而且多进程方法也无法利用(套接字连接只有一个,所有并发对象都将被序列化(对于管道),因为连接池未在驱动程序中实现。因此您可以失去多处理的性能优势)。