一边搭建一边理解MongoDB副本集(副本集读写语义)

一边搭建一边理解MongoDB副本集(副本集读写语义)

对于应用程序客户端角度来看,无论MongoDB实例是以单个服务还是副本集运行都是透明的。但是MongoDB为副本集提供了额外的读写语义。

NOTE:
分片同样是副本集的分片集群提供了关于读写操作相同的语义。

副本集的写关注

写关注描述了对MongoDB写操作的通知等级。

读偏好

读偏好定义了客户段驱动应该选择哪个(副本集成员)进行读操作。

服务器选择算法

描述了读偏好的机制。

副本集的写关注

检验副本集的写操作

对于副本集来说,默认的写关注只要求来自主节点的通知。你可以覆盖默认的写关注,比如确认副本集特定数量的通知。

这里写图片描述

为了覆盖默认的写关注,可以为每个写操作定义写关注。比如,下面的方法包含了一个指定写入传播到主节点和至少一个从节点后返回,或超时5秒的方法。

db.products.insert(
   { item: "envelopes", qty : 100, type: "Clasp" },
   { writeConcern: { w: 2, wtimeout: 5000 } }
)

你可以为写关注包含一个超时阈值。这防止了如果写关注不可达时,写操作无限的阻塞。比如如果写关注需要副本集中4个成员的确认,但是副本集只有3个成员,这个操作将会阻塞到这些(4个)成员都上线。

改变默认的写关注

你可以通过在副本集中设置settings.getLastErrorDefaults改变默认的写关注。下面一系列命令创建了一个配置,在返回前等待大多数投票成员完成写操作:

cfg = rs.conf()
cfg.settings = {}
cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }
rs.reconfig(cfg)

如果你以特定的写关注发起了写请求,这个写操作会使用自己的写关注而不是默认的。

自定义写关注

你可以为副本集成员打上tag并使用resulting tag集合还创建自定义写关注。查看配置副本集tag集合来使用tag集合配置自定义写关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值