我有一个函数,每次访问链接时都会创建一个VISIT节点。我还将一些统计信息附加到此访问节点,例如DATE,BROWSER,OS等。
但是有时“日期”节点(或者可能还有其他节点)会重复,这意味着一次VISIT会得到2个日期节点。
每个VISIT只能附加到一个stats节点。 (例如,一个浏览器,一个日期)
这是我的代码:
MATCH (l:URL { id: $id })
CREATE (v:VISIT)
MERGE (b:BROWSER { browser: $browser })
MERGE (c:COUNTRY { country: $country })
MERGE (o:OS { os: $os })
MERGE (r:REFERRER { referrer: $referrer })
MERGE (d:DATE { date: $date })
MERGE (v)-[:VISITED]->(l)
MERGE (v)-[:BROWSED_BY]->(b)
MERGE (v)-[:LOCATED_IN]->(c)
MERGE (v)-[:OS]->(o)
MERGE (v)-[:REFERRED_BY]->(r)
MERGE (v)-[:VISITED_IN]->(d)
RETURN l
这是图形图像示例,VISIT(红色节点)应仅具有一个VISITED_IN关系,并且仅与该类型的一个节点有关。
答案 0 :(得分:1)
合并不是ThreadSafe。它基本上连续执行三件事,但是会遇到并发问题: 1.检查模式是否存在 2.如果没有创建它 3.退回
如果两个合并请求同时具有相同的模式,则不能保证将仅创建一个。
您应该将合并请求与唯一约束结合在一起,以确保唯一性
CREATE CONSTRAINT ON (d:Date) ASSERT d.date IS UNIQUE