MongoDB中的写关注(Write Concern)表示在写入操作(insert/update/delete)完成后,MongoDB返回给客户端的确认级别。它可以确保数据正确写入到 mongod 和副本集中的其他成员。
MongoDB提供以下几个写关注级别:
- w:0 – 默认级别,在返回写回执之前不等待任何确认。可能数据未写入到持久层。
- w:1 – 等待主节点确认写操作后返回写回执。数据已写入主节点持久层。
- w:2 – 等待主节点以及一个次节点确认写操作后返回写回执。 确保数据在一个次节点已持久化。
- w:”majority” – 等待主节点以及大多数副本集成员确认写操作后返回写回执。确保数据在大多数节点持久化。
- journal:true – 等待主节点在journal文件(WAL日志)中确认写操作后返回写回执。确保数据在文件系统中持久化。
- w:自定义值 – 等待指定个数的mongod实例确认后返回写回执。
我们可以在连接字符串,请求对象或集合级别设置写关注级别。示例:
// 连接字符串
mongodb://localhost:27017/?w=1
// 请求级别
db.collection.insertOne({a: 1}, {w: "majority"})
// 集合级别
db.collection.createIndex({a: 1}, {w: 2})
理解MongoDB写关注的各个级别,可以让我们根据业务需求选择恰当的确认级别,保证数据正确持久化。
总之,写关注定义了MongoDB在写操作后返回给客户端的确认级别。理解不同级别的差异与作用,是我们使用这个机制的基础。