知识卡片

线性读要验证主权

普通读书笔记卡 · 1720.d

内容

MongoDB 线性读通过一次空写复制到多数副本,确认当前 primary 不在少数分区中,避免旧主继续返回陈旧数据。发散:强读往往不是“多读几个副本”,而是让读参与写协议确认当前权威。

参考来源

- 位置:《分布式系统与一致性》第5章《文档数据库MongoDB》线性读一节(源文件:_epub-src/OEBPS/Text/chapter9.xhtml) - 结论依据:原文明确"线性读实际上是在读之后阻塞等待,做了一次空的写操作,这个空的写操作会被复制到大多数副本,保证首要副本不是处于网络分区的少数成员一侧,当复制成功之后才完成读操作",用于防止陈旧读。 - 原始内容:陈旧读发生的原因在于网络分区导致脑裂,在网络分区的少数成员一侧的旧的首要副本仍然可以处理读请求……线性读实际上是在读之后阻塞等待,做了一次空的写操作,这个空的写操作会被复制到大多数副本,保证首要副本不是处于网络分区的少数成员一侧,当复制成功之后才完成读操作。