我想将一些具有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的运行速度要快得多。
我想知道是否有任何技巧可以使速度更快? 谢谢!
答案 0 :(得分:0)
弄清楚了。对代码进行了概要分析,并发现了findNode操作中的瓶颈。这使我想到也许与索引有关。
您必须使用Neo4j Embedded在属性上手动创建索引以加快处理速度,
var transaction = graphDB.beginTx()
try {
graphDB.schema()
.indexFor(nodeLabel).on("node_id")
.create()
transaction.success()
} finally {
transaction.close()
}