我在每次玩家收到積分時都希望增加一個節點中的點屬性。由於可以同時進行多個更新,因此我希望有一個增量更新查詢以避免併發問題。例如如果兩個請求同時獲取節點並將點更新爲+5,則它將增加+5而不是正確的+10。
我發現github上有一個關閉的問題#768,與此相關,https://github.com/neo4j/community/issues/768,但我沒有看到除了在應用程序端實現樂觀併發或單個隊列之外,還有一個答案。
如果樂觀併發是答案,那麼我可以利用數據庫級別的東西嗎?
我在每次玩家收到積分時都希望增加一個節點中的點屬性。由於可以同時進行多個更新,因此我希望有一個增量更新查詢以避免併發問題。例如如果兩個請求同時獲取節點並將點更新爲+5,則它將增加+5而不是正確的+10。
我發現github上有一個關閉的問題#768,與此相關,https://github.com/neo4j/community/issues/768,但我沒有看到除了在應用程序端實現樂觀併發或單個隊列之外,還有一個答案。
如果樂觀併發是答案,那麼我可以利用數據庫級別的東西嗎?
你可以做的是閱讀之前鎖定的節點,就像這樣:
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(); }
忘記提及我會使用REST api – MonkeyBonkey
通過REST做交易無法工作嗎? –
不,REST本質上是非事務性的。對於某些TX支持,請使用REST批處理API,它將爲每個批處理請求執行一個事務,http://docs.neo4j.org/chunked/snapshot/rest-api-batch-ops.html –
我無法找到我申請要求本(GitHub的回購移動),但GitHub的問題,那麼答案就是這不會被添加到REST API中。
新的github問題在neo4j/neo4j fyi中。顯然這個事務更新可能會在1.9版本中發揮作用,這並不是非常遙遠。另外,最新的Cypher中的int + int = int。 (之前它返回了一個double,這很煩人)因爲我沒有回答你的實際問題,所以把它扔到評論中。 –
只是想知道(因爲我有同樣的問題)...做到了這一點(原地更新屬性,沒有併發問題,通過密碼)使它成爲1.9M03? –