MongoDB写入数据策略( 二 )


Changed in version 3.2: With j: true, MongoDB returns only after the requested number of members, including the primary, have written to the journal.
另外,仅仅j:true 不保证集群 failover 时发生回滚的写操作 。
j: true does not by itself guarantee that the write will not be rolled back due to replica set primary failover.
wtimeout:返回确认的超时时间,单位为毫秒 。
如果写入操作超过该值,则返回错误,即使最终写入是成功了,但数据库不会撤销超时写入的数据 。如果没有指定 wtimeout 值,则写入操作将无限期阻塞,wtimeout:0 等同于该选项未设置值 。同时,这个参数和 WriteConncern 的w值有关,并且只适用于w大于0的情况 。比如:w:0,表示可以超时无限大,则不返回错误;w:1,只和主节点确认的超时时间;w:majority,表示需要和多数节点确认超时时间 。
?数据提交策略?MongoDB也有和MySQL有类似的提交策略,是由 commitIntervalMs 参数控制,它是日志持久化的间隔时间(以毫秒为单位) 。如果想要更好的数据安全,可以设为每毫秒对cache中的数据做硬盘层面的sync;如果需要更好的写入性能,最大可以改为每500毫秒做一次sync 。它的取值范围是1 ~ 500毫秒,默认值是100毫秒,不支持in-memory 存储引擎 。
总结MongoDB 写入策略包括以下几个方面:

  • w:指定写入数据后需要在多少个节点上同步写入成功后,才返回确认信息 。
  • j:设置 j:true 会将数据写入日志中,可以在节点宕机时恢复数据 。但是 j:true 并不保证数据已经写入磁盘文件中 。
  • wtimeout:指定写入超时时间 。当写入操作达到超时时间时,即使最终成功写入也会返回错误信息 。
在实际使用中,可以根据具体的业务需求和系统环境来选择适合的写入策略,以达到最佳的性能和可靠性 。例如,在数据一致性要求高的场景中,可以使用 majority 写入确认来保证数据同步的可靠性 。而在性能要求高、数据不敏感的场景中,可以使用 w 值较小的写入关注点来提高写入性能 。
本文转载自微信公众号「云数据库技术」




推荐阅读