Ориентированная проблема производительности ETL с импортом ребер в plocal на SSD

Моя цель - импортировать 25 миллионов ребер в графе, который имеет около 50 миллионов вершин. Целевое время:

Текущая скорость импорта составляет ~150 ребер / сек. Скорость при удаленном соединении была около 100 ребер / сек.

  • извлечено 20 694 336 строк (171 строк / сек) - 20 694 336 строк -> загружено 20 691 830 вершин (171 вершин / сек) Общее время: 35989762мс [0 предупреждений, 4 ошибки]
  • извлечено 20 694 558 строк (156 строк / сек) - 20 694 558 строк -> загружено 20 692 053 вершин (156 вершин / сек) Общее время: 35991185 мс [0 предупреждений, 4 ошибки]
  • извлечено 20 694 745 строк (147 строк / сек) - 20 694 746 строк -> загружено 20 692 240 вершин (147 вершин / сек) Общее время: 35992453 мс [0 предупреждений, 4 ошибки]
  • извлечено 20 694 973 строки (163 строки / сек) - 20 694 973 строки -> загружено 20 692 467 вершин (162 вершины / сек) Общее время: 35993851мс [0 предупреждений, 4 ошибки]
  • извлечено 20 695 179 строк (145 строк / сек) - 20 695 179 строк -> загружено 20 692 673 вершин (145 вершин / сек) Общее время: 35995262 мс [0 предупреждений, 4 ошибки]

Я попытался включить параллель в конфигурации etl, но похоже, что он полностью сломан в Orient 2.2.12 (Несоответствие многопоточным изменениям в 2.1?) И дает мне только 4 ошибки в журнале выше. Тупой параллельный режим (запуск 2+ процессов ETL) также невозможен для локального соединения.

Мой конфиг:

{
"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", "тип _":"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","_ типа":"is.stakeholder","value_of_share":33150,0}

Спецификации сервера: экземпляр на Google Cloud, PD-SSD, 6CPU, 18 ГБ ОЗУ.

Кстати, на том же сервере мне удалось получить ~3k/sec при импорте вершин с помощью удаленного соединения (это все еще слишком медленно, но приемлемо для моего текущего набора данных).

И вопрос: есть ли надежный способ увеличить скорость импорта, скажем, 10 тыс. Вставок в секунду или хотя бы 5 тыс.? Я не хотел бы отключать индексы, это все еще миллионы записей, а не миллиарды.

ОБНОВИТЬ

Через несколько часов производительность продолжает ухудшаться.

  • извлечено 23 146 912 строк (56 строк / сек) - 23 146 912 строк -> загружено 23 144 406 вершин (56 вершин / сек) Общее время: 60886967мс [0 предупреждений, 4 ошибки]
  • извлечено 23 146 981 строк (69 строк / сек) - 23 146 981 строк -> загружено 23 144 475 вершин (69 вершин / сек) Общее время: 60887967мс [0 предупреждений, 4 ошибки]
  • извлечено 23 147 075 строк (39 строк / сек) - 23 147 075 строк -> загружено 23 144 570 вершин (39 вершин / сек) Общее время: 60890356 мс [0 предупреждений, 4 ошибки]

0 ответов

Другие вопросы по тегам