我需要创建50,000个节点(:Person
)与50个节点(:office
)建立某种关系,保证:office
个元素没有重复元素,但是{{1有}。
我的代码如下所示:
:Person
它确实有效,但需要花费很多时间(约2小时)。我想知道一种有效的方法来进行此查询
答案 0 :(得分:3)
请使拼写/大小写保持一致。 尝试使用Neo4j 2.3.0
CREATE INDEX ON :Office(rc);
CREATE INDEX ON :Person(numDoc);
// make sure the indexes are online
:schema await
MATCH (x:Office{ rc:"345421"})
LOAD CSV FROM "file:///path/to/file" AS csvLine
MERGE (n:Person { numDoc: toInt(csvLine[1]) })
CREATE (n) -[:Afil]-> (x);
如果你只创建5万人和50k关系,你就不需要定期提交。然后,您可以预先与办公室匹配,而不是每一行。
如果查询使用您创建的索引,则可以通过在EXPLAIN前面添加查询来检查查询。
答案 1 :(得分:1)
您是否为MATCH / MERGE条款制定了索引?
CREATE INDEX ON :Office(rc)
CREATE INDEX ON :Person(numDoc)
另外,在我看来TX的尺寸可能太小了。 你试过把它增加到10000吗?
USING PERIODIC COMMIT 10000
您可能想要查看的另一件事是您的内存设置。你有足够的页面缓存和堆来让Neo4j高效运行吗?