Acid
Google Cloud Spanner 唯一索引一致性
據我了解,Google Cloud Spanner 是全球一致的,而且速度也很快。
假設我有一個帶有唯一
username
欄位的表。
- 美國的使用者 A 將使用者插入
johndoe
到美國 Spanner 節點- 中國使用者 B 將使用者插入
johndoe
中國 Spanner 節點其中一個失敗了嗎?如果不是,查詢速度有多快?還是他們都成功了,但後來決定其中一個是重複的?還是使用 UNIQUE 欄位寫入到 1 個伺服器?
謝謝!
首先,目前沒有跨大陸執行 Cloud Spanner 的選項,儘管 Google 的內部 Spanner 可以。然而,答案仍然相同,只是寫入延遲等在區域(多區域)和全球(多大陸)配置中有所不同。
這裡的訣竅是 Spanner 不會插入“節點”,而是嘗試在大多數節點之間達成共識。由於我們總是執行奇數個節點,因此其中一個將首先達成共識並阻止另一個。該事務將被送出,然後另一個事務將失敗,因為該行已經存在。
Eric Brewer 在最近的這篇文章中很好地概述了在這種情況下如何實現一致性:Spanner、TrueTime 和 CAP 定理