事务中的Neo4j和Php句柄计数器
场景是这样的: 我创建了一个名为事务中的Neo4j和Php句柄计数器,neo4j,counter,neo4jphp,Neo4j,Counter,Neo4jphp,场景是这样的: 我创建了一个名为计数器节点的单节点。它的初始值为0,并随着用户在我的网站上创建帐户而递增 因此,有三种操作恰好可以操作此操作: 读取计数器节点值 在php中执行一些逻辑。此处将计数器节点的上一个值设置为+1 写入计数器节点的新值 现在的问题是,若两个或多个用户在同一时间到达,并且创造了这样一个条件 在第一个用户向计数器节点写入新值之前,第二个用户正在读取该值。因此,这将使我的“计数器节点”的值处于不稳定状态 希望你明白我的意思 有什么解决办法吗 我正在使用neo4j 1.9.5和
计数器节点的单节点。它的初始值为0,并随着用户在我的网站上创建帐户而递增
因此,有三种操作恰好可以操作此操作:
读取计数器节点
值
在php中执行一些逻辑。此处将计数器节点的上一个值设置为+1
写入计数器节点的新值
现在的问题是,若两个或多个用户在同一时间到达,并且创造了这样一个条件
在第一个用户向计数器节点写入新值之前,第二个用户正在读取该值。因此,这将使我的“计数器节点”的值处于不稳定状态
希望你明白我的意思
有什么解决办法吗
我正在使用neo4j 1.9.5和php
Php Jadell:
我听说过批量处理,但不确定它是否会起作用。如果有任何解决方案,请给我一个简短的例子
感谢Amit Aggarwal您不能用纯REST API实现这一点。我会用Cypher试试,也许是这样:
START n=node(123)
SET n.noOfUsers = n.noOfUsers + 1
RETURN n.noOfUsers
这应该在最新版本的Cypher中起作用
使用纯RESTAPI无法做到这一点。我会用Cypher试试,也许是这样:
START n=node(123)
SET n.noOfUsers = n.noOfUsers + 1
RETURN n.noOfUsers
这应该在最新版本的Cypher中起作用
Neo4j 2.0具有强制事务。如果在事务中增加计数器属性noOfUsers
,我认为这将有助于解决并发性问题
只是一个想法,但首先是一个问题:计数器的用途是什么?它是用来分配用户ID的,还是严格意义上的信息?如果是后者,你必须有一个准确的数字吗?例如,如果你想知道twitter或facebook用户的总数,那么如果这个数字减少了几位,那又有什么关系呢?如果计数不需要精确(或某个特定实例的时间精确),则可以运行定期进程来返回用户节点的计数,如:
匹配n:用户
返回计数(*)
这也将帮助您处理已删除的节点。Neo4j 2.0具有强制事务。如果在事务中增加计数器属性noOfUsers
,我认为这将有助于解决并发性问题
只是一个想法,但首先是一个问题:计数器的用途是什么?它是用来分配用户ID的,还是严格意义上的信息?如果是后者,你必须有一个准确的数字吗?例如,如果你想知道twitter或facebook用户的总数,那么如果这个数字减少了几位,那又有什么关系呢?如果计数不需要精确(或某个特定实例的时间精确),则可以运行定期进程来返回用户节点的计数,如:
匹配n:用户
返回计数(*)
这也将有助于处理已删除的节点。Hello David,其目的是生成用户ID。。所以任何不一致都可能让我陷入大问题:(…你好,David,它的目的是生成用户ID..所以任何不一致都可能让我陷入大问题..):(…你好,Josh,我也试过了,我不知道为什么有时候它会更新正确的计数或者随机。这是代码你好,Josh,我也试过了,我不知道为什么有时候它会更新正确的计数或者随机。这是代码