首页 > 解决方案 > 在(尚未)现有节点之间创建关系

问题描述

我正在尝试通过neo4j-stream插件将数据从 Kafka 摄取到 Neo4j。目前我们正在试验该CUD策略。

我想知道我们应该如何处理相互关联的数据。假设我们将 100 个人从 Kafka 流式传输到 Neo4j。当person(id:1)与 有关系is_friends_with时,在创建节点 for 之前,person(id:50)我们无法创建这种关系person(id:50)

但是,我们无法控制事件来自 Kafka 的顺序。

因此,当人员数据到达时,我们将创建以下 CUD 数据:

不出所料,当我们按此顺序摄取事件时,这种关系就消失了。

我们该如何处理呢?

标签: neo4j

解决方案


我认为这是使用 MERGE 的典型案例。

每次你有一个关系(有开始和结束节点)你做

MERGE (n:Person {id:foo})
MERGE (m:Person {id:bar})
MERGE (n)-[:is_friends_with]-(m)

关系的合并没有方向,以避免在 n 和 m 以不同顺序到达的情况下出现双向模式。


推荐阅读