Neo4J Cypher 查询等同于 select 以进行更新

Neo4J Cypher query equivalent to select for update

我的应用程序有两个实例 运行。

每个人在计划的作业上都有一个密码查询 运行,以获取数据库的数据并将其发送到服务。问题是每个实例都抓取数据并将其发送出去,因此服务接收到重复数据。

到目前为止,我所做的是当数据来自数据库 matched/queried 时,将 属性 作为标志设置为真。

所以我的查询是这样的:

匹配 (n) 其中 sentData=false 设置发送数据=真 return n.

我希望数据会被 MATCH 查询中带有 SET 的一个实例锁定,而另一个实例将无法获取或修改它,但它确实如此,因此仍然将重复数据发送到服务。

例如,在 oracle 中,我会执行“select 更新”,然后一个实例会在 select 期间获取锁,当进行更新时,一个实例会执行它,然后另一个会抛出异常。

我只是图形数据库的新手,所以如果术语不完全正确,我深表歉意。 谢谢

您可以使用 APOC atomic property update 过程之一来更新 sentData 属性 原子地

例如,即使存在竞争条件(例如两个事务都看到错误 sentData),此查询也应确保只有一个事务会 return n

MATCH (n:Foo)
WHERE NOT n.sentData
CALL apoc.atomic.update(n, 'sentData', 'true', 5) YIELD oldValue, newValue
WHERE apoc.convert.toBoolean(newValue) AND NOT apoc.convert.toBoolean(oldValue)
RETURN n