Настройка производительности для загрузки гигабайт данных в OrientDB

В настоящее время я использовал инструмент ETL, чтобы вставить кучу данных CSV в OrientDB. Конфигурация системы, которую я использовал для ознакомительных целей, имеет большой размер EC2 M3 ( 7,5 ГБ памяти, 2 виртуальных ЦП, 32 ГБ локального хранилища на основе SSD, 64-разрядная платформа).

Данные (замаскированные), которые я пытаюсь загрузить, имеют следующий формат:

"101.186.130.130","527225725","233 djfnsdkj","0.119836317542" 
"125.143.534.148","112212983","1227 sdfsdfds","0.0465215171983" 
"103.149.957.752","112364761","1121 sdfsdfds","0.0938863016658" 
"103.190.245.128","785804692","6138 sdfsdfsd","0.117767539364"

Схема содержит 2 класса узлов и один класс ребер. Когда я пытался загрузить данные с помощью инструмента ETL в опции plocal, скорость составляла всего около 2300 строк в секунду. Конфигурация ETL упомянута ниже:

{
   "source": { "file": { "path": "/home/ubuntu/labvolume1/orientdb/bin/0001_part_00" } },
"extractor": { "csv": {"columnsOnFirstLine": false, "columns":["ip:string", "dpcb:string", "address:string", "prob:string"] } },
  "transformers": [ { "merge": { "joinFieldName":"ip", "lookup":"IpAddress.ip" } },
{ "field":
  { "fieldName": "addr_key",
     "expression": "dpcb.append('_').append(address)"
}
},{ "vertex": { "class": "IpAddress" } },
{ "edge": { "class": "Located",
            "joinFieldName": "addr_key",
            "lookup": "PhyLocation.loc",
            "direction": "out",
            "targetVertexFields": { "geo_address": "${input.address}", "dpcb_number": "${input.dpcb}"},
            "edgeFields": { "confidence": "${input.prob}" },
            "unresolvedLinkAction": "CREATE"
        }
    }
],
"loader": {
"orientdb": {
   "dbURL": "plocal:/home/ubuntu/labvolume1/orientdb/databases/Bulk_Transfer_Test1",
   "dbType": "graph",
   "dbUser": "admin",
   "dbPassword": "admin",
   "serverUser": "admin",
   "wal": false,
   "serverPassword":"admin",
   "classes": [
     {"name": "IpAddress", "extends": "V"},
     {"name": "PhyLocation", "extends": "V"},
     {"name": "Located", "extends": "E"}
   ], "indexes": [
     {"class":"IpAddress", "fields":["ip:string"], "type":"UNIQUE" },
     {"class":"PhyLocation", "fields":["loc:string"], "type":"UNIQUE" }
   ]
}
  }
}

Затем я разделил вершины на файлы и запустил задание ETL только для вершин, на этот раз скорость близка к 12500 строкам в секунду. Это было достаточно быстро, и этот вид работы для меня. (Когда я удалил индексы, скорость почти удвоилась) Конфигурация, которую я использовал, была:

{
  "source": { "file": { "path": "/home/ubuntu/labvolume1/orientdb/bin/only_ip_05.csv" } },
  "extractor": { "csv": {"columnsOnFirstLine": false, "columns":["ip:string"] } },
  "transformers": [
{ "vertex": { "class": "IpAddress" } }],
  "loader": {
"orientdb": {
   "dbURL": "plocal:/home/ubuntu/labvolume1/orientdb/databases/Bulk_Transfer_Test7",
   "dbType": "graph",
   "dbUser": "admin",
   "dbPassword": "admin",
   "serverUser": "admin",
   "wal": false,
   "serverPassword":"admin",
   "classes": [
     {"name": "IpAddress", "extends": "V"}
   ],
   "indexes": [
     {"class":"IpAddress", "fields":["ip:string"], "type":"UNIQUE" }
   ]
}
}
}

Однако, когда я попытался вставить края по одному, скорость стала очень низкой - 2200 строк в секунду. Это оказалось даже ниже, чем выполнение всей операции за один прогон. Файл конфигурации прилагается ниже:

{
  "source": { "file": { "path": "/home/ubuntu/labvolume1/orientdb/bin/edge5.csv" } },
  "extractor": { "csv": {"columnsOnFirstLine": false, "columns":["ip:string", "loc:string", "prob:string"] } },
  "transformers": [
{ "merge": { "joinFieldName":"ip", "lookup":"IpAddress.ip" } },
{ "vertex": { "class" : "IpAddress", "skipDuplicates" : true }},
{ "edge": { "class": "Located",
            "joinFieldName": "loc",
            "lookup": "PhyLocation.loc",
            "direction": "out",
            "edgeFields": { "confidence": "${input.prob}" },
            "unresolvedLinkAction": "NOTHING"
        }
    }
 ],
  "loader": {
"orientdb": {
   "dbURL": "plocal:/home/ubuntu/labvolume1/orientdb/databases/Bulk_Transfer_Test7",
   "dbType": "graph",
   "dbUser": "admin",
   "dbPassword": "admin",
   "serverUser": "admin",
   "wal": false,
   "tx":false,
   "batchCommit":10000,
   "serverPassword":"admin",
   "classes": [
     {"name": "IpAddress", "extends": "V"},
     {"name": "PhyLocation", "extends": "V"},
     {"name": "Located", "extends": "E"}
   ]
}
  }
}

Пожалуйста, дайте мне знать, если я делаю что-то не так. Также, пожалуйста, предложите лучшие способы улучшения производительности.

0 ответов

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