伙计们,我目前正在通过“设计数据密集型应用程序”一书了解分布式数据系统。
我想我对单个副本系统中的版本号如何允许服务器检测并发写入有非常深刻的理解*
。作者从这个例子开始,因为一旦你了解了单副本系统,将这种理解扩展到多领导者或无领导者复制系统应该是显而易见的,但对我来说根本不明显。
多个副本可以处理写入请求的系统中的版本号如何工作?换句话说,什么是版本向量?
*
在单副本系统中,每次写入都伴随着一个版本号。此版本号是写入所基于的数据的版本。如果写入基于该键的数据的版本 1,并且版本 2 已经存在,我们知道传入的写入与版本 2 并发。传入的写入只能覆盖版本 1 中的数据,因为它不了解版本 2 中的数据。例如,版本 1 是 [eggs],版本 2 是 [eggs] 和 [milk]。传入的写入想要将此键更新为 [eggs, bacon]。此密钥的第 3 版将变为 [eggs, bacon] 和 [milk]。传入的写入不能覆盖 [milk],因为它甚至不知道 [milk] 是键中的一个值。