如何解决Neo4J Cypher查询等同于选择进行更新
我有两个正在运行的应用程序实例。
每个人都有一个在计划的作业上运行的密码查询,以获取DB的数据并将其发送给服务。问题在于,每个实例都会抓取数据并将其发送出去,因此服务会收到重复的数据。
到目前为止,我所做的是将一个属性设置为当从数据库中匹配/查询数据时将其设置为true的标志。
所以我的查询是这样的:
比赛(n) 其中sendData = false 设置sendData = true 返回n。
我希望数据将被一个实例通过MATCH查询中的SET锁定,而另一个实例将无法捕获或修改它,但是确实如此,因此仍然将重复的数据发送到服务
例如,在oracle中,我将执行“选择更新”,然后一个实例将在选择过程中抓住锁,而在执行更新时,一个实例将执行锁定,而另一个实例将引发异常。
我只是对DB进行图表绘制的新手,所以如果术语不完全正确,我深表歉意。 谢谢
解决方法
您可以使用APOC atomic property update过程之一从原子上更新sentData
属性。
例如,即使存在竞争条件(两个事务都看到错误的sentData
),此查询也应确保只有一个事务将返回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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。