据我了解,Google Cloud Spanner 是全球一致的,而且速度很快。
假设我有一个包含唯一username
字段的表。
- 美国的用户 A 将用户插入
johndoe
到美国的 Spanner 节点 - 中国的用户 B 将用户插入
johndoe
到中国的 Spanner 节点
其中之一失败了吗?如果不是,查询的速度有多快?还是他们都成功了,但后来决定其中一个是重复的?还是带有 UNIQUE 字段的写入会转到 1 个服务器?
谢谢!
据我了解,Google Cloud Spanner 是全球一致的,而且速度很快。
假设我有一个包含唯一username
字段的表。
johndoe
到美国的 Spanner 节点johndoe
到中国的 Spanner 节点其中之一失败了吗?如果不是,查询的速度有多快?还是他们都成功了,但后来决定其中一个是重复的?还是带有 UNIQUE 字段的写入会转到 1 个服务器?
谢谢!
首先,目前没有跨大陆运行 Cloud Spanner 的选项,尽管 Google 的内部 Spanner 可以。然而,答案仍然相同,只是写入延迟等在区域(多区域)和全球(多大陆)配置中有所不同。
这里的技巧是 Spanner 不会插入“节点”,而是尝试在大多数节点之间达成共识。由于我们总是运行奇数个节点,其中一个将首先达成共识并阻止另一个。该事务将被提交,然后另一个事务将失败,因为该行已经存在。
Eric Brewer 在最近的这篇文章中很好地概述了在这种情况下如何实现一致性:Spanner、TrueTime 和 CAP 定理