Проблемы с производительностью встроенного Neo4j - PullRequest
0 голосов
/ 11 октября 2018

У меня есть несколько старых графических данных с 1 миллионом узлов и 3 миллионами ребер, которые я хотел бы преобразовать в Neo4j.

Я использую встроенный Neo4j, и моя программа примерно такая:

for (all node in old graph data):
    node1 = neo4jdb.findNode(node1_id)
    node2 = neo4jdb.findNote(node2_id)
    if (node1 or node2 doesnt exist):
        create new nodes
    if (! relationExistBetween(node1, node2)):
        create new relation between node1 and node2

Однако процесс создания очень медленный.С точно такой же логикой программа работает намного быстрее с TinkerGraph.

Мне интересно, есть ли какие-нибудь приемы, чтобы сделать это быстрее?Спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Разобрался.Профилировал код и обнаружил, что узкое место находится в операции findNode.Это заставляет меня задуматься, может быть, это связано с индексацией.

Вам нужно вручную создать индекс для свойства, чтобы ускорить процесс, с Neo4j Embedded это что-то вроде:

var transaction = graphDB.beginTx()
try {
  graphDB.schema()
    .indexFor(nodeLabel).on("node_id")
    .create()
  transaction.success()
} finally {
  transaction.close()
}
...