好的情况是这样的:
我创建了一个名为counter node
的节点。它的初始值为0,并在用户在我的网站上创建帐户时递增。
因此有三种操作可以实现:
阅读counter node
值
在php中做一些逻辑。这里像+1计数器节点的前一个值一样
写入计数器节点的新值
现在问题是,如果两个或更多用户完全相同并且创建了
这样的条件在第一个用户向计数器节点写入新值之前,第二个用户正在读取它。因此,这将使我的“计数器节点”的值处于不稳定状态。
希望你得到我的意思..
任何解决方案??
我正在使用neo4j 1.9.5和php
Php Jadell:
https://github.com/jadell/Neo4jPHP
我听说过批处理,但不确定它是否有效。如果有任何解决方案,请你给我一个简短的例子。
感谢Amit Aggarwal
答案 0 :(得分:1)
您无法使用纯REST API执行此操作。我会尝试使用Cypher,也许是这样的:
START n=node(123)
SET n.noOfUsers = n.noOfUsers + 1
RETURN n.noOfUsers
这应该适用于最新版本的Cypher http://console.neo4j.org/?id=tnkldf
答案 1 :(得分:0)
Neo4j 2.0有强制性交易。如果您在事务中增加了计数器属性noOfUsers
,我认为这可以帮助您解决并发问题。
只是一个想法,但首先是一个问题:柜台的目的是什么?是分配用户ID,还是严格信息?如果是后者,你必须有一个确切的计数?例如,如果您想要Twitter或Facebook用户的总数,那么如果计数被少数几个关闭会有关系吗?如果计数不需要精确(或在特定时间的确切时间),则可以运行定期过程以返回用户节点的计数,例如:
MATCH n:User
return count(*)
这也可以帮助您处理已删除的节点。