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

MongoDB中的读关注(Read Concern)表示读操作读取的数据的一致性级别。它定义了客户端读取数据时,mongod会 BLOCK 哪些操作。

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

  1. local – 默认级别。读取操作会读取这个节点本地的数据,不会BLOCK任何操作。数据可能不一致。
  2. available – 读取操作会读取这个副本集最新的主节点的数据。不会BLOCK写操作。数据可能不一致。
  3. majority – 读取操作会读取主节点以及大多数副本集成员的数据。会BLOCK没有大多数的写操作。可以确保读取到大多数节点的数据。
  4. linearizable – 读取操作会读取主节点以及所有次节点的数据。会BLOCK所有写操作。可以确保读取到全部节点最新的数据。

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

// 连接字符串
mongodb://localhost:27017/?readConcern=majority

// 请求级别
db.collection.findOne({a: 1}, {readConcern: "linearizable"})

// 集合级别
db.collection.createIndex({a: 1}, {readConcern: "available"})

理解MongoDB读关注的各个级别,可以让我们根据业务需求选择恰当的一致性级别,保证读取到正确的数据。