首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Node-Neo4j没有正确设置数据?

为什么Node-Neo4j没有正确设置数据?
EN

Stack Overflow用户
提问于 2015-08-07 19:33:53
回答 1查看 57关注 0票数 2

想象一下这样的查询:

代码语言:javascript
复制
match (i:QuestionOrder) 
set i.count=i.count+1 
merge (q:Question {text: '+text here+', index: i.count}) 
return q

如果集合出现在相同的事务中,Neo4j保证写锁,这是由node-ne4j中的相同查询所暗示的。但是,我得到了以下输出:

代码语言:javascript
复制
[
  {
    "columns":["q"],
    "data":[{"text":"Have Kids...","index":1,"_id":542}]
  },
  {
    "columns":["q"],
    "data":[{"text":"You are...","index":1,"_id":545}]
  }
]

据我所知,锁应该防止index是相同的。我是不是漏掉了什么?我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2015-08-09 01:54:28

更改此查询以添加额外的测试可能会对并发工作有所帮助。如果您有两个并发事务,则锁在set操作时被抢占。因此,两者都已经读取了i.count,并且正在等待相同的值。

所以你要么早点拿到锁:

代码语言:javascript
复制
match (i:QuestionOrder) 
set i.lock = NOT i.lock
set i.count=i.count+1 
merge (q:Question {text: '+text here+', index: i.count}) 
return q

或者添加一个额外的检查来避免合并发生(然后你必须重试)

代码语言:javascript
复制
match (i:QuestionOrder) 
WITH i, i.count + 1 as new_count
set i.count = new_count
WITH i, new_count
WHERE i.count = new_count
merge (q:Question {text: '+text here+', index: i.count}) 
return q

或者在同一个tx中发送两个不同的语句,其中第一个语句进行锁定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31876741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档