1

我在一个节点中有一个 points 属性,我想在每次玩家获得积分时增加它。由于可以同时进行多个更新,因此我希望进行增量更新查询以避免并发问题。例如,如果两个请求同时获取节点并且每个更新点+5,它将增加+5,而不是正确的+10。

我看到 github 中有一个与此相关的已关闭问题 #768,https://github.com/neo4j/community/issues/768,但除了实现乐观并发或单个之外,我没有看到其他答案在应用程序端排队。

如果乐观并发是答案,也许我可以利用数据库级别的某些东西?

4

2 回答 2

0

我找不到我提出的要求这个问题的 github 问题(github repo 已经移动。)但是,答案是这不会被添加到 REST API 中。

于 2012-11-22T22:00:56.557 回答
0

您可以做的是在读取之前锁定节点,如下所示:

交易 tx = db.beginTx();
尝试
{
    tx.acquireWriteLock(myNode);
    int count = (Integer) myNode.getProperty("count", 0);
    myNode.setProperty("count", count + 5);
    tx.成功();
}
最后
{
    tx.finish();
}
于 2012-11-22T15:01:03.820 回答