2012-11-22 41 views
1

我在每次玩家收到積分時都希望增加一個節點中的點屬性。由於可以同時進行多個更新,因此我希望有一個增量更新查詢以避免併發問題。例如如果兩個請求同時獲取節點並將點更新爲+5,則它將增加+5而不是正確的+10。

我發現github上有一個關閉的問題#768,與此相關,https://github.com/neo4j/community/issues/768,但我沒有看到除了在應用程序端實現樂觀併發或單個隊列之外,還有一個答案。

如果樂觀併發是答案,那麼我可以利用數據庫級別的東西嗎?

+0

新的github問題在neo4j/neo4j fyi中。顯然這個事務更新可能會在1.9版本中發揮作用,這並不是非常遙遠。另外,最新的Cypher中的int + int = int。 (之前它返回了一個double,這很煩人)因爲我沒有回答你的實際問題,所以把它扔到評論中。 –

+0

只是想知道(因爲我有同樣的問題)...做到了這一點(原地更新屬性,沒有併發問題,通過密碼)使它成爲1.9M03? –

回答

0

你可以做的是閱讀之前鎖定的節點,就像這樣:

 
Transaction tx = db.beginTx(); 
try 
{ 
    tx.acquireWriteLock(myNode); 
    int count = (Integer) myNode.getProperty("count", 0); 
    myNode.setProperty("count", count + 5); 
    tx.success(); 
} 
finally 
{ 
    tx.finish(); 
} 
+0

忘記提及我會使用REST api – MonkeyBonkey

+0

通過REST做交易無法工作嗎? –

+0

不,REST本質上是非事務性的。對於某些TX支持,請使用REST批處理API,它將爲每個批處理請求執行一個事務,http://docs.neo4j.org/chunked/snapshot/rest-api-batch-ops.html –

0

我無法找到我申請要求本(GitHub的回購移動),但GitHub的問題,那麼答案就是這不會被添加到REST API中。

相關問題