1

私の目標は、約 50M の頂点を持つグラフに 25M のエッジをインポートすることです。目標時間:

インポートの現在の速度は ~150 エッジ/秒です。リモート接続の速度は約 100 エッジ/秒でした。

  • 抽出された 20,694,336 行 (171 行/秒) - 20,694,336 行 -> ロードされた 20,691,830 頂点 (171 頂点/秒) 合計時間: 35989762ms [警告 0、エラー 4]
  • 抽出された 20,694,558 行 (156 行/秒) - 20,694,558 行 -> ロードされた 20,692,053 頂点 (156 頂点/秒) 合計時間: 35991185ms [警告 0、エラー 4]
  • 抽出された 20,694,745 行 (147 行/秒) - 20,694,746 行 -> ロードされた 20,692,240 頂点 (147 頂点/秒) 合計時間: 35992453ms [警告 0、エラー 4]
  • 抽出された 20,694,973 行 (163 行/秒) - 20,694,973 行 -> ロードされた 20,692,467 頂点 (162 頂点/秒) 合計時間: 35993851ms [警告 0、エラー 4]
  • 抽出された 20,695,179 行 (145 行/秒) - 20,695,179 行 -> ロードされた 20,692,673 頂点 (145 頂点/秒) 合計時間: 35995262ms [警告 0、エラー 4]

etl config で並列を有効にしようとしましたが、Orient 2.2.12 で完全に壊れているように見え (2.1 のマルチスレッド変更との矛盾?)、上記のログに 4 つのエラーしか表示されません。ダム並列モード (2 つ以上の ETL プロセスを実行) も、plocal 接続では不可能です。

私の設定:

{
"config": {
    "log": "info",
    "parallel": true
},
"source": {
    "input": {}
},
"extractor": {
    "row": {
        "multiLine": false
    }
},
"transformers": [
    {
          "code": {
            "language": "Javascript",
              "code": "(new com.orientechnologies.orient.core.record.impl.ODocument()).fromJSON(input);"
        }
    },
    {
        "merge": {
            "joinFieldName": "_ref",
            "lookup": "Company._ref"
        }
    },
    {
        "vertex": {
            "class": "Company",
            "skipDuplicates": true
        }
    },
    {
        "edge": {
            "joinFieldName": "with_id",
            "lookup": "Person._ref",
            "direction": "in",
            "class": "Stakeholder",
            "edgeFields": {
                "_ref": "${input._ref}",
                "value_of_share": "${input.value_of_share}"
            },
            "skipDuplicates": true,
            "unresolvedLinkAction": "ERROR"
        }
    },
    {
        "field": {
            "fieldNames": [
                "with_id",
                "with_to",
                "_type",
                "value_of_share"
            ],
            "operation": "remove"
        }
    }
],
"loader": {
    "orientdb": {
        "dbURL": "plocal:/mnt/disks/orientdb/orientdb-2.2.12/databases/df",
        "dbUser": "admin",
        "dbPassword": "admin",
        "dbAutoDropIfExists": false,
        "dbAutoCreate": false,
        "standardElementConstraints": false,
        "tx": false,
        "wal": false,
        "batchCommit": 1000,
        "dbType": "graph",
        "classes": [
            {
                "name": "Company",
                "extends": "V"
            },
            {
                "name": "Person",
                "extends": "V"
            },
            {
                "name": "Stakeholder",
                "extends": "E"
            }
            ]
        }
    }
}

データサンプル:

{"_ref":"1072308006473","with_to":"person","with_id":"010703814320","_type":"is.stakeholder","value_of_share":10000.0} {"_ref":"1075837000095", "with_to":"person","with_id":"583600656732","_type":"is.stakeholder","value_of_share":15925.0} {"_ref":"1075837000095","with_to":"person"," with_id":"583600851010","_type":"is.stakeholder","value_of_share":33150.0}

サーバーの仕様は、Google Cloud 上のインスタンス、PD-SSD、6CPU、18GB RAM です。

ところで、同じサーバー上で、リモート接続を使用して頂点をインポートする際に約 3k/秒を得ることができました (それでも遅すぎますが、現在のデータセットでは許容範囲内です)。

そして質問: 1 秒あたり 10,000 回の挿入、または少なくとも 5,000 回のインポート速度を上げるための信頼できる方法はありますか? インデックスをオフにしたくありません。数十億ではなく数百万のレコードです。

アップデート

数時間後、パフォーマンスが低下し続けます。

  • 抽出された 23,146,912 行 (56 行/秒) - 23,146,912 行 -> ロードされた 23,144,406 頂点 (56 頂点/秒) 合計時間: 60886967ms [警告 0、エラー 4]
  • 抽出された 23,146,981 行 (69 行/秒) - 23,146,981 行 -> ロードされた 23,144,475 頂点 (69 頂点/秒) 合計時間: 60887967ms [警告 0、エラー 4]
  • 抽出された 23,147,075 行 (39 行/秒) - 23,147,075 行 -> ロードされた 23,144,570 頂点 (39 頂点/秒) 合計時間: 60890356ms [警告 0、エラー 4]
4

0 に答える 0