如何在不使用MERGE Neo4J 3.5的情况下防止重复关系?
我想对从卡夫卡获得的每批批次运行以下查询。
MATCH (a:Dense1) where a.id <> "1"
WITH a
MATCH (b:Dense1) where b.id = "1"
WITH a,b
WHERE a.key = b.key
CREATE (a)-[:PARENT_OF]->(b)
如果我将CREATE
更改为MERGE
,则由于双重锁定,性能会显着降低,如here所述,如果我将CREATE更改为CREATE UNIQUE
,则性能会优于{{1} },但仍不如单独使用MERGE
好。我的目标是,即使查询多次运行,甚至两个查询之间都存在关系,甚至什么也不做,甚至更好地向客户端驱动程序发送通知或异常,以便应用程序可以做一些有用的事情。我可以为每个关系创建一个CREATE
属性并对其进行约束吗?那行得通吗?
答案 0 :(得分:0)
您可以在最新的WHERE
子句中添加检查是否存在这种关系:
MATCH (a:Dense1) where a.id <> "1"
WITH a
MATCH (b:Dense1) where b.id = "1"
WITH a,b
WHERE a.key = b.key AND NOT (a)-[:PARENT_OF]->(b)
CREATE (a)-[:PARENT_OF]->(b)
但这几乎是MERGE
命令正在执行的操作...
您在属性id
和key
上有索引/约束吗?