因此,我有一种类型的节点超过130M,另一种类型的节点超过500K,我正尝试在它们之间建立关系,如下所示:
MATCH (p:person)
MATCH (f:food) WHERE f.name=p.likes
CREATE (p)-[l:likes]->(f)
问题是创建了1.3亿个关系,当我使用
PERIODIC COMMIT
时,我想以与LOAD CSV
类似的方式进行我的查询类型有这种功能吗?
最佳答案
就在这里。您需要安装APOC Procedures library(download here)。您将在Job Management部分中使用apoc.periodic.commit()函数。从文档中:
CALL apoc.periodic.commit(statement,params)-重复批量更新
语句,直到返回0,此过程才被阻塞
您将与LIMIT子句结合使用,并将极限值作为参数传递。
但是,为了获得最佳结果,您将需要确保联接数据(我认为f.name)具有索引或唯一的约束条件,可以大大减少时间。
这是您可能会使用的方式(假设您的示例中某人只喜欢一种食物,而我们应该仅将其应用于:尚未设置该关系的人):
CALL apoc.periodic.commit("
MATCH (p:person)
WHERE p.likes IS NOT NULL
AND NOT (p)-[:likes]->(:food)
WITH p LIMIT {limit}
MATCH (f:food) WHERE p.likes = f.name
CREATE (p)-[:likes]->(f)
RETURN count(*)
", {limit: 10000})
关于neo4j - 如何批处理Neo4j Cypher查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38733170/