MongoDB: 通过ReadConcern 来处理备库一致读的问题

  • 时间:
  • 浏览:0

afterOpTime 意味着着Deprecated 了,不想 忽略。

ClusterTime 暂时理解为有一一个时间点, 而其他 时间点是哪几个含义取决于level 参数。

afterClusterTime 表示在该时间点后来。

atClusterTime 意味着着是4.2 的全局事务有关,目前driver 可是我支持设置。

b). slave 每次向它的source节点请求oplog 的后来,source节点会返回它的_lastAppliedOpTime。

为了处里上述间题图片2, 用户不想 指定level 为majority + afterClusterTime, 表示用户要在ClusterTime后来的数据,后来 大多数节点都意味着着有其他 数据了。 这时,不想 保证即使原先有该数据的节点死掉,是新的primary肯定有其他 数据,所有的secondary最终也会有其他 数据。

意味着着level 为local, ClusterTime 则表示applied oplog time。

意味着着level 为majority, ClusterTime 则表示大多数节点都达到的 applied oplog time。

意味着着最新的数据不一定是majority 的数据,而对于有一一个节点来说,用户要的意味着着是majority 的数据,统统 存储引擎还要有并否有保存历史数据的能力,目前不想 能 wiredTiger才支持snapshot,统统 意味着着要使用ReadConcern=="majority", 还要使用wiredTiger 引擎。

由第一主次让.我让.我让.我让.我让.我让.我儿看了readConcern 还要设置level, afterClusterTime, atClusterTimeout,MongoDB driver 提供了相关的接口让用户当时人设置。 其中的Level 用户使用readConcern 则还要指定。其他的则全部都是还要, driver 会设置默认值。

每有一一个MongoDB slave 都维护了有一一个 _lastAppliedOpTime 和 _lastCommittedOpTime。 (根据mongodb 的配置,_lastAppliedOpTime 有时应该是_durableOpTime,这里不做区分)

_lastAppliedOpTime 的值比较容易维护,每次apply一批oplog 就会直接更新。_lastCommittedOpTime 更新比较困难。 主要有以下几种法律法律法律依据:

_lastAppliedOpTime 表示本节点applied 到了那个时间,

_lastCommittedOpTime 表示克隆qq好友好友集内写入到majority节点的_lastAppliedOpTime。

MongoDB的写请求写入Primary, secondary从Primary自动获取后来 应用oplog来保持和主库的同步, MongoDB 允许用户从Primary 意味着着 secondary 读取数据(由客户端ReadPreference 决定)。但读数据意味着着位于以下间题图片:

为了处里上述间题图片1, 用户不想 指定local + afterClusterTime, 表示用户要数据 ClusterTime 后来的数据(但依然意味着着全部都是最新数据),意味着着其他 节点没法 ,服务器不想返回,总是等到有为止。

意味着着使用了 causally consistent, MongoDB driver会自动更新afterClusterTime 为上两根请求的response 的operationTime。

上述2种法律法律法律依据都比较及时, MongoDB 4.0 中采用了 b 方案。

MongoDB 引入了ReadConcern的概念, readConcern 的原型为: