MongoDB中的写关注(Write Concern)是什么?有哪些级别?

MongoDB中的写关注(Write Concern)表示在写入操作(insert/update/delete)完成后,MongoDB返回给客户端的确认级别。它可以确保数据正确写入到 mongod 和副本集中的其他成员。

MongoDB提供以下几个写关注级别:

  1. w:0 – 默认级别,在返回写回执之前不等待任何确认。可能数据未写入到持久层。
  2. w:1 – 等待主节点确认写操作后返回写回执。数据已写入主节点持久层。
  3. w:2 – 等待主节点以及一个次节点确认写操作后返回写回执。 确保数据在一个次节点已持久化。
  4. w:”majority” – 等待主节点以及大多数副本集成员确认写操作后返回写回执。确保数据在大多数节点持久化。
  5. journal:true – 等待主节点在journal文件(WAL日志)中确认写操作后返回写回执。确保数据在文件系统中持久化。
  6. w:自定义值 – 等待指定个数的mongod实例确认后返回写回执。

我们可以在连接字符串,请求对象或集合级别设置写关注级别。示例:

// 连接字符串
mongodb://localhost:27017/?w=1

// 请求级别
db.collection.insertOne({a: 1}, {w: "majority"}) 

// 集合级别 
db.collection.createIndex({a: 1}, {w: 2})

理解MongoDB写关注的各个级别,可以让我们根据业务需求选择恰当的确认级别,保证数据正确持久化。

总之,写关注定义了MongoDB在写操作后返回给客户端的确认级别。理解不同级别的差异与作用,是我们使用这个机制的基础。