知识卡片
多数读避免脏读
内容
MongoDB 的 majority read 只返回已复制到多数副本的版本,因为这些版本不会在后续回滚中消失。它读的是已确认历史版本,不一定是最新版本。发散:读稳定性和读新鲜度是两件事,前者防脏读,后者才靠线性读。
参考来源
- 位置:《分布式系统与一致性》第5章《文档数据库MongoDB》大多数读一节(源文件:_epub-src/OEBPS/Text/chapter9.xhtml)
- 结论依据:原文明确"为了解决脏读这种异常,在MongoDB 3.6中引入了大多数读,也就是只返回已经被复制到大多数副本的数据。因为被复制到大多数副本的数据不会被回滚,所以能防止脏读的发生"。
- 原始内容:不管是从首要副本上读,还是从次要副本上读,产生脏读都是因为客户端读取的数据在后续的回滚中被删除了……为了解决脏读这种异常,在MongoDB 3.6中引入了大多数读,也就是只返回已经被复制到大多数副本的数据。因为被复制到大多数副本的数据不会被回滚,所以能防止脏读的发生。