更快的方式来创建现有节点之间的关系?

时间:2018-01-12 06:49:14

标签: neo4j f# graph-databases neo4jclient

我正在开发一个应用程序,其中我的neo4j数据库中只有“11263”个节点。 我正在使用以下cypher查询来形成节点之间的关系:

let CreateRelations(fromToList : FromToCount list)=
    client.Cypher
    .Unwind(fromToList, "fromToList")
    .Match("(source)", "(target)")
    .Where("source.Id= fromToList.SId and target.Id= fromToList.FId ")
    .Merge("(source)-[relation:Fights_With]->(target)")
    .OnCreate()
    .Set("relation.Count= fromToList.Count,relation.Date= fromToList.Date")
    .OnMatch()
    .Set("relation.Count= (relation.Count+ fromToList.Count )")
    .Set("relation.Date= fromToList.Date")
    .ExecuteWithoutResults()

在neo4j数据库中形成1000个关系需要大约47到50秒。 我是neo4j DB的新手,还有其他有效的方法吗?

1 个答案:

答案 0 :(得分:2)

让您失望的最重要的事情是您没有使用index来查找起始节点。您与source的匹配正在执行数据库中所有节点的扫描,以查找可能的匹配项,在您展开的列表中每行。然后它与target做同样的事情。

您需要在节点上添加标签,如果它们已经有标签,请使用查询中的标签。您在标签和id属性上需要索引或唯一约束,因此索引将用于查找。

调整查询的最佳方法是在浏览器中试用它们,并使用EXPLAIN确保您使用索引查找,如果它仍然很慢,请在查询中使用PROFILE(它将执行查询)以查看生成的行和db命中执行时的命中。