我開始使用Neo4j,並且在更新我正在閱讀的節點上的屬性時發現了一個非常糟糕的行爲。 Clojure的代碼,我寫了使用新保守派庫Neo4j的溝通:Cypher QL不會執行原子查詢
(ns ams.utils.t.test-cypher-error
(:require [clojurewerkz.neocons.rest :as rest]
[clojurewerkz.neocons.rest.nodes :as nodes]
[clojurewerkz.neocons.rest.cypher :as cypher]))
(rest/connect! "http://192.168.0.101:7474/db/data")
(def counter-id (:id (nodes/create {:counter 0})))
(defn update-counter [] (cypher/query "START c = node({id}) SET c.counter = c.counter + 1 RETURN c.counter as counter" {"id" counter-id}))
(doall (apply pcalls (repeat 10 update-counter)))
(println "Counter:" ((comp :counter :data) (nodes/get counter-id)))
(nodes/destroy counter-id)
猜測結果:
Counter: 4
有時候是5,有時是4,但你在這裏得到了問題:START
之間和SET
子句計數器的值被更改,但密碼不能捕捉它!
兩個問題在這裏:
- 我是不是做錯了什麼?
- Neo4j中有沒有可行的獨特的計數器休息生成算法?
Neo4j版本是1.9RC1,在此先感謝!
我不懂clojure,所以忍受着我。這些多次調用'update-counter'並行發生?或者更重要的是,這些密碼查詢是否會在(大約)同時發送到服務器,而不同步等待以前的呼叫完成? – ean5533 2013-04-24 16:11:31