ITPub博客

首页 > 数据库 > NoSQL > MongoDB writeConcern原理解析

MongoDB writeConcern原理解析

NoSQL 作者:steven_hua 时间:2017-09-27 14:01:07 0 删除 编辑


MongoDB writeConcern原理解析

MongoDB支持客户端灵活配置写入策略(writeConcern),以满足不同场景的需求。
db.collection.insert({x: 1}, {writeConcern: {w: 1}})

writeConcern选项

MongoDB支持的WriteConncern选项如下

    w: 数据写入到number个节点才向用客户端确认
        {w: 0} 对客户端的写入不需要发送任何确认,适用于性能要求高,但不关注正确性的场景
        {w: 1} 默认的writeConcern,数据写入到Primary就向客户端发送确认
        {w: “majority”} 数据写入到副本集大多数成员后向客户端发送确认,适用于对数据安全性要求比较高的场景,该选项会降低写入性能
    j: 写入操作的journal持久化后才向客户端确认
        默认为”{j: false},如果要求Primary写入持久化了才向客户端确认,则指定该选项为true
    wtimeout: 写入超时时间,仅w的值大于1时有效。
        当指定{w:
        }时,数据需要成功写入number个节点才算成功,如果写入过程中有节点故障,可能导致这个条件一直不能满足,从而一直不能向客户端发送确认结果,针对这种情况,客户端可设置wtimeout选项来指定超时时间,当写入过程持续超过该时间仍未结束,则认为写入失败。

{w: “majority”}解析

{w: 1}、{j: true}等writeConcern选项很好理解,Primary等待条件满足发送确认;但{w:
“majority”}则相对复杂些,需要确认数据成功写入到大多数节点才算成功,而MongoDB的复制是通过Secondary不断拉取oplog并重放来实现的,并不是Primary主动将写入同步给Secondary,那么Primary是如何确认数据已成功写入到大多数节点的?

http://77g6ez.com1.z0.glb.clouddn.com/majority.png

参考资料



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/807718/viewspace-2145521/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-16

  • 博文量
    117
  • 访问量
    190321