0
Orientdb : 2.1.3
Pyorient : 1.4.7

pyorient によって、10 万の頂点と 50 万のエッジを持つグラフを Orientdb にインポートする必要があります。

db.command を 1 つずつ

まず、db.command("create vertex V set a=1") を使用して、すべての頂点とエッジを 1 つずつ挿入します。

でも2時間くらいかかります。

ですから、このプロセスを最適化する方法を見つけたいと思っています。

大量挿入?

次に、 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

1 つずつエントリを作成すると、Transactional Graph を使用してパフォーマンスが向上し、X 個のアイテムごとにコミットするかどうかを確認しようとしましたか?? 通常、これは大量のデータを挿入する正しい方法です。残念ながらpyorientを使用すると、あなたも指摘したように、大規模な挿入は使用できず、マルチプロセスアプローチも悪用できません(ソケット接続は1つだけであり、すべての同時オブジェクトは(パイプラインのように)シリアル化されます)。接続プールはドライバーに実装されていないため、マルチプロセッシングのパフォーマンス上の利点が失われる可能性があります)。

于 2016-05-16T15:58:27.983 に答える