Neo4j和Php在交易中处理计数器

时间:2013-08-26 17:50:27

标签: neo4j counter neo4jphp

好的情况是这样的:

我创建了一个名为counter node的节点。它的初始值为0,并在用户在我的网站上创建帐户时递增。

因此有三种操作可以实现:

阅读counter node
在php中做一些逻辑。这里像+1计数器节点的前一个值一样 写入计数器节点的新值

现在问题是,如果两个或更多用户完全相同并且创建了

这样的条件

在第一个用户向计数器节点写入新值之前,第二个用户正在读取它。因此,这将使我的“计数器节点”的值处于不稳定状态。

希望你得到我的意思..

任何解决方案??

我正在使用neo4j 1.9.5和php

Php Jadell:

https://github.com/jadell/Neo4jPHP

我听说过批处理,但不确定它是否有效。如果有任何解决方案,请你给我一个简短的例子。

感谢Amit Aggarwal

2 个答案:

答案 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(*)

这也可以帮助您处理已删除的节点。