所以我有一个类型超过130M的节点和另一种类型的500K节点,我正在尝试按如下方式创建它们之间的关系:
MATCH (p:person)
MATCH (f:food) WHERE f.name=p.likes
CREATE (p)-[l:likes]->(f)
问题在于创建了130M关系,我希望在使用PERIODIC COMMIT
LOAD CSV
类似的方式执行此操作
我的查询类型是否有这样的功能?
答案 0 :(得分:1)
是的,有。您需要安装http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#waitkey(APOC Procedures library)。您将在download here部分中使用apoc.periodic.commit()函数。来自文档:
CALL apoc.periodic.commit(statement,params) - 重复批量更新 语句直到它返回0,此程序阻塞
您将结合使用LIMIT子句,将限制值作为参数传递。
但是,为了获得最佳效果,您需要确保您的连接数据(我认为f.name)具有索引或唯一约束,以大幅减少时间。
以下是你如何使用它(假设你的例子中一个人只喜欢一种食物,我们应该只将它应用于:那些已经没有关系的人):< / p>
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})