2013-08-26 27 views
1

好的情況是這樣的:Neo4j和Php處理計數器在交易內

我創建了一個名爲counter node的節點。它的初始值是0,並隨着用戶在我的網站上創建帳戶而增加。

因此,有三種操作發生在操作此:

counter node價值
做了一些用PHP邏輯。這裏就像+1計數器節點的前值
寫反節點的新值現在

的問題是,如果兩個或更多的用戶來了完全相同的時間和創造這樣的條件,即

第一用戶寫之前計數器節點的新值,它正在被第二個用戶讀取。因此,這會使我的「櫃檯節點」的價值處於不穩定狀態。

希望你得到了我的意思..

任何解決方案?

我使用的Neo4j 1.9.5和PHP

腓Jadell:

https://github.com/jadell/Neo4jPHP

聽說批量處理的,但不知道它是否會奏效。如果有解決方案,請給我一個簡短的例子。

感謝阿米特AGGARWAL

回答

1

你不能這樣做,與純粹的REST API。我會用暗號試試吧,也許是這樣的:

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

這一點應在Cypher支架 http://console.neo4j.org/?id=tnkldf

+1

你好喬希,那麼我也試過這個,我不知道爲什麼有時它更新正確的計數,否則隨機。這裏是代碼https://gist.github.com/0xvoila/6349357 – voila

0

的Neo4j 2.0有強制交易的最新版本。如果您在交易中增加了您的計數器屬性noOfUsers,我認爲這會幫助您解決併發問題。

只是一個想法,但首先一個問題:櫃檯的目的是什麼?它是分配用戶ID還是嚴格信息?如果是後者,你是否有確切的數量?例如,如果您想要Twitter或Facebook用戶的總數,那麼計數是否被少數幾個關鍵,會有關係嗎?如果計數並不需要準確(或者確切在特定時間實例),你可以運行一個週期性的過程,返回用戶節點的數量,如:

MATCH n:User 
return count(*) 

這也將幫你處理與刪除的節點。

+0

你好大衛,其目的是生成userIds ..所以任何不一致可能導致我在大問題.. :(.. – voila