MongoDB中的读关注(Read Concern)表示读操作读取的数据的一致性级别。它定义了客户端读取数据时,mongod会 BLOCK 哪些操作。
MongoDB提供以下几个读关注级别:
- local – 默认级别。读取操作会读取这个节点本地的数据,不会BLOCK任何操作。数据可能不一致。
- available – 读取操作会读取这个副本集最新的主节点的数据。不会BLOCK写操作。数据可能不一致。
- majority – 读取操作会读取主节点以及大多数副本集成员的数据。会BLOCK没有大多数的写操作。可以确保读取到大多数节点的数据。
- linearizable – 读取操作会读取主节点以及所有次节点的数据。会BLOCK所有写操作。可以确保读取到全部节点最新的数据。
我们可以在连接字符串,请求对象或集合级别设置读关注级别。示例:
// 连接字符串
mongodb://localhost:27017/?readConcern=majority
// 请求级别
db.collection.findOne({a: 1}, {readConcern: "linearizable"})
// 集合级别
db.collection.createIndex({a: 1}, {readConcern: "available"})
理解MongoDB读关注的各个级别,可以让我们根据业务需求选择恰当的一致性级别,保证读取到正确的数据。