Neo4j嵌入式的性能问题

时间:2018-10-11 19:46:12

标签: neo4j tinkerpop tinkergraph

我想将一些具有100万个节点和300万条边的旧图形数据转换为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 :(得分:0)

弄清楚了。对代码进行了概要分析,并发现了findNode操作中的瓶颈。这使我想到也许与索引有关。

您必须使用Neo4j Embedded在属性上手动创建索引以加快处理速度,

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