Neo4J Cypher查询相当于选择更新
我有两个应用程序实例正在运行 每个数据库都有一个在计划作业上运行的密码查询,用于获取数据库的数据并将其发送给服务。问题是每个实例都会获取数据并发送出去,所以服务会接收重复的数据 到目前为止,我所做的是在数据库中匹配/查询数据时,将属性作为标志设置为true 因此,我的问题大致如下: 匹配(n) 其中sentData=false 设置sentData=true 返回 我希望数据会被一个实例用匹配查询中的集合锁定,而另一个实例将无法获取或修改它,但它可以,因此仍然会将重复数据发送到服务 例如,在oracle中,我会执行“选择更新”,然后一个实例会在选择过程中获取锁,而在执行更新时,一个实例会执行此操作,另一个实例会抛出异常 我只是graph DB的新手,如果术语不完全正确,我深表歉意。Neo4J Cypher查询相当于选择更新,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我有两个应用程序实例正在运行 每个数据库都有一个在计划作业上运行的密码查询,用于获取数据库的数据并将其发送给服务。问题是每个实例都会获取数据并发送出去,所以服务会接收重复的数据 到目前为止,我所做的是在数据库中匹配/查询数据时,将属性作为标志设置为true 因此,我的问题大致如下: 匹配(n) 其中sentData=false 设置sentData=true 返回 我希望数据会被一个实例用匹配查询中的集合锁定,而另一个实例将无法获取或修改它,但它可以,因此仍然会将重复数据发送到服务 例如,在or
谢谢您可以使用APOC过程之一以原子方式更新
sentData
属性
例如,即使存在争用条件(两个事务都会看到falsesentData
),此查询也应确保只有一个事务将返回n
:
匹配(n:Foo)
哪里不是n.sentData
调用apoc.atomic.update(n,'sentData','true',5)生成oldValue,newValue
其中apoc.convert.toBoolean(新值)而非apoc.convert.toBoolean(旧值)
返回n
< /代码>您可能需要考虑写锁->