1
我最近發現執行併發MERGE
語句時存在競爭條件。具體而言,可以在步驟MATCH
之後但在給定MERGE
的步驟CREATE
之前創建節點的情況下創建重複節點。創建獨特路徑時是否存在競爭條件?
這可以在一些情況下在合併節點上使用唯一約束來解決;但是,在以下情況下,這種情況不足:
- 沒有單一的唯一屬性強制執行(例如,屬性對必須是唯一的,但個別屬性不需要)。
- 嘗試合併關係和路徑。
是否使用CREATE UNIQUE
解決這個問題(或者做同樣的陷阱存在)?如果是這樣,它是唯一的選擇嗎?感覺好像MERGE
的有用性在其無法保證路徑或節點被合併的唯一性時會相當嚴重地減少...
根據[本Grokbase問題]的答案(http://grokbase.com/t/gg/neo4j/137q6a6rg5/are-merge-operations-in-cypher-atomic),「MERGE」應該是作爲neo4j 2.0的最終版本的原子。如果您檢測到非原子行爲,則應該[創建neo4j問題](http://grokbase.com/t/gg/neo4j/137q6a6rg5/are-merge-operations-in-cypher-atomic)。 – cybersam
[這是正確的鏈接](https://github.com/neo4j/neo4j/issues)用於創建問題。我只是檢查了一下,並且[這個存在的問題](https://github.com/neo4j/neo4j/issues/5091)可能會出現同樣的問題。 – cybersam
對於複合屬性,您可以對數組prop使用唯一約束。 –