1

那么场景是这样的:

我创建了一个名为counter node. 它的初始值为 0 并随着用户在我的网站上创建其帐户而递增。

所以发生了三个操作来操作这个:

读取counter node
在 php 中做一些逻辑。这里就像对计数器节点的先前值 +1
写计数器节点的新值

现在的问题是,如果两个或更多用户在同一时间到达并创建这样的条件

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

希望你明白我的意思..

任何解决方案??

我正在使用 neo4j 1.9.5 和 php

php 贾德尔:

https://github.com/jadell/Neo4jPHP ‎</p>

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

谢谢阿米特阿加瓦尔

4

2 回答 2

1

纯 REST API 无法做到这一点。我会用 Cypher 试试,可能是这样的:

START n=node(123)
SET n.noOfUsers = n.noOfUsers + 1
RETURN n.noOfUsers

这应该适用于最新版本的 Cypher http://console.neo4j.org/?id=tnkldf

于 2013-08-26T18:03:07.500 回答
0

Neo4j 2.0 具有强制事务。如果您在交易中增加您的计数器属性noOfUsers,我认为这将帮助您解决并发问题。

只是一个想法,但首先是一个问题:计数器的目的是什么?是用于分配用户 ID,还是仅用于提供信息?如果是后者,你必须有一个准确的计数吗?例如,如果您想要 twitter 或 facebook 用户的总数,如果计数减少了几个是否重要?如果计数不需要精确(或在特定时间点精确),您可以运行定期进程来返回用户节点的计数,例如:

MATCH n:User
return count(*)

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

于 2013-08-26T19:15:43.127 回答