MongoDB:读关注

  1. 云栖社区>
  2. 袋鼠云技术团队>
  3. 博客>
  4. 正文

MongoDB:读关注

笱局长 2019-06-12 12:18:29 浏览492
展开阅读全文

MongoDB读关注,类似于关系型数据库的隔离级别,但只是解决脏读的问题 READ-uncommited。
在3.2版本后,读关注read concern在local majority 的基础上新增linerizable级别,使读到的数据更加安全,但也带来一些性能上面的问题。
在一个3副本的副本集架构中,看看设置不同read concern级别,会对读操作有什么影响image
假设在同一个时间线T1~T4上,primary多次执行写操作,分解写过程,分析下可以返回的数据:
image
T1--A写入数据,B、C同步oplog,B、C应用日志之后,ACK返回给A
T2--A写入数据,B、C同步oplog,C应用日志之后,ACK返回给A,B没有返回
T3--A写入数据,C同步oplog, C没有返回
对不同读关注级别,总结如下
image

可以看到,linearizable级别,需要查询过滤条件中包含唯一约束fields,并且推荐只在primary查询时使用;
查询会一直等待大部分节点返回ACK,所以要有超时设置,db.restaurants.find( { _id: 5 } ).readConcern("linearizable").maxTimeMS(10000);
读到的数据肯定是持久化的数据,但性能会有所降低。

majority级别,只要是在发起读操作之前,已经大部分节点ACK的数据,都可以被读取,但不保证数据已经持久化;
推荐使用majority。

网友评论

登录后评论
0/500
评论
笱局长
+ 关注
所属云栖号: 袋鼠云技术团队