dev.to | 📄 原文链接 | 2026-10-29 收录

MongoDB 把反悔的写入放到了哪里

来源:dev.to — 2026-10-28

📋 概述

MongoDB 副本集可以告诉你的应用写入成功,然后把这条写入弄丢。这不是 bug,而是你选择的写关注允许的结果。作者在 Docker 里起了一个三成员副本集,用八个线程以最快速度插入只带 _id 和时间戳的小文档并记录每一条被确认的插入,然后用两种方式弄坏主节点:直接杀掉容器,以及在应用仍能连上它的前提下把它和另外两个成员切断。结果:w:1 写关注在近 48 万条被确认的写入里丢了 5 条,10 轮里有 3 轮出现丢失,而且这 5 条全都没进回滚文件——因为 w:1 在主节点内存里就确认了,而不是落盘之后。改成 w:1, j:true 或 majority 后丢失为 0,但分别有 27 条和 30 条「报错但实际已保存」。当前版本默认写关注已经是 majority;延迟中位数分别是 0.28、1.12 和 1.34 毫秒。

🔑 核心要点

💡 金句

“A MongoDB replica set can tell your app a write succeeded and then lose it.”
译:MongoDB 副本集可以告诉你的应用写入成功了,然后把这条写入弄丢。
← 返回 dev.to 首页