知识卡片
捕获因果依赖关系:版本向量的泛化用法
内容
要让一个系统真正做到因果一致,光有[[用此前发生关系而非物理时间定义并发及版本向量的作用]]中针对单个键的并发检测还不够,需要把这种思路推广到整个数据库:跟踪客户端在发起一次写入之前读取过哪些数据版本,把这些”读到过的版本”作为因果依赖记录下来并随写入一起传播。这样,任何后续读到这次写入的客户端,也能知道它依赖的前置状态,进而保证按因果顺序应用变更,而不是简单按到达时间应用。这个机制本质上是把版本向量从”追踪单个键的并发写入”泛化为”追踪任意读写操作之间的因果依赖”,代价是需要维护和传播更丰富的元数据。发散:这解释了为什么因果一致性在工程实现上比听起来更复杂——它要求整个系统面向”依赖关系”设计数据传播路径,而不只是加一个时间戳字段。
参考来源
- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"捕获因果关系"(源文件:_epub-src/ch9_split_000.html)
- 结论依据:原文说明捕获因果依赖需要追踪客户端写入前读取的数据版本,并指出这是版本向量思想的推广(从追踪并发写入扩展到追踪读写之间的因果依赖),直接支撑本卡片结论。
- 原始内容:为了确定因果依赖关系,我们需要某种方法来描述数据库中一个节点的知识状态……这是版本向量概念的泛化。