mongo的read preference模式
mongo的查询过程,默认是primary模式,也就是从主节点查询。当然也有其他模式。主模式的有点就是,你总是能读到最新的数据,缺点在于,读写位于同一个节点,负载比较高。
mongo的查询几种模式,
Primary:默认,所有的均从primary的replica set读
primarypreferred:大多数情况下从primary的replica set读,当其不可用时,从其secondary members读
secondary:所有的读操作均从secondary member读取
SecondaryPreferred:大部分情况下从secondary member读取,当secondary member不可用时,从primary读取
nearest:从最小网络延时的replica set读取
需要注意的是Read preference在通过mongos连接的情况下,配置仍然生效。
Read preference的处理过程
成员选择(memberselection)
client的driver和mongos会周期性的更新replica set的状态
如果你选择的是非primary模式的read preference,那么client driver会采用以下的方式决定连接哪个member:
- 结合member的类型(primary,secondary,or all members)收集一系列合适的member
- 如果指定了tag set,那么就排除掉不符合tag set的member
- 按照绝对价值计算哪一个member是距离client最近的
- 按照指定的距离范围(ping time,默认是15ms),可以找到一系列位于这个距离之内的members,这些就可以定义为absolute nearest
- 从上述一系列的member中随机挑选一个。